# ESW Developer Platform

ESW developer documentation for APIs, integrations, authentication, checkout, orders, webhooks, setup guides, and technical references.

<h2 align="center">ESW Developer Documentation Portal</h2>

<p align="center"><mark style="color:$info;">Explore our developer documentation for eCommerce integrations, REST APIs, authentication, checkout, webhooks, setup guides, and more.</mark></p>

{% columns %}
{% column width="25%" %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden align="center"></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Configure your developer environment and launch faster.</td><td align="center"></td><td></td><td><a href="/files/2IsHQnugVFiS1QfQUMOA">/files/2IsHQnugVFiS1QfQUMOA</a></td><td><a href="/spaces/S1VBiRsVGuY2lQIOaVbI/pages/PbYb0GukRhiS4qCHdRal">/spaces/S1VBiRsVGuY2lQIOaVbI/pages/PbYb0GukRhiS4qCHdRal</a></td></tr></tbody></table>
{% endcolumn %}

{% column width="25%" %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden align="center"></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Explore our integration options to find what best fits your business.</td><td align="center"></td><td><a href="https://esw.com/">https://esw.com/</a></td><td><a href="/files/IC9zVaZsnSBTC6Pw36Iu">/files/IC9zVaZsnSBTC6Pw36Iu</a></td><td><a href="/spaces/bB3UcHnWX3RLHHoolsLd">/spaces/bB3UcHnWX3RLHHoolsLd</a></td></tr></tbody></table>
{% endcolumn %}

{% column %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden align="center"></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Browse our API documentation for technical reference details</td><td align="center"><h4><strong>API References</strong></h4></td><td><a href="https://esw.com/">https://esw.com/</a></td><td><a href="/files/lr08tWEMQW1rFYx0d2Pj">/files/lr08tWEMQW1rFYx0d2Pj</a></td><td><a href="/spaces/sF5ifQjsfzalpf6LcO1G/pages/Xh8kfHbBIugc76WYNqOX">/spaces/sF5ifQjsfzalpf6LcO1G/pages/Xh8kfHbBIugc76WYNqOX</a></td></tr></tbody></table>
{% endcolumn %}

{% column %}

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th data-hidden align="center"></th><th data-hidden data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Discover the ESW Agentic Commerce Hub for faster task management.</td><td align="center"><h4><strong>Agentic Commerce Hub</strong></h4></td><td></td><td><a href="/files/zG5aO0O3peKQY1cd2kI0">/files/zG5aO0O3peKQY1cd2kI0</a></td><td><a href="/spaces/oNiYzXq5W9lF4B0fAZ9e/pages/JIgaZMvLkPNFqXMIZfW8">/spaces/oNiYzXq5W9lF4B0fAZ9e/pages/JIgaZMvLkPNFqXMIZfW8</a></td></tr></tbody></table>
{% endcolumn %}
{% endcolumns %}

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

<h3 align="center">Get Started with APIs</h3>

<p align="center">ESW offers REST APIs and integration patterns in its Developer Portal, using resource-based URLs, JSON payloads, and standard HTTP status codes.</p>

<p align="center"><a href="/spaces/S1VBiRsVGuY2lQIOaVbI/pages/7FvWQMF0kTK7HGhlQfmo" class="button secondary" data-icon="user-key">Go to Authentication</a></p>
{% endcolumn %}

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

```json
POST /api/v4/Package HTTP/1.1
Host: logistics-package-api.sandbox.eshopworld.com/
Authorization: Bearer YOUR_SECRET_TOKEN
{
  "brandCode": "GOC",
  "orderReference": "ABC1234567890",
  "packageReference": "AAA1234567890",
  "orderType": "CHECKOUT",
  "weight": {
    "weight": 1.34,
    "weightUnit": "KG"
  },
```

{% endcolumn %}
{% endcolumns %}

<h2 align="center">ESW Help Center and Client Hub</h2>

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><h2>Client Hub</h2><p>Use the ESW Client Hub to manage platform configuration, pricing, messaging, roles, and self-service support.</p></td><td data-object-fit="contain"><a href="/files/tKhwls7zNO5uTm7zOcHt">/files/tKhwls7zNO5uTm7zOcHt</a></td><td><a href="https://esp.eshopworld.com/">https://esp.eshopworld.com/</a></td></tr><tr><td align="center"><h2>Help Center</h2><p>Access ESW user guides, onboarding resources, and support documentation to get started faster.</p></td><td data-object-fit="contain"><a href="/files/jL86O2bsflB4dqaDGrMw">/files/jL86O2bsflB4dqaDGrMw</a></td><td><a href="https://help.esw.com">https://help.esw.com</a></td></tr></tbody></table>

<h2 align="center">Popular Topics</h2>

{% columns %}
{% column width="33.33333333333333%" %}

#### Get Started

* [Quick Start Guide](/getting-started)
* [Authentication](/getting-started/get-started-with-esw/readme/quickstart)
* [Access Tokens](/getting-started/get-started-with-esw/readme/publish-your-docs)
* [FAQs](/getting-started/get-started-with-esw/faqs)
* [Test Cards](/getting-started/get-started-with-esw/readme/test-cards)
  {% endcolumn %}

{% column width="33.33333333333333%" %}

#### APIs

* [Custom Catalog](/customs-catalog-api)
* [Package](/package-api)
* [Checkout](/checkout-api)
* [Returns](/returns-api)
* [Order](/order-api)
* [API References](/api-reference)
  {% endcolumn %}

{% column width="33.33333333333333%" %}

#### Commerce Platform Connectors

* [Salesforce Commerce](#salesforce-commerce)
* [Shopify](/shopify)
* [Adobe Commerce](/shopify)
* [Agentic Commerce](/agentic-commerce)
  {% endcolumn %}
  {% endcolumns %}


# Overview

Start here to explore ESW APIs and jump to the main service areas, including customs, pricing, checkout, orders, returns, callbacks, and fulfillment.

{% @code-walkthrough/alert-block title="ESW services are delivered and managed via REST APIs" message="Expect resource-oriented URLs and JSON payloads." type="success" %}

<table data-view="cards"><thead><tr><th align="center"></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 align="center">Customs Catalog API</td><td><a href="/spaces/JWssSKqn34oo0GTi1dVW/pages/0ljInR3wX9yfMZEvlhBK">/spaces/JWssSKqn34oo0GTi1dVW/pages/0ljInR3wX9yfMZEvlhBK</a></td><td data-object-fit="contain"><a href="/files/K10bRZXzkcV3PjAGhE6H">/files/K10bRZXzkcV3PjAGhE6H</a></td></tr><tr><td align="center">Pricing Advisor API</td><td><a href="/spaces/nTL8tl9tUOtaGkSQHGiK/pages/EIGFjqZfvd6s3Op32yBs">/spaces/nTL8tl9tUOtaGkSQHGiK/pages/EIGFjqZfvd6s3Op32yBs</a></td><td data-object-fit="contain"><a href="/files/b8LC2MG2mbq25HKBV784">/files/b8LC2MG2mbq25HKBV784</a></td></tr><tr><td align="center">Checkout API</td><td><a href="/spaces/chjZv79baUiFWxjmZavx/pages/sB155FV2pgYHdCAgTy5O">/spaces/chjZv79baUiFWxjmZavx/pages/sB155FV2pgYHdCAgTy5O</a></td><td data-object-fit="contain"><a href="/files/MvWO05Z1Gev4Ptg3NOop">/files/MvWO05Z1Gev4Ptg3NOop</a></td></tr><tr><td align="center">Package API</td><td><a href="/spaces/ZhcwGHfYyTPT5VkoQl32/pages/66UkEjgBkmrmojeKVv7P">/spaces/ZhcwGHfYyTPT5VkoQl32/pages/66UkEjgBkmrmojeKVv7P</a></td><td data-object-fit="contain"><a href="/files/jRawzEG8aLyj4q3nkUOf">/files/jRawzEG8aLyj4q3nkUOf</a></td></tr><tr><td align="center">Order API</td><td><a href="/spaces/9sJh9mebwGhWfzKvcTnt/pages/202esirNcOhTsSfTGXEV">/spaces/9sJh9mebwGhWfzKvcTnt/pages/202esirNcOhTsSfTGXEV</a></td><td data-object-fit="contain"><a href="/files/DZii9emz1RH0GX9nZYoe">/files/DZii9emz1RH0GX9nZYoe</a></td></tr><tr><td align="center">Returns API</td><td><a href="/spaces/a921jcoPME0jDOOuVtoT/pages/G2GxBBnsFApQzL2IXCko">/spaces/a921jcoPME0jDOOuVtoT/pages/G2GxBBnsFApQzL2IXCko</a></td><td data-object-fit="contain"><a href="/files/Q50HPbKyKDurbvzUFlnc">/files/Q50HPbKyKDurbvzUFlnc</a></td></tr><tr><td align="center">Fulfillment API</td><td><a href="/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/aLbDQUGvqk3mO0bRA0dc">/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/aLbDQUGvqk3mO0bRA0dc</a></td><td data-object-fit="contain"><a href="/files/axIxS5dhujcjoyTcr3H2">/files/axIxS5dhujcjoyTcr3H2</a></td></tr><tr><td align="center">Callback API</td><td><a href="/spaces/Q1HVASS6ihhZefH3FyG1/pages/QbefZqpQGdJwhjGvqxhi">/spaces/Q1HVASS6ihhZefH3FyG1/pages/QbefZqpQGdJwhjGvqxhi</a></td><td data-object-fit="contain"><a href="/files/wkRxwM9cHG5s8nvKio5O">/files/wkRxwM9cHG5s8nvKio5O</a></td></tr><tr><td align="center">API References</td><td><a href="/spaces/sF5ifQjsfzalpf6LcO1G/pages/Xh8kfHbBIugc76WYNqOX">/spaces/sF5ifQjsfzalpf6LcO1G/pages/Xh8kfHbBIugc76WYNqOX</a></td><td data-object-fit="contain"><a href="/files/niNr9oLhiaw2PxaMpysB">/files/niNr9oLhiaw2PxaMpysB</a></td></tr></tbody></table>


# Authentication

Learn how ESW STS authentication works, how to request OAuth 2.0 access tokens with client credentials, and how to send Bearer tokens on API requests.

ESW APIs use the **Security Token Service (STS)**. STS issues and validates **OAuth 2.0 access tokens**. You pass these tokens as **Bearer** tokens on every API request.

Most integrations use the **OAuth 2.0 client credentials** flow. You authenticate with a `client_id` and `client_secret`. You exchange them for a short-lived access token from STS.

| Service         | Sandbox                                                     | Production                                                     |
| --------------- | ----------------------------------------------------------- | -------------------------------------------------------------- |
| **STS (OAuth)** | `https://security-sts.sandbox.eshopworld.com/connect/token` | `https://security-sts.production.eshopworld.com/connect/token` |

From the gateway, individual APIs follow the pattern:

The `{tenantCode}` is your retailer/brand code assigned by ESW.

### How authentication works

{% stepper %}
{% step %}

#### Request an access token from STS

**STS token endpoint**

<mark style="color:green;">`POST`</mark> `https://security-sts.<environment>.eshopworld.com/connect/token`

Exchange your `client_id` + `client_secret` for OAuth 2.0 access token.

**Headers**

| Name         | Value                               |
| ------------ | ----------------------------------- |
| Content-Type | `application/x-www-form-urlencoded` |

**Body** (form URL encoded)

| Name            | Type   | Description                                                                         |
| --------------- | ------ | ----------------------------------------------------------------------------------- |
| `grant_type`    | string | Use `client_credentials`                                                            |
| `scope`         | string | Space-separated scopes Example: `checkout.preorder.api.all pricing.advisor.api.all` |
| `client_id`     | string | Client identifier provided by ESW                                                   |
| `client_secret` | string | Client secret provided by ESW                                                       |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "access_token": "<jwt>",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "checkout.preorder.api.all"
}
```

{% endtab %}

{% tab title="403" %}

```json
{
  "error": "invalid_client",
  "error_description": "Client credentials are invalid."
}
```

{% endtab %}
{% endtabs %}

Use the examples on [Access Tokens](/getting-started/get-started-with-esw/readme/publish-your-docs).
{% endstep %}

{% step %}

#### Call ESW APIs with the Bearer token

Send the token in the `Authorization` header:

```http
Authorization: Bearer <access_token>
```

If the token is missing or invalid, you will get `401` or `403`.
{% endstep %}
{% endstepper %}

### Client credentials

ESW provides your credentials via a secure channel during setup. You use them only when requesting tokens from STS.

* **Client ID**: A unique identifier assigned to a client.
* **Client secret**: A unique secret assigned to a client. Your client secret is private and you must keep your client secret confidential.

Client credentials are valid for **six months**. There is a **one-month rollover** window for rotating secrets.

{% hint style="warning" icon="key" %}
Treat the client secret like a password. Store it in a secrets manager or encrypted store. Never commit it to source control or share it in tickets.
{% endhint %}

### Token lifetime and renewal

STS returns `expires_in` in the token response. Cache tokens and reuse them until they expire. Request a new token when you get `401` and the token is expired.

### OAuth / OpenID Connect notes

STS is compatible with **OAuth 2.0** and **OpenID Connect**. See the external reference: [OAuth 2.0](https://oauth.net/2/).

### API Base URLs

| API                    | Sandbox                                                       |
| ---------------------- | ------------------------------------------------------------- |
| **Checkout**           | `https://api.sandbox.esw.com`                                 |
| **Order**              | `https://api.sandbox.esw.com`                                 |
| **Package Management** | `https://api.sandbox.esw.com`                                 |
| **Package**            | `https://logistics-package-api.sandbox.eshopworld.com`        |
| **Customs Catalog**    | `https://logistics-customscatalog-api.sandbox.eshopworld.com` |
| **Pricing Advisor**    | `https://pricing-advisor-api.sandbox.eshopworld.com`          |
| **GRP Returns**        | `https://api.sandbox.esw.com`                                 |
| **Fulfillment**        | `https://api.sandbox.esw.com`                                 |


# Access Tokens

Request OAuth 2.0 access tokens from ESW STS using client credentials. Includes required parameters, token endpoint, and code examples

## Credentials

Request OAuth 2.0 access tokens from the ESW **Security Token Service (STS)**.

Most integrations use:

* `grant_type=client_credentials`
* one or more space-separated `scope` values

### Token endpoint

{% code title="Send a POST to " expandable="true" %}

```hurl
POST  /https://security-sts.<environment>.eshopworld.com/connect/token
```

{% endcode %}

{% @code-walkthrough/alert-block title="" message="STS expects `application/x-www-form-urlencoded` body parameters" type="warning" %}

### Parameters

Include these fields in the request body:

* `grant_type`: OAuth 2.0 grant type. Use `client_credentials`.
* `scope`: Space-separated scopes. Example: `checkout.preorder.api.all`, `pricing.advisor.api.all`
* `client_id`: Client identifier provided by ESW.
* `client_secret`: Client secret provided by ESW.

### Examples

{% tabs %}
{% tab title="cURL" %}

```sh
curl --location --request POST "https://security-sts.<environment>.eshopworld.com/connect/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "scope=<space-separated-scopes>" \
  --data-urlencode "client_id=<client_id>" \
  --data-urlencode "client_secret=<client_secret>"
```

{% endtab %}

{% tab title="C# (RestSharp)" %}

```csharp
var client = new RestClient("https://security-sts.<environment>.eshopworld.com/connect/token");
var request = new RestRequest("", Method.Post);

request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("scope", "<space-separated-scopes>");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");

var response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java (OkHttp)" %}

```java
OkHttpClient client = new OkHttpClient();

RequestBody body = new FormBody.Builder()
  .add("grant_type", "client_credentials")
  .add("scope", "<space-separated-scopes>")
  .add("client_id", "<client_id>")
  .add("client_secret", "<client_secret>")
  .build();

Request request = new Request.Builder()
  .url("https://security-sts.<environment>.eshopworld.com/connect/token")
  .post(body)
  .build();

Response response = client.newCall(request).execute();
System.out.println(response.body().string());
```

{% endtab %}
{% endtabs %}

### Scopes

{% code title="client\_id" expandable="true" %}

```
gocas.client
```

{% endcode %}

<details open>

<summary>Scopes</summary>

| Allowed Scopes                   | Description                                     |
| -------------------------------- | ----------------------------------------------- |
| checkout.preorder.api.all        | Access to PreOrder requests to the Checkout API |
| logistics.catalog.api.upload     | Upload access to Catalog API                    |
| logistics.package.api.all        | Full access to Package API                      |
| logistics.returns.api.all        | Full Access for Returns API                     |
| order.transaction.create.api.all | Scope to access the order create actions        |
| order.transaction.get.api.all    | Scope to access the Get Order                   |
| order.transaction.update.api.all | Scope to access the order update actions        |
| pricing.advisor.api.all          | Grants full access to Pricing Advisor           |
| order.transaction.update.api.all | Scope to access the order update actions        |
| order.transaction.cancel.api.all | Scope to access the Cancel actions              |

</details>

{% tabs %}
{% tab title="Sandbox" %}
{% code expandable="true" %}

```http
curl --location --request POST "https://security-sts.sandbox.eshopworld.com/connect/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "scope=checkout.preorder.api.all" \
  --data-urlencode "client_id=gocas.client" \
  --data-urlencode "client_secret=<client_secret>"
```

{% endcode %}
{% endtab %}
{% endtabs %}

See the [Postman collection](/getting-started/get-started-with-esw/readme/postman-collection#get-the-postman-collection) for working sandbox examples.

### Access Token Response

STS returns the access token and the token type (usually `Bearer`).

```json
{
    "access_token": "eyJhbGciOiJSUzI1NiIsImtpZC...I6IjQ3NkQ1QzE5QzI1Nzc0NUV",
    "expires_in": 3600,
    "token_type": "Bearer",
    "scope": "checkout.preorder.api.all"
}
```

### Use the token

Send the token on API requests:

```http
Authorization: Bearer <access_token>
```

For the full flow, see [Authentication](/getting-started/get-started-with-esw/readme/quickstart).


# Postman Collection

Download and import the ESW Postman collection + environment to run the sandbox flow (token → PreOrder → redirect).

### Get the Postman collection

Postman is the fastest way to explore the sandbox flow.

{% hint style="info" icon="rectangle-code" %}

## Install Postman

{% endhint %}

{% embed url="<https://www.postman.com/downloads/>" %}

1. Import the files below.
2. Select the imported environment.
3. Run the requests in order `(token → PreOrder → redirect)`

Our Postman collection contains a series of Checkout API calls that are made during a typical Checkout session. The URLs in these environments point to the Integration Layer Proxy, which further points to GoCasual by default. Note that each environment contains STS tokens for the equivalent GoCasual API.

**Collection** (requests)

{% file src="/files/gGjk9sLNbPezX9HQAgzB" %}

**Environment** (variables)

{% file src="/files/1nIW6uTGFgmaDGoj0bEt" %}

### Try Checkout end-to-end

#### Test credentials (sandbox)

Use these values when requesting an STS token in sandbox.

| Field           | Value                                                       |
| --------------- | ----------------------------------------------------------- |
| Token URL       | `https://security-sts.sandbox.eshopworld.com/connect/token` |
| `grant_type`    | `client_credentials`                                        |
| `scope`         | `checkout.preorder.api.all`                                 |
| `client_id`     | `gocas.checkout.client`                                     |
| `client_secret` | Provided by ESW                                             |

{% stepper %}
{% step %}

#### Get an STS access token

Use the same pattern as on [Access Tokens](/getting-started/get-started-with-esw/readme/publish-your-docs).

```sh
curl --location --request POST "https://security-sts.sandbox.eshopworld.com/connect/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "scope=checkout.preorder.api.all" \
  --data-urlencode "client_id=<client_id>" \
  --data-urlencode "client_secret=<client_secret>"
```

**Sample response**

```json
{
  "access_token": "<jwt>",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "checkout.preorder.api.all"
}
```

{% endstep %}

{% step %}

#### Create a PreOrder

Use the `access_token` from the previous step.

{% code expandable="true" %}

```sh
curl --location --request POST "https://api.sandbox.esw.com/checkout/api/v3/GOCAS/PreOrder" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <access_token>" \
  --data-raw '{
    "retailerCartId": "Sample123",
    "lineItems": [
      {
        "quantity": 2,
        "product": {
          "productCode": "1234567890",
          "title": "Black Dress",
          "description": "Black Striped Dress",
          "shopperCurrencyProductPriceInfo": { "price": "AUD3.33" },
          "imageUrl": "assets/images/cart/cart-item10.png",
          "color": "Black",
          "size": "M"
        },
        "cartGrouping": "Group 1"
      }
    ],
    "shopperCurrencyIso": "AUD",
    "retailerCurrencyIso": "EUR",
    "deliveryCountryIso": "AU"
  }'
```

{% endcode %}

**Sample API Response**

```json
{
  "preOrderCode": "e23afa68-9675-4012-8d63-df1517c624cc",
  "orderNumber": "e23afa68-9675-4012-8d63-df1517c624cc",
  "redirectUrl": "https://checkout-ui.sandbox.eshopworld.com/au/e23afa68-9675-4012-8d63-df1517c624cc"
}
```

{% endstep %}

{% step %}

#### Open Checkout

Open `redirectUrl` in a browser.
{% endstep %}
{% endstepper %}

### Troubleshooting

* `401/403`: token missing, expired, or wrong `scope`. See [Authentication](/getting-started/get-started-with-esw/readme/quickstart).
* `400`: request body validation failed. Start by reducing to one item.
* Slow responses / timeouts: follow [API best practices](/getting-started/get-started-with-esw/best-practices/apis).


# Test Cards

Test card numbers for validating ESW Checkout payments, including non-3DS and 3DS scenarios (Adyen and Computop) with OTP notes.

### Non-3DS Test Cards <a href="#non-3ds-test-cards" id="non-3ds-test-cards"></a>

The following are the details of the test cards that can be used to test ESW Checkout experience

|                                     Card Type                                    |     Card Number     | Expiry Date | Security Code |
| :------------------------------------------------------------------------------: | :-----------------: | :---------: | :-----------: |
| <img src="/files/k2WUAk09DnRUABYnZGuT" alt="" data-size="line"> American Express |  3700 0000 0000 002 |   03/2030   |      7373     |
|       <img src="/files/jAfXfLxCM8o7lhPAJH4K" alt="" data-size="line"> Visa       | 4111 1111 1111 1111 |   03/2030   |      737      |
|    <img src="/files/ZKFKjtq8HTuT1ztGceeY" alt="" data-size="line"> Mastercard    | 5555 4444 3333 1111 |   03/2030   |      737      |
|       <img src="/files/hiSVtiHCdWIbrwtcoNJq" alt="" data-size="line">Diners      |  3600 6666 3333 44  |   03/2030   |      737      |
|      <img src="/files/ts4rMraP8Z8jCjSZvFSo" alt="" data-size="line">Discover     | 6445 6445 6445 6445 |   03/2030   |      737      |
|        <img src="/files/P9gkohUL74sIAk63czrR" alt="" data-size="line"> JCB       | 3569 9900 1009 5841 |   03/2030   |      737      |
|   <img src="/files/9FDSwzgkOXmgBxaFlAbe" alt="" data-size="line">China UnionPay  |  6240 0086 3140 114 |   03/2030   |      737      |
|     <img src="/files/U3G9auaXBgW0Znkfs2OS" alt="" data-size="line"> Electron     | 4400 0000 0000 0000 |   03/2030   |      737      |
|      <img src="/files/2CJAeZ0Z4EZaC2Io285P" alt="" data-size="line"> Maestro     | 6771 7980 2100 0008 |   08/2029   |      737      |
|   <img src="/files/9FDSwzgkOXmgBxaFlAbe" alt="" data-size="line">China UnionPay  | 6250 9470 0000 0014 |   03/2030   |      123      |
|       <img src="/files/1abudImTSlO9gjfasPf8" alt="" data-size="line"> Troy       | 9792 0300 0000 0000 |   08/2029   |      737      |

***

### 3DS Test Cards <a href="#id-3ds-test-cards" id="id-3ds-test-cards"></a>

You can test the 3DS Computop cards using the following details:

| <h4><img src="/files/jAfXfLxCM8o7lhPAJH4K" alt=""> Visa</h4> | <h4><img src="/files/ZKFKjtq8HTuT1ztGceeY" alt="" data-size="line"> Mastercard</h4> | <h4>Test Scenario</h4> |
| :----------------------------------------------------------: | :---------------------------------------------------------------------------------: | :--------------------: |
|                      4000 0147 3036 6880                     |                                 5232 1241 0698 7982                                 |    Browser challenge   |
|                      4000 0155 7319 8637                     |                                 5232 1280 8394 4791                                 |    Browser challenge   |

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

* The one time password (OTP) for the above cards is 1234
* Please confirm the OTP with mouse click instead of Enter key to ensure that you are not accidentally proceeding with cancelling the operation.
  {% endhint %}

***

### <img src="/files/SalJ9a9GZEvbQE5FJIB3" alt="" data-size="original">Adyen Cards <a href="#adyen-cards" id="adyen-cards"></a>

{% hint style="info" icon="credit-card" %}

* The Adyen cards are enrolled in 3D Secure 2 security framework. To test 3D Secure 2 (advanced) scenarios, refer to [test 3D Secure 2 authentication](https://docs.adyen.com/development-resources/testing/3d-secure-2-authentication).
* One time password (OTP): 1234
  {% endhint %}

|        American Express       |  3714 4963 5398 431 | Mar-30 |      7373      |
| :---------------------------: | :-----------------: | :----: | :------------: |
|      Bancontact / Maestro     | 6703 4444 4444 4449 | Mar-30 | Not applicable |
|       Bancontact / Visa       | 4871 0499 9999 9910 | Mar-30 |       737      |
| Cartes Bancaires / Visa Debit | 4035 5014 2814 6300 | Mar-30 |       737      |
|        Cartes Bancaires       | 4360 0000 0100 0005 | Mar-30 |       737      |
|    China UnionPay (Credit)    | 6250 9470 0000 0014 | Mar-30 |       123      |
|     China UnionPay (Debit)    | 6250 9460 0000 0016 | Mar-30 |       123      |
|             Diners            |  3056 9309 0259 04  | Mar-30 |       737      |
|            Discover           | 6011 1111 1111 1117 | Mar-30 |       737      |
|            Maestro            | 5000 5500 0000 0029 | Mar-30 | Not applicable |
|           Mastercard          | 5555 4444 3333 1111 | Mar-30 |       737      |
|       Mastercard Credit       | 2222 4000 1000 0008 | Mar-30 |       737      |
|              Visa             | 4917 6100 0000 0000 | Mar-30 |       737      |
|          Visa Classic         | 4166 6766 6766 6746 | Mar-30 |       737      |

***

### Computop Cards <a href="#computop-cards" id="computop-cards"></a>

{% hint style="info" icon="binary" %}
One-time password (OTP): 1234
{% endhint %}

| Test Scenario                                                              | Visa                | Visa/ Cartes Bancaires (co-badged) | MasterCard          | MasterCard/ Cartes Bancaires (co-badged) | Maestro             | Amex               |
| -------------------------------------------------------------------------- | ------------------- | ---------------------------------- | ------------------- | ---------------------------------------- | ------------------- | ------------------ |
| Browser challenge                                                          | 4000 0164 3594 0133 | 4972 0212 3456 7842                | 5232 1221 8930 1469 | 5341 0112 3456 7851                      |                     | 3782 8224 6310 005 |
| Browser challenge                                                          | 4000 0128 9268 8323 | 4972 0212 3456 7891                | 5232 1251 2540 1459 | 5341 0112 3456 7810                      | 6759 6498 2643 8453 | 3714 4963 5398 431 |
| Browser frictionless; missing DS Transaction ID                            | 4000 01269 9048 523 | 4972 0212 3456 7883                | 5232 1272 6463 7786 | 5341 0112 3456 7893                      |                     |                    |
| Not authenticated browser frictionless                                     | 4000 0117 4413 5012 | 4972 0212 3456 7834                | 5232 1227 4150 7017 | 5341 0112 3456 7844                      |                     |                    |
| Authenticated browser frictionless                                         | 4000 0199 6619 9434 | 4972 0212 3456 7875                | 5232 1224 2254 3299 | 5341 0112 3456 7885                      |                     | 3750 0000 0000 007 |
| Browser challenge missing ACS URL                                          | 4000 0155 7319 8637 | 4972 0212 3456 7826                | 5232 1280 8394 4791 | 5341 0112 3456 7836                      |                     |                    |
| Authentication protocol error                                              | 4000 0178 7348 5953 | 4972 0212 3456 7867                | 5232 1225 9690 7270 | 5341 0112 3456 7877                      |                     |                    |
| Browser challenge; authenticated transaction; missing authentication value | 4000 0147 3036 6880 | 4972 0212 3456 7818                | 5232 1241 0698 7982 | 5341 0112 3456 7828                      |                     |                    |


# Finance and Settlement

Making worldwide commerce simple

{% @code-walkthrough/alert-block title="" message="The information provided in this Knowledge Centre is for general informational purposes only and does not constitute any legal or commercial advice. Settlement processes will vary depending on the specific terms and conditions agreed upon between ESW and each individual retailer." type="error" %}

<h2 align="center">Finance and Settlement</h2>

<h4 align="center"><strong>Making worldwide commerce simple</strong></h4>

<p align="center">Our finance solutions are designed to streamline cross-border transactions, ensuring seamless settlements and transparent billing processes for retailers and shoppers alike.</p>

<p align="center"><a href="/pages/O2VMZaxzq4yATefnCpAt" class="button secondary" data-icon="circle-dollar">Settlement &#x26; Billing</a><a href="/pages/0e4143d95116cd5af33d3cb3b3b2c78a070d3a9e" class="button secondary" data-icon="coins">Pricing</a><a href="/pages/O3e7haJ3F6CYRqtDWrRj" class="button secondary" data-icon="arrow-progress">Order Flow</a><a href="/pages/BQNafLMwuFNtfz9kHXG3" class="button secondary" data-icon="plane-departure">Invoicing, Tax and Duties</a></p>

***

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><strong>Decrease complexity</strong></td><td align="center">ESW decreases complexity to provide a seamless experience to shoppers everywhere.</td><td data-object-fit="contain"><a href="/files/lEafxCMfDJHZKOQygjmj">/files/lEafxCMfDJHZKOQygjmj</a></td></tr><tr><td align="center"><strong>Shared revenue model</strong></td><td align="center">ESW has a shared revenue model and a vested interest in your growth and cross border potential.</td><td data-object-fit="contain"><a href="/files/Mxl3Ne4ULu9ewc4bLAiH">/files/Mxl3Ne4ULu9ewc4bLAiH</a></td></tr><tr><td align="center"><strong>Tax and compliance</strong></td><td align="center">ESW handles tax, compliance and collection of money from PSPs.</td><td data-object-fit="contain"><a href="/files/yqlx31XKvvg2FHrpjrtU">/files/yqlx31XKvvg2FHrpjrtU</a></td></tr><tr><td align="center"><strong>Flexibility</strong></td><td align="center">Flexible settlement cadences to match your internal requirements: weekly, fortnightly, or monthly.</td><td data-object-fit="contain"><a href="/files/CX6EBaXSsW84YzO8fvVv">/files/CX6EBaXSsW84YzO8fvVv</a></td></tr><tr><td align="center"><strong>Cashflow</strong></td><td align="center"><p>There is no payout threshold in ESW.</p><p>ESW will remit the full value of your settlement net of our fees in the agreed settlement period.</p></td><td data-object-fit="contain"><a href="/files/OmqmQY29nK62GuqwISUm">/files/OmqmQY29nK62GuqwISUm</a></td></tr><tr><td align="center"><strong>Payment processing</strong></td><td align="center">ESW will remit payment within two business days of your selected settlement period, via bank transfer or ACH to your designated account</td><td data-object-fit="contain"><a href="/files/eEX5wMwS5rVjeZyxiwHZ">/files/eEX5wMwS5rVjeZyxiwHZ</a></td></tr></tbody></table>

***

<h2 align="center">What this means</h2>

<p align="center">ESW Benefits</p>

{% tabs %}
{% tab title="For you" %}
{% @code-walkthrough/alert-block title="" message="Receive a single payment to your chosen bank account on your selected day, in line with our flexible payment terms." type="success" %}

{% @code-walkthrough/alert-block title="" message="ESW deducts a checkout fee from this as agreed per the contract." type="success" %}

{% @code-walkthrough/alert-block title="" message="ESW takes care of all relevant tax returns and compliance on your behalf." type="success" %}

{% @code-walkthrough/alert-block title="" message="ESW deals directly with every payment provider we support." type="success" %}
{% endtab %}

{% tab title="For your team" %}
{% @code-walkthrough/alert-block title="" message="Ease of reconciliation. " type="success" %}

{% @code-walkthrough/alert-block title="" message="A single file containing all transaction types, broken down by SKU, Order, and Package level." type="success" %}

{% @code-walkthrough/alert-block title="" message="One single fee invoiced for checkout services." type="success" %}

{% @code-walkthrough/alert-block title="" message="One payment to reconcile." type="success" %}

{% @code-walkthrough/alert-block title="" message="Select the currencies that suit you while ESW handles all FX exposure." type="success" %}

{% @code-walkthrough/alert-block title="" message=" A dedicated ESW finance contact to assist with any payment or order queries." type="success" %}

{% @code-walkthrough/alert-block title="" message=" Get reconciliation reports by email or SFTP, with on-demand analysis available in Looker." type="success" %}
{% endtab %}
{% endtabs %}


# Settlement and Billing


# Reconciliation Process

Reconciliation process for settlements and billing

### Overview

* ESW generates a settlement report via email or SFTP, this includes all transaction types, Sales, Returns & Refunds. This is in line with the agreed settlement period (eg weekly, fortnightly, monthly).
* ESW will send an invoice for checkout & shipping fees as per the settlement report.
* ESW will process the payment net of ESW Checkout fee and Shipping fee within two business days of the settlement period.

Sales are included based off Shipping notification received by ESW. Returns are included once scanned and accepted into the Returns Centre. Refunds/Appeasements are included once they are approved.

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

### Finance Process

* ESW acts as the Merchant of Record (MOR), completing sales and issuing refunds directly to the end shopper.
* ESW sends the order confirmation to the shopper, using the retailer’s branding.

### ESW Reconciliation & Net Settlement Process

How it works

{% stepper %}
{% step %}
**Settlement report**

ESW generates a settlement report via **email or SFTP** covering all transaction types: **Sales, Returns, and Refunds**.

{% hint style="info" %}
Reports follow the **agreed settlement period** — weekly, fortnightly, or monthly.
{% endhint %}
{% endstep %}

{% step %}
**Invoice issuance**

ESW issues an **invoice for Checkout and Shipping fees** based on the settlement report.
{% endstep %}

{% step %}
**Net payment timeline**

ESW remits **net payment (after Checkout & Shipping fees)** within **two business days** of the settlement period.
{% endstep %}
{% endstepper %}

{% hint style="info" icon="truck-fast" %}

## Inclusion rules

* **Sales:** Included upon **Shipping Notification** received by ESW.
* **Returns:** Included once **scanned and accepted into the Returns Centre**.
* **Refunds/Appeasements:** Included **once approved**.
  {% endhint %}


# Sales

Sales process for settlements and billing

### Settlement Inclusion & Payment

An item or order is included in the settlement once it appears in an **ASN** (Advanced Shipment Notification) file received by **ESW** within the specified timelines. Settlement runs on the chosen cadence and covers all packages shipped during the previous period.

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

### How It Works

{% stepper %}
{% step %}

### Settlement report

ESW sends a settlement report to the **Retailer** showing what’s due to the retailer, with **at SKU, Order, or Package level** (via the agreed channel, e.g., email or SFTP).

{% hint style="info" %}
Can be **SKU / Order / Package**.
{% endhint %}
{% endstep %}

{% step %}

### Merchandise and consumer paid shipping

ESW pays the **value of merchandise and shipping** to the Retailer in the **chosen retailer base currency**.
{% endstep %}

{% step %}

### Duties & taxes handling

ESW **retains duty and tax** and **remits them directly** to the relevant **local tax authority**.

> Dependent on Jurisdiction and local tax rules.
> {% endstep %}
> {% endstepper %}


# Returns

Returns process for settlements and billing

### Settlement Inclusion & Processing

A return is included in the settlement once it has been **scanned and accepted** at the retailer’s return centre during the prior period.

* **ESW** processes refunds within **one working day** of acceptance at the return center.
* Shoppers typically receive their refund within **5–7 working days**, depending on their bank.
* These returns are reported as part of the **payment settlement file** with the retailer.

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><strong>Refund Processing (ESW)</strong></td><td align="center">ESW processes refunds within <strong>one working day</strong> of acceptance at the return center.</td><td data-object-fit="contain"><a href="/files/xKLiL7CbaJyIJyLJoKE5">/files/xKLiL7CbaJyIJyLJoKE5</a></td></tr><tr><td align="center"><strong>Shopper Refund Timeline</strong></td><td align="center">Shoppers typically receive their refund within <strong>5–7 working days</strong>, depending on their bank.</td><td data-object-fit="contain"><a href="/files/TppsX7SuuAHhfOa0OyHv">/files/TppsX7SuuAHhfOa0OyHv</a></td></tr><tr><td align="center"><strong>Settlement Reporting</strong></td><td align="center">These returns are reported as part of the <strong>payment settlement file</strong> with the retailer.</td><td data-object-fit="contain"><a href="/files/Qk9S6jaUayrZ8csEvpna">/files/Qk9S6jaUayrZ8csEvpna</a></td></tr></tbody></table>


# Refunds

The retailer may instruct ESW to refund any amount to the shopper outside the standard returns/cancellations process. Refunds will only be processed for items that have already shipped. If an item has not shipped, it must be refunded via the cancellation process.

### Process

{% stepper %}
{% step %}

### Submit Refund Request (CSP)

Retailer Customer Service submits the refund in the **ESW Customer Service Portal (CSP)**. This triggers a financial transaction. Refunds can be issued at **article (SKU) level** or for the **entire order**.
{% endstep %}

{% step %}

### ESW Processing & Shopper Follow-up

**ESW** processes all refunds. If a refund attempt fails, ESW will **retry** or notify the retailer’s customer service to **contact the shopper** directly.
{% endstep %}

{% step %}

### Settlement Reporting & Deductions

Refunds are included in the **settlement file (via email)**. **ESW** deducts the **full amount** of approved refunds from the retailer’s settlement.
{% endstep %}
{% endstepper %}


# Reconciliation Report

Reconciliation process for settlements and billing

{% columns %}
{% column %}
{% file src="/files/YFfhVhKegeHeF3Dw6dhN" %}
{% endcolumn %}

{% column %}
{% file src="/files/yiWgyNb1LsMl6em6ObRj" %}
{% endcolumn %}
{% endcolumns %}

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

### Checkout Fee

ESW will issue a checkout fee invoice as per the agreed contract.

{% hint style="info" icon="cart-shopping" %}

#### Checkout Fee Details

* **ESW will issue a checkout-fee invoice** per the agreed contract, covering transaction fees, compliance, and any currency conversion.
* **The invoice is itemized** in line with the settlement report, broken down by each **SKU/Package**.
* **The checkout fee is a percentage** calculated on the **total basket value**.
  {% endhint %}

### Shipping Fee

ESW will issue a shipping fee invoice as per the agreed contract.

{% hint style="info" icon="boxes-stacked" %}

#### Shipping Fee Details

* **ESW will issue an invoice for shipping fees.**
* **Package-level breakdowns** and a full summary of charges will be included in the **settlement file**.
* **Shipping fees are calculated** according to the agreed **rate card** (by **Country** and **Service Level**).
  {% endhint %}


# Pricing


# Pricing Advisor Example to Settlement

Follow a worked example from Pricing Advisor output to final ESW settlement, including uplift, blended duty and VAT, FX conversion, rounding, and retailer payout.

{% tabs %}
{% tab title="Scenario" %}

#### UK shopper

* **FX rate (GBP/USD):** `0.9212`
* **Retailer uplift:** `+10%` applied to merchandise price in the UK.
* **Duty & VAT at pre-order:** Exact values can’t be known at this stage (cart total and thresholds vary), so ESW uses a **blended (pseudo) rate** based on average cart size.
  * **Blended duty:** `1.6%`
  * **Blended VAT:** `20%`
* **Rounding rule:** Prices are **rounded to the nearest** $$£0.50$$
  {% endtab %}
  {% endtabs %}

{% tabs %}
{% tab title="Worked Example" %}

* Merchandise price: **$200**
* Uplift (10%): **$20** → Subtotal: **$220**
* Estimated duty (1.6% of $220): **$3.52**
* Estimated VAT (20% of $220 + duty): **$44.70**
* FX conversion to GBP at `0.9212` → $$≈ £247.09$$
* **Rounded shopper price** (nearest £0.50): **£247.50**.

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

{% hint style="info" icon="basket-shopping" %}
ESW returns these components (uplift, estimated duty, estimated VAT, FX rate, rounding rule) per country; for the UK, the example above applies. The resulting price is passed to ESW via the [**Checkout API pre-order**](/checkout-api).
{% endhint %}
{% endtab %}
{% endtabs %}

## Customer Order Confirmation & ESW Settlement

{% tabs %}
{% tab title="Example" %}
{% hint style="info" icon="tags" %}
**Shopper view:** Total paid by shopper = **£247.50 GBP**.
{% endhint %}

### ESW settlement breakdown

| Line item                 | GBP        | USD        | Notes                                                     |
| ------------------------- | ---------- | ---------- | --------------------------------------------------------- |
| Merch                     | 204.21     | 221.68     | Merchandise value                                         |
| Shipping                  | —          | —          | Shipping charged to customer at checkout                  |
| Duties                    | 2.04       | 2.22       | ESW remits to local authorities (actual \~1%)             |
| Tax                       | 41.25      | 44.78      | ESW remits to local authorities (actual \~20%)            |
| **Total**                 | **247.50** | **268.67** | Matches shopper total (GBP); converted value shown in USD |
| **Total paid by shopper** | **247.50** | **268.67** | Confirmation of shopper payment                           |
| ESW Checkout fee          | 13.61      | 14.78      | \~ **5.50%**                                              |
| ESW Shipping Fee          | 10.00      | 10.86      | As per agreed rate card                                   |
| **Retailer receives**     | **180.60** | **196.04** | Settlement to retailer after ESW fees                     |
| **Total costs**           | **66.90**  | **72.63**  | Sum of ESW fees, duties, and tax                          |

<div data-with-frame="true"><img src="/files/K0Fn8ZaHb9og3b3u0MHz" alt=""></div>
{% endtab %}
{% endtabs %}


# Order Flow from Confirmation to Settlement


# Flow to Order Confirmation & Payloads

The flow of an order from confirmation to settlement involves several key steps

{% stepper %}
{% step %}

#### Checkout & Payment

Shopper selects delivery method, and enters payment details

* **Delivery Method:** Standard or Express with estimated delivery dates
* **Delivery Address:** Name, street, city, postal code, country, email, phone, opt-ins
* **Payment:** Card details (name, number, expiry, CVV) and consent to ESW terms & policies

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

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

{% step %}

#### Order Confirmation

* **Thank-you page** with **Order ID**, delivery window, masked payment details
* **Addresses** (Delivery & Payment) and **Order Summary** (items, delivery, total)
* Actions: **Save as PDF** or **Continue shopping**

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

{% step %}

#### Integration Payloads

**PreOrderPayload.txt** — pricing breakdown, FX, estimated duties/VAT, cart lines

{% file src="/files/k0YkNn6lRpDTI2LsmrEt" %}

**OrderConfirmationPayload.txt** — final order details (order ID, shopper, items, totals, delivery method)

{% file src="/files/mEzCuDytfRa1JdATFKAt" %}
{% endstep %}
{% endstepper %}


# Order Settlement

## File Attributes

{% tabs %}
{% tab title="Attributes" %}

* **Brand Name:** Go Casual
* **Settlement File Date:** 08/09/2025
* **Transaction Date/Time:** 04/09/2025 11:37
* **Order Number:** PT1250904113524817GB
* **ESW Reference:** 5.00104E+12
* **Transaction Type:** Sale
* **Settlement Currency:** EUR
* **Country ISO:** GB
* **Gift Card Identifier / PSP Reference:** (blank in row)
  {% endtab %}
  {% endtabs %}

## Totals (per order confirmation)

| Currency | Total paid by shopper |
| :------: | :-------------------: |
|    GBP   |        `20.99`        |
|    EUR   |        `23.51`        |

{% hint style="warning" icon="money-bill-transfer" %}
GBP is the shopper’s charge; EUR is the retailer/settlement currency.
{% endhint %}

## Basket Breakdown

<table><thead><tr><th align="center">Line item</th><th align="center" valign="middle">GBP</th><th align="center">EUR</th><th align="center">Notes</th></tr></thead><tbody><tr><td align="center">Goods</td><td align="center" valign="middle">12.50</td><td align="center">14.00</td><td align="center">Merchandise (net of tax)</td></tr><tr><td align="center">Shipping</td><td align="center" valign="middle">4.99</td><td align="center">5.59</td><td align="center">Consumer-paid shipping (net of tax)</td></tr><tr><td align="center">Taxes on goods @20%</td><td align="center" valign="middle">2.50</td><td align="center">2.80</td><td align="center">VAT on goods</td></tr><tr><td align="center">Taxes on delivery @20%</td><td align="center" valign="middle">1.00</td><td align="center">1.12</td><td align="center">VAT on shipping</td></tr><tr><td align="center"><strong>Total</strong></td><td align="center" valign="middle"><code>20.99</code></td><td align="center"><code>23.51</code></td><td align="center">Matches shopper/retailer totals</td></tr></tbody></table>

* **Duty:** ESW calculates local D\&T; retained/remitted by ESW to authorities on importation (if applicable).
* **Return Fee:** Deducted from settlement if applicable.
* **Total Amount:** Total to be settled before fees; net of tax.
* **Fee Basis:** Total basket value including taxes paid by the consumer.
* **Retailer Fee:** Fee as per contract; net of tax.
* **Net Amount:** Amount paid by ESW to the retailer; net of tax.

## Settlement Summary

|      Column      |   EUR   |                     Meaning                     |
| :--------------: | :-----: | :---------------------------------------------: |
|       Goods      |  14.00  |                Merchandise value                |
|     Shipping     |   5.59  |              Shopper-paid shipping              |
|        VAT       |   3.92  |          2.80 (goods) + 1.12 (delivery)         |
|       Duty       |    —    |           Not charged in this example           |
|     Other Tax    |    —    |                        —                        |
| **Total Amount** | `19.59` |            Goods + Shipping (ex VAT)            |
|   **Fee Basis**  |  23.51  |      Total basket incl. shopper-paid taxes      |
| **Retailer Fee** |   1.06  |          Contract fee on the fee basis          |
|  **Net Amount**  | `18.53` | Payout to retailer after fees (and remittances) |

{% hint style="info" icon="calculator" %}
**Total Amount (ex-VAT)** = 14.00 + 5.59 = `19.59`\
**Net Amount ≈ Total Amount - Retailer Fee** = 19.59 - 1.06 = `18.53`
{% endhint %}

{% code title="Payload" expandable="true" %}

```json
{
  "retailerCartId": "PT1250904113524817GB",
  "shopperOrderNumber": "ce8b284a-c202-4578-affe-75cacf0d0ec0",
  "checkoutTotal": {
    "retailer": { "currency": "EUR", "amount": "23.51" },
    "shopper":  { "currency": "GBP", "amount": "20.99" }
  },
  "pricingSynchronizationId": null,
  "paymentDetails": {
    "time": "2025-09-04T13:07:15.3334631Z",
    "method": "PaymentCard",
    "methodCardBrand": "Visa",
    "fraudHold": null,
    "amountPaid": "20.99",
    "isOverCounter": null,
    "ticketDetails": null
  },
  "retailerPromoCodes": [],
  "lineItems": [
    {
      "quantity": 1,
      "product": {
        "productCode": "123456789",
        "hsCode": "62114900",
        "title": "Test product",
        "description": "Test product description"
      },
      "productUnitPriceInfo": {
        "price": {
          "retailer": { "currency": "EUR", "amount": "16.80" },
          "shopper":  { "currency": "GBP", "amount": "15.00" }
        }
      },
      "discounts": [],
      "imageUrl": "https://i.pining.com/736x/ae/23/32/ae233275ce831208cc677538d95ed66c.jpg",
      "color": "Blk"
    }
  ]
}
```

{% endcode %}

<br>


# Invoicing, Tax and Duties Payment


# Fully Trade Compliant

ESW delivers an end-to-end trade-compliance layer for global trade, handling the operational and regulatory work so merchants can sell cross-border with confidence. Product data flows through compliant pricing, tax, and documentation processes so shoppers see accurate landed costs and import/export obligations are met.

### What’s Included

{% hint style="info" icon="plane-departure" %}
**Trade compliance**\
ESW will handle invoicing, tax and duties payment on your behalf.
{% endhint %}

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


# Trade Compliance Flow

Follow the six-step trade compliance flow from product normalization and pricing through customs checks, documentation, and compliant invoicing.

Trade compliance flow guides an order from cart to customs in six coordinated steps. At checkout, product data is normalized and classified <mark style="color:$warning;">(Step 1-2)</mark>, pricing logic applies rounding and models <mark style="color:purple;">(Step 3)</mark>, and duty/tax calculators return an accurate landed cost for the shopper <mark style="color:$danger;">(Step 4)</mark>. After purchase, shipping and customs steps validate trade rules and documentation <mark style="color:$success;">(Step 5)</mark>, and the system issues compliant VAT invoices, credit notes, and receipts <mark style="color:cyan;">(Step 6)</mark>.

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

{% hint style="warning" %}

### Read more

* ESW retain D\&T and pay it over to local authorities
* All sales from the retailer is B2B zero rated
* ESW settle back net of taxes and fees
  {% endhint %}


# Invoicing requirements

ESW invoice and credit note requirements by region, including EU, US, rest-of-world, and domestic VAT treatment.

{% hint style="info" icon="bell-on" %}

## ESW requires

* An **invoice** for all relevant **sales** in the settlement period, and
* A **credit note** for all **returns** processed in that period.
  {% endhint %}

## <i class="fa-circle-euro">:circle-euro:</i> Intra-EU

* **One invoice/credit note per EU country.**
* Must be **addressed to ESW** and **quote the applicable ESW VAT number** for that country.
* **VAT treatment:** Invoices are **Zero-rated** for VAT purposes (B2B transaction).

## <i class="fa-circle-dollar">:circle-dollar:</i> United States (US)

* **One invoice/credit note** for US sales.
* Must be **addressed to ESW’s US entity (EUSA)**.
* **VAT/Sales Tax:** **Zero-rated for VAT purposes**. **No Sales Tax** applies to the sale to EUSA; EUSA will provide relevant **reseller exemption certificates** to the retailer.

## <i class="fa-globe">:globe:</i> Rest of World (ROW)

* Invoices/credit notes issued for **all non-EU countries** can be **grouped on a single document**.
* Must be **addressed to ESW** and **quote ESW’s Irish VAT number**.
* **VAT treatment:** Invoices/Credit Notes for all non-EU countries are **Zero-rated**.

## <i class="fa-house-user">:house-user:</i> Domestic (Retailer’s Home Country)

* For **domestic sales**, charge **VAT at the applicable local rate** on invoices/credit notes, as these constitute domestic sales.

## Sample Documentation

{% columns %}
{% column %}
{% file src="/files/vK3oS9DIJRUSDcW5bhX0" %}
{% endcolumn %}

{% column %}
{% file src="/files/irFaZ8MJ2RsmiQuNYA7H" %}
{% endcolumn %}
{% endcolumns %}


# Payment Terms

How ESW settlement payments work, including payout cadence, net settlement components, and how duties, taxes, sales, and returns are treated.

{% stepper %}
{% step %}

## Frequency

ESW makes **one net payment** on your preferred cadence — **weekly, fortnightly, or monthly**.

{% hint style="info" %}
With ESW, you get the entire payment for each settlement period upfront—no thresholds, no cash held back, just reliable cash flow.
{% endhint %}
{% endstep %}

{% step %}

## Basis

Using your **settlement report**, ESW pays the **net value** of:

* **Merchandise**
* **Consumer-paid shipping**
* **Returns**
* **Appeasements**
* **Checkout fee**
* **Shipping fee**

### Read more

* **Duties & taxes:** Collected from the consumer by ESW and remitted to the relevant local tax authority.
* **Sales basis:** All sales values are calculated on **shipped items**.
* **Returns basis:** All returns values reflect items **accepted at the returns centre**.

> Dependent on Jurisdicton and local tax rules.
> {% endstep %}
> {% endstepper %}


# EU Customs Duty Exemption

How the EU’s 1 July 2026 duty changes affect low-value imports and your ESW pricing.

The European Union will remove the customs duty exemption threshold for low value imports effective <mark style="color:$danger;">1st July 2026</mark>. From this date, all goods imported into the EU will be subject to customs duty, including shipments that were previously exempt due to their value. This change applies to all imports into the European Union across all member states.

This change impacts how customs duties are calculated and applied for EU-bound orders processed through ESW.

### What does this mean

#### Low value orders

Orders below the previous exemption threshold will now incur customs duty. A fixed duty will be applied per item within the order, with items defined by their HS code classification.

#### Higher value orders

Orders above the previous exemption threshold will continue to follow the existing customs duty model, where duties are calculated as a percentage based on HS code. There is no change to this approach.

{% tabs %}
{% tab title="Example" %}
A retailer ships a parcel containing:

* 1 linen shirt
* 2 cashmere shirts
  {% endtab %}
  {% endtabs %}

Although all items are included in one parcel, the linen and cashmere shirts are classified differently for customs purposes. The shipment would therefore attract two separate `€3` charges (`€6` total).

Where multiple units share the same customs code, only one `€3` charge would apply, provided the total shipment value remains within the `€150` threshold.

### What action do I need to take

If you use ESW’s [Pricing Advisor](/pricing-advisor-api) tool, you can review and confirm whether to apply the updated customs duty configuration within [ESW Checkout](/checkout-api). ESW has completed analysis and provided recommended updates within the tool.

If you use Price Book values, you should review and incorporate the updated customs duty structure into your shopper pricing where applicable. ESW has provided recommended duty adjustments to support this update.

{% hint style="info" icon="coins" %}
**Note**: As it is a customs duty, it is reported as Duty.
{% endhint %}

{% tabs %}
{% tab title="Suppoort" %}
If you have any questions or require further guidance, please contact your Client Success Manager.
{% endtab %}
{% endtabs %}


# FAQs and Customization

Find answers to common questions about ESW’s merchant-of-record model, reporting, settlement options, and key operational definitions.

<details>

<summary>What are the advantages of using a MOR provider?</summary>

The main advantages of using a merchant of record provider are full compliance with global tax laws, reduced legal and financial liability, simplified Global expansion, stremlined payment operations and faster time to market.

</details>

<details>

<summary>What additional services do ESW offer?</summary>

ESW has a full product offering which supports our retailers globally with customized solutions and additional product offerings. Please contact a member of our sales team or [**finance\_onboarding@esw.com**](mailto:finance_onboarding@esw.com) to find out more.

</details>

<details>

<summary>Is there flexibility around ESW'S offerings?</summary>

ESW offers flexible payment terms, settlement periods and full support of your expansion.

</details>

<details>

<summary>Who is responsible for tax compliance — the retailer or the MOR?</summary>

**ESW, as MOR, is responsible for all tax compliance**, removing this burden from your team.

</details>

<details>

<summary>Can we get a breakdown of taxes collected from end customers?</summary>

Yes. Your **settlement report** shows a breakdown of all taxes collected from end customers that **ESW retains to remit to local authorities**.

</details>

<details>

<summary>Can I use ESW to sell both digital and physical products?</summary>

Yes. **ESW supports both digital and physical sales** through the platform.

</details>

<details>

<summary>How do chargebacks work with a MoR?</summary>

**ESW deals with all PSPs** and assumes the **risk related to chargebacks** as the MOR.

</details>

<details>

<summary>Will ESW support our audit process?</summary>

Yes. **ESW will support with any reports requested by statutory auditors.**

</details>

<details>

<summary>How frequently will we get paid?</summary>

**Customisable cadence** — ESW offers **weekly, fortnightly, or monthly** settlement.

</details>

<details>

<summary>Will our order reference or SKU code appear on the file?</summary>

Yes. ESW shows an **internal ESW order reference** and the **brand’s order reference**. Reporting can be provided at **SKU, package, or order level**.

</details>

<details>

<summary>Is there additional reporting available?</summary>

Yes. **Self-service reporting** is available via ESW’s **BI tool** for additional insights.

</details>

<details>

<summary>Is ESW a scalable solution?</summary>

Yes. **ESW’s shared-revenue model** aligns incentives with your **growth and cross-border expansion**.

</details>

<details>

<summary>Who will assist with any queries?</summary>

You will be **allocated a dedicated finance contact** who manages settlement and any related queries.

</details>

<details>

<summary>Who is my onboarding contact?</summary>

For onboarding, contact the **Onboarding email address** or your **Solution Engineer** assigned by ESW.

</details>

## Definitions

<details>

<summary>What is MOR?</summary>

A merchant of record is a legal entity responsible for selling goods or services to an end customer. They handle all payments and take on the associated liabilities.

</details>

<details>

<summary>Who acts as MOR</summary>

esw acts as MOR

</details>

<details>

<summary>What is EOR?</summary>

Exporter of record is an authorised person or entity that takes responsibility for the export of goods form a country, putting their name on the shipping documentation as the exporter in the country that the goods are dispatched from.

</details>

<details>

<summary>Who acts as EOR?</summary>

The retailer acts as EOR with ESW managing this on your behalf.

</details>

<details>

<summary>What is IOR?</summary>

Importer of record is the party who is responsible for ensuring that imported goods comply with all customs and legal requirements of the country of import.

</details>

<details>

<summary>Who acts as IOR?</summary>

The shopper acts as IOR in order to take advantage of deminimus thresholds.

</details>

<details>

<summary>What is SFTP?</summary>

SFTP stands for Secure File Transfer Protocol (or SSH File Transfer Protocol). It is a network protocol used to securely transfer files between two systems over an encrypted connection.

</details>

<details>

<summary>What is ASN?</summary>

Advanced Shipping Notice is an electronic notification a supplier sends to a buyer to inform them that an order has shipped.

</details>

<details>

<summary>What is SKU?</summary>

SKU stands for stock Keeping Unit. It is a unique identifier that businesses use to track products in inventory, warehouses and sales systems.

</details>

<details>

<summary>What is CSP?</summary>

CSP is ESW''s in house customer service portal.

</details>


# Best Practices

This section describes the best practices and ESW recommendations that you can follow to ensure the smooth flow of data between your servers and ESW servers.

### Transport security

* Expose your receiving endpoint over HTTPS.
* Use a valid, publicly trusted certificate.
* Ensure your server presents the full certificate chain.

{% hint style="info" %}
ESW verifies SSL certificates when delivering payloads.
{% endhint %}

### Delivery semantics (distributed systems reality)

* Expect retries on network or endpoint failures.
* Do not assume strict ordering of events.
* Expect duplicate deliveries in some failure modes.
* Make your handlers **idempotent**.
* Treat each delivery as independent and safe to process more than once.

{% hint style="warning" %}
ESW uses a queuing model and delivers events on a best-effort basis. Ordering is not guaranteed.
{% endhint %}

### Support and troubleshooting

When you contact ESW about delivery or integration issues, include:

* Your environment (Sandbox or Production).
* Your endpoint URL and the approximate time window.
* The HTTP status codes you returned.
* The response body you returned (if any).
* Any request identifiers or correlation IDs (if provided).

### Rate limiting and traffic spikes

Rate limits can turn a short spike into a long replay backlog. Plan for bursts.

* Align provider-level throttles with your expected peak traffic.
* Avoid blanket throttles that convert bursts into sustained failures (for example `429` / `5xx`).
* Ensure your endpoint can absorb replay traffic after an outage.
* Use internal buffering (queue/worker pattern) so you can accept deliveries quickly.

<details>

<summary>Example failure loop (what to avoid)</summary>

You launch a new product. Traffic spikes. Your provider starts throttling requests.

ESW continues generating events. Deliveries fail (`429`/`5xx`). ESW queues and retries later.

Retries add more traffic. Throttling continues. The queue grows for hours.

</details>


# APIs

Best practices for endpoints ESW calls: authenticate requests, return correct status codes, handle retries and bursts, and acknowledge quickly.

These guidelines apply to any endpoint ESW calls (APIs, callbacks, and webhooks).

### Verify requests are from ESW

* Use a secret (token) to authenticate incoming requests.
* Validate the token before doing any heavy work.
* Store the secret securely and rotate it when needed.

### Return the right HTTP status codes

Status codes drive retry behavior. Keep them accurate.

* Return `2xx` only when you accept the request for processing.
* Return `4xx` for client-side issues (bad payloads, failed auth).
* Return `5xx` only for transient server failures you want retried.
* If you return `429`, ESW will back off and retry later.

{% hint style="warning" %}
Do not include personally identifiable information (PII) in error responses.
{% endhint %}

### Plan for retries, bursts, and duplicate deliveries

* Expect retries, out-of-order delivery, and occasional duplicates.
* Make handlers **idempotent** and safe to run more than once.
* Size for bursts, not averages.

As a rough sizing example, `50k/hour` is \~`14 requests/second` on average.

Real traffic is spiky. Your actual load depends on how many event types you subscribe to.

For more detail on retries and spikes, follow the guidance in [Best Practices](/getting-started/get-started-with-esw/best-practices).

### Acknowledge quickly and validate early

* Always send a response to acknowledge receipt.
* Do lightweight validation up front, then process asynchronously if needed.
* Fail fast when you know you cannot process the request.


# Webhooks

Best practices for ESW webhooks: HTTPS and domain requirements, validate event type/version, respond within 3 seconds, and design for async delivery.

Use these guidelines when you subscribe to ESW webhooks and implement the receiving endpoint.

### Endpoint requirements

* Subscriptions must point to an **HTTPS** endpoint. ESW rejects non-HTTPS endpoints.
* Webhook endpoints must be in the **same domain** as the origin checkout domain, or one of your registered domains.
* Keep SSL certificates valid and maintained. ESW will not deliver to endpoints with SSL issues (mismatch, untrusted cert, etc.).

### Event types and versions

* ESW supports multiple event types. Each event type can include multiple actions.
* Over time, ESW may add new event types, add actions to existing event types, or release new versions.
* Always check the **event type** and **event version** before processing.
* Use the `Esw-Event-Type` request header to identify the received event and route it correctly.
* Expect test events. Handle them safely.

### Acknowledge quickly

ESW expects a response within **3 seconds** of delivering the payload.

If your service takes longer, the connection is terminated and the payload is re-queued.

* Do lightweight validation first.
* Offload heavy work to a background job/queue.

### Delivery model and retention

Webhooks are delivered asynchronously. Delays can occur within the SLA, or longer in rare cases.

Do not use webhooks as a real-time event-sourcing mechanism.

ESW queues undelivered events. By default, queued events are stored for **24 hours**. After that, events are dropped.

{% hint style="info" %}
Design for retries, occasional duplicates, and out-of-order delivery. Keep handlers idempotent.
{% endhint %}


# FAQs

Some frequently asked questions.

<details>

<summary>What is GoCasual?</summary>

GoCasual is ESW’s test tenant. Use it to test before your production tenant is ready.

</details>

<details>

<summary>When do GoCasual credentials expire, and how do I renew them?</summary>

GoCasual credentials expire annually.

To request new credentials, submit a request on the ESW integration form: <https://www.eshopworld.com/integration/>

</details>

<details>

<summary>Can I store the ESW Checkout redirect URL and reuse it if the shopper returns?</summary>

Do not store and reuse the redirect URL.

Create a new Checkout session when the cart changes. Each PreOrder request represents a snapshot of the cart at that time. If the cart changes, a previously generated redirect URL may not show the latest items.

</details>

<details>

<summary>How do you handle “orphan orders” when shoppers restart checkout?</summary>

Each time a shopper starts checkout, ESW creates a **PreOrder**.

A PreOrder becomes an **Order** only after payment succeeds. Unpaid PreOrders do not convert into Orders.

</details>

<details>

<summary>If there is a shipping discount, will there be a promo/voucher code in the request?</summary>

The promo/voucher field is optional.

Send a promo/voucher code only when the shopper enters one. Whether it displays at Checkout depends on your Checkout display configuration.

</details>

<details>

<summary>Can I use <code>customerID</code> as <code>registeredProfileID</code>?</summary>

Yes. If you do not have a separate registered profile identifier, you can reuse `customerID`.

</details>

<details>

<summary>Why do I receive “Unauthorized token for tenant code”?</summary>

This error often returns `403 Forbidden` or `401 Unauthorized`. It has two primary causes:

* **Missing claim:** The access token does not contain the `TenantCode` claim.
* **Mismatched claim:** The token’s `TenantCode` does not match the tenant code in the request path. For `/ACP/GOCAS/orders`, use `TenantCode: GOCAS`.

Set [`client_id`](/getting-started/get-started-with-esw/readme/publish-your-docs#scopes) to `{TENANT_CODE}.client`. Explicitly assign the `TenantCode` claim to the client in the STS configuration.

</details>


# Glossary

Definitions of key ESW terms across checkout, payments, logistics, and reporting.

## A - I <a href="#a-i" id="a-i"></a>

| Term                                      | Description                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Access Tokens                             | The identifiers used for authenticating the users and enabling them to access the API and perform a pre-dertermined set of actions.                                                                                                                                                                                                                                                                       |
| Acquirer                                  | The financial institute that processes the credit / debit card payments, on behalf of ESW.                                                                                                                                                                                                                                                                                                                |
| Additional Payments Methods (APM)         | The payment methods offered to the shoppers apart from the conventional payment methods. For example, PayPal, Google Pay, Apple Pay, etc.                                                                                                                                                                                                                                                                 |
| Admin Charge                              | The fee charged to administer the payment process.                                                                                                                                                                                                                                                                                                                                                        |
| Advance Return Notification (ARN)         | The document that provides detailed information about a pending return.                                                                                                                                                                                                                                                                                                                                   |
| Advanced Shipping Notice (ASN)            | The file that is provided by the retailer to ESW describing contents of the package they are sending to ESW. Without a valid ASN, a package cannot be scanned at the ESW hub.                                                                                                                                                                                                                             |
| API Request                               | An API request is a request that allows you to retrieve data from a data source, or to send data.                                                                                                                                                                                                                                                                                                         |
| API Response                              | An API response is a message that is sent as a response you with data retrived from a data source.                                                                                                                                                                                                                                                                                                        |
| Application Program Interface (API)       | An API is a set of programming code that enables data transmission between one software product and another. It also contains the terms of this data exchange.                                                                                                                                                                                                                                            |
| Auth Code                                 | The authorisation code for the attempted payment.                                                                                                                                                                                                                                                                                                                                                         |
| Average Order Value (AOV)                 | The measure of the average value of all checkout & offline orders placed over the selected period of time. This measure includes subsequently cancelled orders.                                                                                                                                                                                                                                           |
| Base Currency                             | The retailer’s currency, main the one in which the retailers receive their settlements.                                                                                                                                                                                                                                                                                                                   |
| Base Rate                                 | The value in which the shipping rates are displayed to the shoppers at the checkout.                                                                                                                                                                                                                                                                                                                      |
| Billing Currency                          | Billing Currency is the Shopper’s Currency.                                                                                                                                                                                                                                                                                                                                                               |
| Black Friday                              | The Friday following the Thanksgiving day every year.                                                                                                                                                                                                                                                                                                                                                     |
| Brand Code                                | The code associated with the brand of a given retailer.                                                                                                                                                                                                                                                                                                                                                   |
| Brand Order Reference                     | Retailer's unique reference number for the order.                                                                                                                                                                                                                                                                                                                                                         |
| BrandName                                 | Name of the retailer's brand.                                                                                                                                                                                                                                                                                                                                                                             |
| Broker Manifest In (BMI)                  | The file that is received ESW from the broker with the updated information about the packages created within the ESW platform.                                                                                                                                                                                                                                                                            |
| Broker Manifest Out (BMO)                 | The file that is sent to the retailers with information about the packages created within the ESW platform.                                                                                                                                                                                                                                                                                               |
| Bulk Packages                             | The physical packages sent to the shopper in bulk. A package might contain one or more order items. A collection of multiple packages are bulk packages.                                                                                                                                                                                                                                                  |
| Business Requirement Document (BRD)       | The document that highlights the business need of the customers and the business owners. BRD majorly indicates the project deliverables and the requirements and outcomes associated with each process function within the business.                                                                                                                                                                      |
| Carrier                                   | A vendor that ESW does direct business with in the movement of packages.                                                                                                                                                                                                                                                                                                                                  |
| Cart                                      | The set of items that the shopper has selected before proceeding to checkout.                                                                                                                                                                                                                                                                                                                             |
| Change Request/Scope Change Request       | The communication to request an addition or subtraction to the scope of work that has been previously agreed upon for a given project.                                                                                                                                                                                                                                                                    |
| Chargeback (CB)                           | The process of reversal/return of the money transfer back to the payer, in a given transaction.                                                                                                                                                                                                                                                                                                           |
| Checkout                                  | The process in which the shopper enters their delivery address and proceeds to payment.                                                                                                                                                                                                                                                                                                                   |
| Checkout API                              | The Checkout API, also known as the Preorder API, sends the cart information as well as the shopper and retailer configuration details to the ESW Checkout system.                                                                                                                                                                                                                                        |
| Checkout API                              | The Checkout API, also known as the Preorder API, sends the cart information as well as the shopper and retailer configuration details to the ESW Checkout system.                                                                                                                                                                                                                                        |
| Checkout URL                              | Allows users to easily clone the source for the repository at the top of the page for a Fisheye repository (Ex: for an SVN repository, a user can click Checkout and copy the URL).                                                                                                                                                                                                                       |
| Content Delivery Cloud/Network (CDN)      | The geographically distributed group of servers that work together to provide fast delivery of content on the internet. CDN enables the quick transfer of assets needed for loading web content including HTML pages, javascript files, stylesheets, images, and videos.                                                                                                                                  |
| Currency                                  | The currency in which the shipping rates are displayed to the shoppers at the checkout.                                                                                                                                                                                                                                                                                                                   |
| Currency Exchange Rate                    | The currency Exchange rate could be defined as the rate at which one currency will be exchanged for another currency. It could also be defined as the value of a country’s currency in relation to any other currency.                                                                                                                                                                                    |
| Customer Service Portal (CSP)             | The portal for both the customer service team and the retailer to look up orders, customer information, carrier tracking information, refunds, returns, and order details.                                                                                                                                                                                                                                |
| Customs Catalog API                       | The Customs Catalog API allows retailers to share their product catalog with ESW.                                                                                                                                                                                                                                                                                                                         |
| CVV                                       | The 'Card Verification Value' (CVV) number on your credit card or debit card is a 3 digit number required to verify your card while processing a payment.                                                                                                                                                                                                                                                 |
| Dangerous Goods (DG)                      | The articles or substances that pose a risk to people, property or the environment, due to their chemical or physical properties. These products are classified as dangerous goods and are prohibited from being stored on the airplane.                                                                                                                                                                  |
| Delivery Duty Paid (DDP)                  | The flag to identify if the delivery duty has been paid.                                                                                                                                                                                                                                                                                                                                                  |
| Delivery Duty Unpaid (DDU)                | The flag to identify if the delivery duty has not been paid.                                                                                                                                                                                                                                                                                                                                              |
| Dimensions (DIM)                          | The measure of the length, breadth, and the height of the package being shipped.                                                                                                                                                                                                                                                                                                                          |
| Distribution Center (DC)                  | The specialised ESW hub that manages the storage and shipping of the goods for a retailer. Retailers can send the packages to these centres from where these packages are further sent to the shoppers by ESW.                                                                                                                                                                                            |
| Domain Masking                            | The method of hiding the actual domain name of a website from the URL field of a web browser, and overlaying that name with another desired name.                                                                                                                                                                                                                                                         |
| Duty Drawback                             | The refund of excise or import duty paid on goods that are exported. This refund can be in part or the full amount paid by the trader against the import duty. This includes customs duty, sales tax, and any other refundable fee levied. In countries where it is applicable, ESW reclaims the taxes from the relevant customs authorities.                                                             |
| Electronice Wallet (eWallet)              | The software tools that enable the users to store their payment information like credit card details and bank account details. The users can then use this information to make a payment for their online orders.                                                                                                                                                                                         |
| Eshop Order Reference                     | ESW's unique reference number for the order.                                                                                                                                                                                                                                                                                                                                                              |
| Eshop Package Reference                   | ESW's unique reference number for the package.                                                                                                                                                                                                                                                                                                                                                            |
| Estimated Delivery Date (EDD)             | The date when the shopper can expect the order to arrive. However, this date is not a guranteed date and just an estimate.                                                                                                                                                                                                                                                                                |
| Exporter of Record (EOR)                  | The legal exporting body for goods that are exiting a country. EOR is usually the owner or seller of merchandise that is being exported from a given country to a destination country.                                                                                                                                                                                                                    |
| Express Payment Methods (EPM)             | The payment method where the shoppers can use the pre-existing information with a payment service provider to facilitate a faster payment. For example, shoppers can pay through PayPal Express, where the information like billing address and other details are pre-filled and the users do not need to manually re-enter the details to successfully place an order.                                   |
| File Transfer Protocol (FTP)              | The standard communication protocol used for the transfer of computer files from a server to a client over a computer network. ESW shares all the files with retailers via SFTP.                                                                                                                                                                                                                          |
| Fraud Decision                            | The final decision on the payment by Fraud after a challenge response is received from fraud screening.                                                                                                                                                                                                                                                                                                   |
| Functional Requirement Document (FRD)     | The formal statement of an application’s functional requirements. FRD also serves the same purpose as a contract. Under this document, the developers agree to provide the capabilities specified and the client agrees to find the product satisfactory if it provides the capabilities specified in the FRD.                                                                                            |
| FX Rate                                   | The comparison and statement of one currency with another to show their relative values. ESW processes FX rates (foreign exchange rates) via Pricing Advisor API.                                                                                                                                                                                                                                         |
| General Data Protection Regulation (GDPR) | The regulation in EU law on data protection and privacy for all residents, citizens, and individuals of the European Union (EU) and the European Economic Area (EEA).                                                                                                                                                                                                                                     |
| GoCasual (GOCAS)                          | 'GOCAS' is used as a value for the 'identifier' parameter in the request. GoCasual is ESW’s internal testing tenant.                                                                                                                                                                                                                                                                                      |
| Goods Service Tax (GST)                   | The value-added tax levied on most goods and services sold for domestic consumption. The business adds the GST to the price of the product, and a shopper who buys the product pays the sales price plus GST. However, it is remitted to the government by the businesses selling the goods and services.                                                                                                 |
| Google Tag Manager (GTM)                  | The tool that enables you you to manage and deploy marketing tags on your website or mobile app. This allows you to have a good control over your analytics and measurement tag configurations from a web-based user interface.                                                                                                                                                                           |
| Harmonized System Code (HS Code)          | The standardized international system to classify globally traded products. The harmonized system code (HS Code) categorizes about 5,000 commodity groups in simple six-digit codes, broken down into 21 Harmonized System sections, 96 Harmonized System chapters, and thousands of headings. This classification highlights whether an item sold internationally is apparel, fragrance, cosmetics, etc. |
| Hub                                       | The specialised ESW centre that manages the storage and shipping of the goods for a retailer. Retailers can send the packages to these centres from where these packages are further sent to the shoppers by ESW.                                                                                                                                                                                         |
| Item Sub Total                            | The total payable amount before the absolute total for an item in an order. This total does not include the duties, taxes, discounts, and other such payable entities.                                                                                                                                                                                                                                    |

## J - R <a href="#j-r" id="j-r"></a>

| Term                            | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Local Acquirer                  | The local acquirer is a financial institution that locally processes a payment. For example, AstroPay in Chile and Mexico, and Iyzico in Turkey.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Magento App                     | The Magento App extension integration allows retailers to get access to a network of 25+ global carriers, 40+ global hubs, multiple PSPs and acquirers, 40+ payment methods, 100+ currencies, multilingual checkout, and much more.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Master Airway Bill (MAWB)       | MAWB is issued by main carrier of goods on receipt of goods from a freight forwarder to deliver at destination as per agreed terms.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Max Order Value Limit           | The maximum limit of the order value for which a different shipping rate can be set per checkout total.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Merchant ID (MID)               | The ID associated with the merchant.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Multichannel                    | The marketing approach with the goal of maximizing opportunities to interact with prospective customers using various channels. These channels can be email, print advertisement, retail location, website, promotional event, mobile app, SMS messaging, product’s package, or word-of-mouth.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Omnichannel                     | The method in which a business offers different modes of shopping to the shoppers. The different modes can be: online, physical shop, phone, etc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Order                           | The order placed by a shopper on the ESW checkout page. An order is considered to be complete only when the payment for the order is confirmed and the order confirmation page is displayed.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Order API                       | The Order API contains the POST, GET, and PUT methods that allow you to perform a variety of tasks, such as canceling full order, canceling a line item within the order, issuing replacements (full or partial), issuing order appeasements (full or partial), issue line item appeasements (full or partial), get a specific transaction for an order, update contact details on the order.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Order Management System (OMS)   | The tool that tracks orders, sales, inventory, and fulfillment as well as allows the stakeholders to manage the orders from the shoppers.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Order Reference                 | The reference number associated with an order.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Order Value                     | The total value of the order, including the shipping cost and duty and taxes.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Orders                          | The order placed by a shopper on the ESW checkout page. An order is considered to be complete only when the payment for the order is confirmed and the order confirmation page is displayed.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Package                         | The physical package sent to the shopper. A package might contain one or more order items.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Package API                     | The Package API is a web API that allows you to inject package data into the ESW system and enter all details needed for the shipment and delivery of these packages, for example, package dimensions, weight information, consignee details, item details, and so on.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Package Dimension Source        | The source from where the package dimensions like length, width, and height are determined.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Package Dimensional Weight      | The measure of package dimensional weight.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Package Dimensional Weight Unit | The unit in which the package dimensional weight is measured.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Package Dimensions Unit         | The unit in which the package dimensions are measured.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Payment Amount                  | The amount paid that is the price of product, delivery cost, uplift, duty, and taxes.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Payment Currency                | Currency in which the payment is made.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Payment Details                 | The payment details on the package, for example, name, phone number, email address.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Payment Gateway                 | The payment gateway used for making a payment.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Payment Method                  | The method used by the shopper to make a payment, for example, credit or debit card.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Payment Service Provider        | The vendors that process the shopper’s online payment via different avenues like debit cards, credit cards, bank transfers, etc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Pending Payments                | The payments that are yet to be completed and not deemed as 'Successful'.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Pre-Order                       | The point where the shopper clicks on "Checkout" button on retailer site, that is when the PreOrder payload is built and sent to ESW. This payload includes cart information as well as the shopper and retailer configuration details.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Pricing Advisor API             | ESW’s Pricing Advisor API v3.0 allows you to retrieve pricing data for countries where you want to sell your products.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Product Code                    | The code number associated with the product (also known as SKU number).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Product Detail Page (PDP)       | The website page that has details about a given product.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Product ID                      | The ID reference associated with the product in the catalog. This is essentially same as Product Code and SKU number.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Purchase Order (PO)             | The document generated by the buyer that authorizes a purchase transaction. When a seller accepts this document, it becomes a contract binding on both parties. This document identifies a specific seller and provides the descriptions, quantities, prices, discounts, payment terms, date of performance or shipment, and other associated terms and conditions.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Refunded Amount                 | The amount that has been refunded to the shopper.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Rest of the world (ROW)         | <p>The countries that are not ‘Spotlight Countries’ can be grouped together under the Rest of World (ROW) category.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>There are no differences in the way how country management works in either Spotlight or Rest Of the World (ROW) countries. The only difference is the way in which the countries are grouped for display and accessibility.</p></div>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Retailer Currency               | The base currency of the retailer.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| RetailerCartId                  | The unique order number or unique cart identifier for the retailer.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Return Item                     | This refers to an individual item, purchased as part of an order, that is being returned. This is generally what the retailers will want visibility on.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Return label                    | It is a label attached to the package being returned by the shopper in order to facilitate the reverse logistic (from shopper to retailer).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Returned Order (RO)             | The process where a shopper returns an order to the retailer and in turn receives a refund in the original form of payment, exchange for another item, or a store credit.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Returns API                     | ESW’s Returns API v2.0 allows retailers to retrieve an order from the database and check whether it is eligible for a return, create a return order and optionally, request a return label, update an existing return order, retrieve return information, and create returns for orders/packages that could not be delivered to the shopper.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Returns Report                  | The report that enlists the details of the returned sales. This report helps in understanding why clients are unhappy with their purchases by analysing the reasons for their returns.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| RFM Analysis                    | <p>RFM analysis allows you to segment customers by the frequency and value of purchases and identify those customers who spend the most money.</p><ul><li><strong>Recency</strong>: how long it’s been since a customer bought something from you</li><li><strong>Frequency</strong>: how often a customer buys from you</li><li><strong>Monetary value</strong>: the total value of purchases a customer has made</li></ul><p>According to these metrics, it is possible to divide your customers into groups to understand which customers buy lots of things frequently, who buys few things but frequently, and who haven’t bought anything for a long time.</p><p>As a rule, only a small percentage of customers respond to general promotional offers. RFM is an excellent segmentation method for predicting customer responses, improving interactions, and increasing profits. RFM uses customer behavior data to determine how to work with each customer group.</p> |

## S - Z <a href="#s-z" id="s-z"></a>

| Term                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Salesforce Commerce Cloud (SFCC)     | <p>The highly scalable, cloud-based software-as-a-service (SaaS) ecommerce solution that offers the features and functionality to provide a highly optimised ecommerce experience.</p><p>SFCC provides a rich set of capabilities, including marketing, merchandising, content, promotions, customer service, fulfillment, and artificial intelligence, for supplementing the shopping experiences.</p>                                                                                                                                                                         |
| Salesforce Commerce Cloud (SFCC) App | The Salesforce Commerce Cloud (SFCC) - ESW cartridge allows you to integrate with the ESW services, such as hosted checkout, local payment methods, and international logistics network.                                                                                                                                                                                                                                                                                                                                                                                        |
| Scope of Work (SOW)                  | The document that provides information on the technical and service deliverables that are to be provided by ESW to the retailer in order to provide a localized shopping experience to retailer’s international shoppers. Once approved by the retailer, this document is used by ESW to configure the platform and implement the agreed functionalities.                                                                                                                                                                                                                       |
| Service Level Agreement (SLA)        | The initial service level agreed by the retailer to ship the package once the order is placed. This usually falls into either a standard or express category.                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Service Type                         | Postal service.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Service-level Agreement (SLA)        | The initial service level agreed by the retailer to ship the package once the order is placed. This usually falls into either a standard or express category.                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Shipping Methods                     | Various methods using which a package is shipped to the shoppers. For example, by post, express, standard, etc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Shopify App                          | The ESW-Shopify app is an app developed by ESW for retailers using Shopify as their eCommerce platform. The app extends a retailer’s current market reach by allowing them to integrate with ESW's optimized services, such as FX rates, hosted checkout with local payment options, and international logistics network. The ESW-Shopify app supports all versions of Shopify - Basic, Standard, Advanced, and Plus.                                                                                                                                                           |
| Shopper                              | The individual who makes a purchase via a retailer’s website and makes a payment for the purchase to receive the order.                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Shopper Service Level 1              | The level 1 Shopper Service entails ESW Shopper Service team responding directly to “post checkout” shopper queries. These typically relate to Tracking queries and Return/refund query.                                                                                                                                                                                                                                                                                                                                                                                        |
| Shopper Service Level 2              | The level 2 Shopper Service entails ESW Shopper Service team responding directly to “post checkout” retailer queries. The retailer CS team interact directly with the shopper, and escalate queries when required, to the ESW team. Responses from ESW CS team will respond directly to the retailer CS team. These typically relate to Tracking queries and Return/refund query.                                                                                                                                                                                               |
| Spotlight countries                  | <p>Spotlight countries are your top countries that are displayed on the ESW Service Portal’s country management screen for quick access. You can spotlight a country that you are looking to grow into for quicker access to its configurations.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>There are no differences in the way how country management works in either Spotlight or Rest Of the World (ROW) countries. The only difference is the way in which the countries are grouped for display and accessibility.</p></div> |
| Standard Operating Procedure (SOP)   | The written, step-by-step instructions that describe how to perform a routine activity; in this case engaging with ESW. Standard operating procedures help in maintaining safety and efficiency for the individual departments that come together to form an organization.                                                                                                                                                                                                                                                                                                      |
| Stock-Keeping Unit (SKU)             | The stock keeping unit is a unique product in a retailer’s catalog.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Sub Total                            | The total payable amount before the absolute total for the order. This total does not include the duties, taxes, discounts, and other such payable entities.                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Tenant Code                          | The six-digit code associated with the tenant.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Total Orphan Payments                | The payments which have been successfully completed but do not have an order linked to them.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Tracking information                 | <p>The information that consists of the details around the events occurring during the transit and receipt of the return package from the shopper to you.</p><p>The tracking info you see on ESW Service Portal will mainly consist of the following details:</p><ul><li>Order Number</li><li>Last Location</li><li>Last Updated</li><li>The time when a particular event occurred.</li><li>Description of the event.</li><li>The location where the event occurred.</li></ul>                                                                                                  |
| Undeliverable                        | The package that a carrier has attempted last mile delivery but was unsuccessful for whatever reason.                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Unsettled Amount                     | The total amount that has not been claimed by the retailer and is no more on hold.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Value Added Tax (VAT)                | The tax placed on a product whenever value is added at each stage of the supply chain, from production to the point of sale. This tax is based around taxpayer's consumption of the goods.                                                                                                                                                                                                                                                                                                                                                                                      |
| Weight                               | Total weight of the order package.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Weight Unit                          | The unit in which the weight of the package is measured.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Zone                                 | The dedicated set of regions from where orders are placed and that is reported to the retailers by ESW.                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |


# Copy of Overview

Start here to explore ESW APIs and jump to the main service areas, including customs, pricing, checkout, orders, returns, callbacks, and fulfillment.

{% hint style="info" icon="file-brackets-curly" %}

#### ESW services are delivered and managed via REST APIs.

Expect resource-oriented URLs and JSON payloads.
{% endhint %}

<table data-header-hidden data-full-width="false"><thead><tr><th align="center"></th><th align="center"></th><th align="center"></th><th align="center"></th></tr></thead><tbody><tr><td align="center"><p><a href="/spaces/JWssSKqn34oo0GTi1dVW/pages/0ljInR3wX9yfMZEvlhBK"><img src="/files/cSyfJRhmzUSw1t2Dd9Qq" alt="Customs Catalog API"></a><br></p><p><a href="/spaces/JWssSKqn34oo0GTi1dVW/pages/0ljInR3wX9yfMZEvlhBK"><strong>Customs Catalog API</strong></a></p></td><td align="center"><p><a href="/spaces/nTL8tl9tUOtaGkSQHGiK/pages/EIGFjqZfvd6s3Op32yBs"><img src="/files/uSV5itefrl9LkfUilpAW" alt="Pricing Advisor API"></a><br></p><p><a href="/spaces/nTL8tl9tUOtaGkSQHGiK/pages/EIGFjqZfvd6s3Op32yBs"><strong>Pricing Advisor API</strong></a></p></td><td align="center"><p><a href="/spaces/chjZv79baUiFWxjmZavx/pages/sB155FV2pgYHdCAgTy5O"><img src="/files/ElMAw78nm7WVZZ83WmWf" alt="Checkout API"></a><br></p><p><a href="/spaces/chjZv79baUiFWxjmZavx/pages/sB155FV2pgYHdCAgTy5O"><strong>Checkout API</strong></a></p></td><td align="center"><p><a href="/spaces/ZhcwGHfYyTPT5VkoQl32/pages/66UkEjgBkmrmojeKVv7P"><img src="/files/1U3x92CAiTZMXCQwTACT" alt="Package API"></a><br></p><p><a href="/spaces/ZhcwGHfYyTPT5VkoQl32/pages/66UkEjgBkmrmojeKVv7P"><strong>Package API</strong></a></p></td></tr><tr><td align="center"><p><a href="/spaces/9sJh9mebwGhWfzKvcTnt/pages/202esirNcOhTsSfTGXEV"><img src="/files/LN46YMUMfWloOXAU7Csw" alt="Order API"></a><br></p><p><a href="/spaces/9sJh9mebwGhWfzKvcTnt/pages/202esirNcOhTsSfTGXEV"><strong>Order API</strong></a></p></td><td align="center"><p><a href="/spaces/a921jcoPME0jDOOuVtoT/pages/G2GxBBnsFApQzL2IXCko"><img src="/files/tSdgz2LEkQyWGxKJIs5s" alt="Returns API"></a><br></p><p><a href="/spaces/a921jcoPME0jDOOuVtoT/pages/G2GxBBnsFApQzL2IXCko"><strong>Returns API</strong></a></p></td><td align="center"><p><a href="/spaces/Q1HVASS6ihhZefH3FyG1/pages/QbefZqpQGdJwhjGvqxhi"><img src="/files/v1REhsNqwU7JfSiWluM8" alt="Callback API"></a><br></p><p><a href="/spaces/Q1HVASS6ihhZefH3FyG1/pages/QbefZqpQGdJwhjGvqxhi"><strong>Callback API</strong></a></p></td><td align="center"><p><a href="/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/aLbDQUGvqk3mO0bRA0dc"><img src="/files/HbyUncS01x9cUsfB4CQg" alt="Fulfillment API"></a><br></p><p><a href="/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/aLbDQUGvqk3mO0bRA0dc"><strong>Fulfillment API</strong></a></p></td></tr></tbody></table>

{% columns %}
{% column valign="middle" %}
{% hint style="info" icon="shirt" %}

<p align="center">Customs Catalog</p>
{% endhint %}

<p align="center"><a href="/spaces/JWssSKqn34oo0GTi1dVW/pages/0ljInR3wX9yfMZEvlhBK"><img src="/files/cSyfJRhmzUSw1t2Dd9Qq" alt="Customs Catalog API"></a></p>

{% hint style="info" icon="laptop" %}
&#x20;    Order
{% endhint %}

<p align="center"><a href="/spaces/9sJh9mebwGhWfzKvcTnt/pages/202esirNcOhTsSfTGXEV"><img src="/files/LN46YMUMfWloOXAU7Csw" alt="Order API"></a></p>
{% endcolumn %}

{% column valign="middle" %}
{% hint style="info" icon="chart-mixed" %}

<p align="center">Pricing Advisor</p>
{% endhint %}

<p align="center"><a href="/spaces/nTL8tl9tUOtaGkSQHGiK/pages/EIGFjqZfvd6s3Op32yBs"><img src="/files/uSV5itefrl9LkfUilpAW" alt="Pricing Advisor API"></a></p>

{% hint style="info" icon="arrow-rotate-right" %}
&#x20;    Returns
{% endhint %}

<p align="center"><a href="/spaces/a921jcoPME0jDOOuVtoT/pages/G2GxBBnsFApQzL2IXCko"><img src="/files/tSdgz2LEkQyWGxKJIs5s" alt="Returns API"></a></p>
{% endcolumn %}

{% column valign="middle" %}
{% hint style="info" icon="basket-shopping" %}
&#x20;  Checkout
{% endhint %}

<p align="center"><a href="/spaces/chjZv79baUiFWxjmZavx/pages/sB155FV2pgYHdCAgTy5O"><img src="/files/ElMAw78nm7WVZZ83WmWf" alt="Checkout API"></a></p>

{% hint style="info" icon="webhook" %}
&#x20;  Callback
{% endhint %}

<p align="center"><a href="/spaces/Q1HVASS6ihhZefH3FyG1/pages/QbefZqpQGdJwhjGvqxhi"><img src="/files/v1REhsNqwU7JfSiWluM8" alt="Callback API"></a></p>
{% endcolumn %}

{% column valign="middle" %}
{% hint style="info" icon="box-open" %}
&#x20;  Package
{% endhint %}

<p align="center"><a href="/spaces/ZhcwGHfYyTPT5VkoQl32/pages/66UkEjgBkmrmojeKVv7P"><img src="/files/1U3x92CAiTZMXCQwTACT" alt="Package API"></a></p>

{% hint style="info" icon="location-dot" %}
&#x20;  Fulfillment
{% endhint %}

<p align="center"><a href="/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/aLbDQUGvqk3mO0bRA0dc"><img src="/files/HbyUncS01x9cUsfB4CQg" alt="Fulfillment API"></a></p>
{% endcolumn %}
{% endcolumns %}

<table data-view="cards"><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table>


# Authentication

Learn how ESW STS authentication works, how to request OAuth 2.0 access tokens with client credentials, and how to send Bearer tokens on API requests.

ESW APIs use the **Security Token Service (STS)**. STS issues and validates **OAuth 2.0 access tokens**. You pass these tokens as **Bearer** tokens on every API request.

Most integrations use the **OAuth 2.0 client credentials** flow. You authenticate with a `client_id` and `client_secret`. You exchange them for a short-lived access token from STS.

### How authentication works

{% stepper %}
{% step %}

#### Request an access token from STS

**STS token endpoint**

<mark style="color:green;">`POST`</mark> `https://security-sts.<environment>.eshopworld.com/connect/token`

Exchange your `client_id` + `client_secret` for OAuth 2.0 access token.

**Headers**

| Name         | Value                               |
| ------------ | ----------------------------------- |
| Content-Type | `application/x-www-form-urlencoded` |

**Body** (form URL encoded)

| Name            | Type   | Description                                                                         |
| --------------- | ------ | ----------------------------------------------------------------------------------- |
| `grant_type`    | string | Use `client_credentials`                                                            |
| `scope`         | string | Space-separated scopes Example: `checkout.preorder.api.all pricing.advisor.api.all` |
| `client_id`     | string | Client identifier provided by ESW                                                   |
| `client_secret` | string | Client secret provided by ESW                                                       |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
  "access_token": "<jwt>",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "checkout.preorder.api.all"
}
```

{% endtab %}

{% tab title="403" %}

```json
{
  "error": "invalid_client",
  "error_description": "Client credentials are invalid."
}
```

{% endtab %}
{% endtabs %}

Use the examples on [Access Tokens](/getting-started/get-started-with-esw/readme/publish-your-docs).
{% endstep %}

{% step %}

#### Call ESW APIs with the Bearer token

Send the token in the `Authorization` header:

```http
Authorization: Bearer <access_token>
```

If the token is missing or invalid, you will get `401` or `403`.
{% endstep %}
{% endstepper %}

### Client credentials

ESW provides your credentials via a secure channel during setup. You use them only when requesting tokens from STS.

* **Client ID**: A unique identifier assigned to a client.
* **Client secret**: A unique secret assigned to a client. Your client secret is private and you must keep your client secret confidential.

Client credentials are valid for **six months**. There is a **one-month rollover** window for rotating secrets.

{% hint style="warning" icon="key" %}
Treat the client secret like a password. Store it in a secrets manager or encrypted store. Never commit it to source control or share it in tickets.
{% endhint %}

### Token lifetime and renewal

STS returns `expires_in` in the token response. Cache tokens and reuse them until they expire. Request a new token when you get `401` and the token is expired.

### OAuth / OpenID Connect notes

STS is compatible with **OAuth 2.0** and **OpenID Connect**. See the external reference: [OAuth 2.0](https://oauth.net/2/).


# Access Tokens

Request OAuth 2.0 access tokens from ESW STS using client credentials. Includes required parameters, token endpoint, and code examples.

Request OAuth 2.0 access tokens from the ESW **Security Token Service (STS)**.

Most integrations use:

* `grant_type=client_credentials`
* one or more space-separated `scope` values

### Token endpoint

Send a `POST` to:

`https://security-sts.<environment>.eshopworld.com/connect/token`

{% hint style="info" icon="brackets-curly" %}
STS expects `application/x-www-form-urlencoded` body parameters.
{% endhint %}

### Parameters

Include these fields in the request body:

* `grant_type`: OAuth 2.0 grant type. Use `client_credentials`.
* `scope`: Space-separated scopes. Example: `checkout.preorder.api.all`, `pricing.advisor.api.all`
* `client_id`: Client identifier provided by ESW.
* `client_secret`: Client secret provided by ESW.

### Examples

{% tabs %}
{% tab title="cURL" %}

```sh
curl --location --request POST "https://security-sts.<environment>.eshopworld.com/connect/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "scope=<space-separated-scopes>" \
  --data-urlencode "client_id=<client_id>" \
  --data-urlencode "client_secret=<client_secret>"
```

{% endtab %}

{% tab title="C# (RestSharp)" %}

```csharp
var client = new RestClient("https://security-sts.<environment>.eshopworld.com/connect/token");
var request = new RestRequest("", Method.Post);

request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("scope", "<space-separated-scopes>");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");

var response = client.Execute(request);
Console.WriteLine(response.Content);
```

{% endtab %}

{% tab title="Java (OkHttp)" %}

```java
OkHttpClient client = new OkHttpClient();

RequestBody body = new FormBody.Builder()
  .add("grant_type", "client_credentials")
  .add("scope", "<space-separated-scopes>")
  .add("client_id", "<client_id>")
  .add("client_secret", "<client_secret>")
  .build();

Request request = new Request.Builder()
  .url("https://security-sts.<environment>.eshopworld.com/connect/token")
  .post(body)
  .build();

Response response = client.newCall(request).execute();
System.out.println(response.body().string());
```

{% endtab %}
{% endtabs %}

See the [Postman collection](/getting-started/get-started-with-esw/readme/postman-collection#get-the-postman-collection) for working sandbox examples.

### Access Token Response

STS returns the access token and the token type (usually `Bearer`).

```json
{
    "access_token": "eyJhbGciOiJSUzI1NiIsImtpZC...I6IjQ3NkQ1QzE5QzI1Nzc0NUV",
    "expires_in": 3600,
    "token_type": "Bearer",
    "scope": "checkout.preorder.api.all"
}
```

### Use the token

Send the token on API requests:

```http
Authorization: Bearer <access_token>
```

For the full flow, see [Authentication](/getting-started/get-started-with-esw/readme/quickstart).


# Postman Collection

Download and import the ESW Postman collection + environment to run the sandbox flow (token → PreOrder → redirect).

### Get the Postman collection

Postman is the fastest way to explore the sandbox flow.

1. Install [Postman](https://www.getpostman.com/downloads/)
2. Import the files below.
3. Select the imported environment.
4. Run the requests in order `(token → PreOrder → redirect)`

Our Postman collection contains a series of Checkout API calls that are made during a typical Checkout session. The URLs in these environments point to the Integration Layer Proxy, which further points to GoCasual by default. Note that each environment contains STS tokens for the equivalent GoCasual API.

**Collection** (requests)

{% file src="/files/gGjk9sLNbPezX9HQAgzB" %}

**Environment** (variables)

{% file src="/files/1nIW6uTGFgmaDGoj0bEt" %}

### Try Checkout end-to-end

#### Test credentials (sandbox)

Use these values when requesting an STS token in sandbox.

| Field           | Value                                                       |
| --------------- | ----------------------------------------------------------- |
| Token URL       | `https://security-sts.sandbox.eshopworld.com/connect/token` |
| `grant_type`    | `client_credentials`                                        |
| `scope`         | `checkout.preorder.api.all`                                 |
| `client_id`     | `gocas.checkout.client`                                     |
| `client_secret` | Provided by ESW                                             |

{% stepper %}
{% step %}

#### Get an STS access token

Use the same pattern as on [Access Tokens](/getting-started/get-started-with-esw/readme/publish-your-docs).

```sh
curl --location --request POST "https://security-sts.sandbox.eshopworld.com/connect/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "scope=checkout.preorder.api.all" \
  --data-urlencode "client_id=<client_id>" \
  --data-urlencode "client_secret=<client_secret>"
```

**Sample response**

```json
{
  "access_token": "<jwt>",
  "expires_in": 3600,
  "token_type": "Bearer",
  "scope": "checkout.preorder.api.all"
}
```

{% endstep %}

{% step %}

#### Create a PreOrder

Use the `access_token` from the previous step.

{% code expandable="true" %}

```sh
curl --location --request POST "https://checkout-api-gocas.sandbox.eshopworld.com/api/v2/PreOrder" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <access_token>" \
  --data-raw '{
    "retailerCartId": "Sample123",
    "cartItems": [
      {
        "quantity": 2,
        "product": {
          "productCode": "1234567890",
          "title": "Black Dress",
          "description": "Black Striped Dress",
          "shopperCurrencyProductPriceInfo": { "price": "AUD3.33" },
          "imageUrl": "assets/images/cart/cart-item10.png",
          "color": "Black",
          "size": "M"
        },
        "cartGrouping": "Group 1"
      }
    ],
    "shopperCurrencyIso": "AUD",
    "retailerCurrencyIso": "EUR",
    "deliveryCountryIso": "AU"
  }'
```

{% endcode %}

**Sample API Response**

```json
{
  "preOrderCode": "e23afa68-9675-4012-8d63-df1517c624cc",
  "orderNumber": "e23afa68-9675-4012-8d63-df1517c624cc",
  "redirectUrl": "https://checkout-ui.sandbox.eshopworld.com/au/e23afa68-9675-4012-8d63-df1517c624cc"
}
```

{% endstep %}

{% step %}

#### Open Checkout

Open `redirectUrl` in a browser.
{% endstep %}
{% endstepper %}

### Troubleshooting

* `401/403`: token missing, expired, or wrong `scope`. See [Authentication](/getting-started/get-started-with-esw/readme/quickstart).
* `400`: request body validation failed. Start by reducing to one item.
* Slow responses / timeouts: follow [API best practices](/getting-started/get-started-with-esw/best-practices/apis).


# Test Cards

Test card numbers for validating ESW Checkout payments, including non-3DS and 3DS scenarios (Adyen and Computop) with OTP notes.

### Non-3DS Test Cards <a href="#non-3ds-test-cards" id="non-3ds-test-cards"></a>

The following are the details of the test cards that can be used to test ESW Checkout experience:

|                                     Card Type                                    |     Card Number     | Expiry Date | Security Code |
| :------------------------------------------------------------------------------: | :-----------------: | :---------: | :-----------: |
| <img src="/files/k2WUAk09DnRUABYnZGuT" alt="" data-size="line"> American Express |  3700 0000 0000 002 |   03/2030   |      7373     |
|       <img src="/files/jAfXfLxCM8o7lhPAJH4K" alt="" data-size="line"> Visa       | 4111 1111 1111 1111 |   03/2030   |      737      |
|    <img src="/files/ZKFKjtq8HTuT1ztGceeY" alt="" data-size="line"> Mastercard    | 5555 4444 3333 1111 |   03/2030   |      737      |
|       <img src="/files/hiSVtiHCdWIbrwtcoNJq" alt="" data-size="line">Diners      |  3600 6666 3333 44  |   03/2030   |      737      |
|      <img src="/files/ts4rMraP8Z8jCjSZvFSo" alt="" data-size="line">Discover     | 6445 6445 6445 6445 |   03/2030   |      737      |
|        <img src="/files/P9gkohUL74sIAk63czrR" alt="" data-size="line"> JCB       | 3569 9900 1009 5841 |   03/2030   |      737      |
|   <img src="/files/9FDSwzgkOXmgBxaFlAbe" alt="" data-size="line">China UnionPay  |  6240 0086 3140 114 |   03/2030   |      737      |
|     <img src="/files/U3G9auaXBgW0Znkfs2OS" alt="" data-size="line"> Electron     | 4400 0000 0000 0000 |   03/2030   |      737      |
|      <img src="/files/2CJAeZ0Z4EZaC2Io285P" alt="" data-size="line"> Maestro     | 6771 7980 2100 0008 |   08/2029   |      737      |
|   <img src="/files/9FDSwzgkOXmgBxaFlAbe" alt="" data-size="line">China UnionPay  | 6250 9470 0000 0014 |   03/2030   |      123      |
|       <img src="/files/1abudImTSlO9gjfasPf8" alt="" data-size="line"> Troy       | 9792 0300 0000 0000 |   08/2029   |      737      |

***

### 3DS Test Cards <a href="#id-3ds-test-cards" id="id-3ds-test-cards"></a>

You can test the 3DS Computop cards using the following details:

| <h4><img src="/files/jAfXfLxCM8o7lhPAJH4K" alt=""> Visa</h4> | <h4><img src="/files/ZKFKjtq8HTuT1ztGceeY" alt="" data-size="line"> Mastercard</h4> | <h4>Test Scenario</h4> |
| :----------------------------------------------------------: | :---------------------------------------------------------------------------------: | :--------------------: |
|                      4000 0147 3036 6880                     |                                 5232 1241 0698 7982                                 |    Browser challenge   |
|                      4000 0155 7319 8637                     |                                 5232 1280 8394 4791                                 |    Browser challenge   |

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

* The one time password (OTP) for the above cards is 1234
* Please confirm the OTP with mouse click instead of Enter key to ensure that you are not accidentally proceeding with cancelling the operation.
  {% endhint %}

***

### <img src="/files/SalJ9a9GZEvbQE5FJIB3" alt="" data-size="original">Adyen Cards <a href="#adyen-cards" id="adyen-cards"></a>

{% hint style="info" icon="credit-card" %}

* The Adyen cards are enrolled in 3D Secure 2 security framework. To test 3D Secure 2 (advanced) scenarios, refer to [test 3D Secure 2 authentication](https://docs.adyen.com/development-resources/testing/3d-secure-2-authentication).
* One time password (OTP): 1234
  {% endhint %}

|        American Express       |  3714 4963 5398 431 | Mar-30 |      7373      |
| :---------------------------: | :-----------------: | :----: | :------------: |
|      Bancontact / Maestro     | 6703 4444 4444 4449 | Mar-30 | Not applicable |
|       Bancontact / Visa       | 4871 0499 9999 9910 | Mar-30 |       737      |
| Cartes Bancaires / Visa Debit | 4035 5014 2814 6300 | Mar-30 |       737      |
|        Cartes Bancaires       | 4360 0000 0100 0005 | Mar-30 |       737      |
|    China UnionPay (Credit)    | 6250 9470 0000 0014 | Mar-30 |       123      |
|     China UnionPay (Debit)    | 6250 9460 0000 0016 | Mar-30 |       123      |
|             Diners            |  3056 9309 0259 04  | Mar-30 |       737      |
|            Discover           | 6011 1111 1111 1117 | Mar-30 |       737      |
|            Maestro            | 5000 5500 0000 0029 | Mar-30 | Not applicable |
|           Mastercard          | 5555 4444 3333 1111 | Mar-30 |       737      |
|       Mastercard Credit       | 2222 4000 1000 0008 | Mar-30 |       737      |
|              Visa             | 4917 6100 0000 0000 | Mar-30 |       737      |
|          Visa Classic         | 4166 6766 6766 6746 | Mar-30 |       737      |

***

### Computop Cards <a href="#computop-cards" id="computop-cards"></a>

{% hint style="info" icon="binary" %}
One-time password (OTP): 1234
{% endhint %}

| Test Scenario                                                              | Visa                | Visa/ Cartes Bancaires (co-badged) | MasterCard          | MasterCard/ Cartes Bancaires (co-badged) | Maestro             | Amex               |
| -------------------------------------------------------------------------- | ------------------- | ---------------------------------- | ------------------- | ---------------------------------------- | ------------------- | ------------------ |
| Browser challenge                                                          | 4000 0164 3594 0133 | 4972 0212 3456 7842                | 5232 1221 8930 1469 | 5341 0112 3456 7851                      |                     | 3782 8224 6310 005 |
| Browser challenge                                                          | 4000 0128 9268 8323 | 4972 0212 3456 7891                | 5232 1251 2540 1459 | 5341 0112 3456 7810                      | 6759 6498 2643 8453 | 3714 4963 5398 431 |
| Browser frictionless; missing DS Transaction ID                            | 4000 01269 9048 523 | 4972 0212 3456 7883                | 5232 1272 6463 7786 | 5341 0112 3456 7893                      |                     |                    |
| Not authenticated browser frictionless                                     | 4000 0117 4413 5012 | 4972 0212 3456 7834                | 5232 1227 4150 7017 | 5341 0112 3456 7844                      |                     |                    |
| Authenticated browser frictionless                                         | 4000 0199 6619 9434 | 4972 0212 3456 7875                | 5232 1224 2254 3299 | 5341 0112 3456 7885                      |                     | 3750 0000 0000 007 |
| Browser challenge missing ACS URL                                          | 4000 0155 7319 8637 | 4972 0212 3456 7826                | 5232 1280 8394 4791 | 5341 0112 3456 7836                      |                     |                    |
| Authentication protocol error                                              | 4000 0178 7348 5953 | 4972 0212 3456 7867                | 5232 1225 9690 7270 | 5341 0112 3456 7877                      |                     |                    |
| Browser challenge; authenticated transaction; missing authentication value | 4000 0147 3036 6880 | 4972 0212 3456 7818                | 5232 1241 0698 7982 | 5341 0112 3456 7828                      |                     |                    |


# Core Integrations

What you integrate for an end-to-end ESW implementation: Catalog, Checkout, and Package.

ESW’s platform is modular by design, which means that it offers the flexibility to integrate with only the components that fit your requirements. However, if you are integrating end-to-end with ESW, then you must integrate with the three major components: Catalog, Checkout, and Shipping.

## Custom Catalog

{% columns %}
{% column width="16.666666666666664%" %}

<div align="center"><figure><img src="/files/KnRvzXuwyUWVweWwWxxZ" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column width="83.33333333333334%" valign="middle" %}
{% hint style="info" icon="rectangle-api" %}
[Customs Catalog API](/customs-catalog-api)
{% endhint %}

Integrate product catalog with ESW using the Customs Catalog API or Excel `xlsx` or CSV `csv` file. Refer to [Catalog Integration](#catalog-integration)
{% endcolumn %}
{% endcolumns %}

***

## Checkout

{% columns %}
{% column width="16.666666666666664%" %}

<div align="center"><figure><img src="/files/A0MfoUpcumSLrxxYn5nA" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column width="83.33333333333334%" valign="middle" %}
{% hint style="info" icon="rectangle-api" %}
[Checkout API](/checkout-api)
{% endhint %}

Integrate checkout using the Checkout API or our commerce platform connectors for Magento, Salesforce Commerce Cloud or Shopify. Refer to [Checkout Integration](#checkout-integration)
{% endcolumn %}
{% endcolumns %}

***

## Shipping

{% columns %}
{% column width="16.666666666666664%" %}

<div align="center"><figure><img src="/files/XG8XjSqVtRMwKfeTZot6" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column width="83.33333333333334%" valign="middle" %}
{% hint style="info" icon="rectangle-api" %}
[Package API](/package-api)
{% endhint %}

Share the package data with ESW using the Package API or an `XML` file. Refer to [Shipping Integration](#shipping-integration)
{% endcolumn %}
{% endcolumns %}

***

{% tabs %}
{% tab title="Catalog integration" %}
Provide your product catalog to ESW before selling internationally. ESW uses this data to calculate duties and taxes. It also supports export compliance and customs clearance.

Your catalog typically includes the product code, description, country of origin, weight, and HS code. Submit the initial catalog during onboarding. ESW stores it for future calculations and validations.

When product data changes, submit a complete catalog. Do not submit delta-only updates.

Choose one integration method:

[**Customs Catalog API**](/customs-catalog-api)

Upload new catalogs and update existing ones with the `POST` endpoint.

[**Catalog file transfer**](/integrations/integrations/catalog-file-integration)

Upload an Excel or CSV file through SFTP. ESW provides the required format, naming convention, and location during onboarding.
{% endtab %}

{% tab title="Checkout integration" %}
Integrate with ESW Checkout through the Checkout API or a supported commerce platform extension.

[**Checkout API**](https://developer.esw.com/checkout-api/)

Send the shopper’s cart to ESW. Redirect the shopper using the URL in the API response. Use the `POST` endpoint to include cart-level or order-level discounts and promotion codes.

**Commerce Platform Connectors**

Use the Magento plugin or Salesforce Commerce Cloud cartridge. Shopify stores can use the ESW-Shopify app.

[**Light Touch Integration**](/integrations/integrations/light-touch-integration)

Connect BigCommerce, WooCommerce, Commerce Tools, web storefronts, or Callback API with LTI.
{% endtab %}

{% tab title="Shipping integration" %}
Share order and package information with ESW to synchronize shipping data. Create an **Advanced Shipping Notice (ASN)** for each package. The ASN confirms the items that the package contains.

Send the ASN before the package leaves your distribution centre. ESW must receive it before the package reaches an ESW hub.

Choose one integration method:

[**Package API**](/package-api)

Send the order number, item quantities and descriptions, weight, and dimensions. Retrieve an existing package with the `GET` endpoint.

[**XML file**](/integrations/integrations/package-file-integration)

Generate an XML file in the ESW format. Upload it through SFTP on an agreed schedule.
{% endtab %}
{% endtabs %}


# API Integration

Integration Summary

{% stepper %}
{% step %}

#### <i class="fa-shirt-long-sleeve">:shirt-long-sleeve:</i> Customs Catalog

{% embed url="<https://developer.esw.com/customs-catalog-api>" %}

{% hint style="info" icon="arrow-up-to-dotted-line" %}
Choose from two upload options.
{% endhint %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-file-csv">:file-csv:</i> <strong>Catalog file transfer​</strong></td><td align="center">Upload an Excel <code>.xlsx</code> or CSV <code>.csv</code> file.</td><td><a href="/pages/ynpF9DEIIZo2dkAQnVtM">/pages/ynpF9DEIIZo2dkAQnVtM</a></td></tr><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Catalog</strong> <strong>API</strong></td><td align="center">Use the <code>POST</code> method to upload a new catalog or update an existing catalog.</td><td><a href="/spaces/JWssSKqn34oo0GTi1dVW/pages/nIFCOrckGRjiOHBVM8Sj">/spaces/JWssSKqn34oo0GTi1dVW/pages/nIFCOrckGRjiOHBVM8Sj</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-hand-holding-circle-dollar">:hand-holding-circle-dollar:</i> Pricing

{% embed url="<https://developer.esw.com/pricing-advisor-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Pricing Advisor API</strong> </td><td align="center">Apply the pricing formula to calculate product prices in the shopper’s currency.</td><td><a href="/spaces/nTL8tl9tUOtaGkSQHGiK/pages/5O83zdt3ftsRIn5w2HE3">/spaces/nTL8tl9tUOtaGkSQHGiK/pages/5O83zdt3ftsRIn5w2HE3</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-cart-shopping">:cart-shopping:</i> Checkout

{% embed url="<https://developer.esw.com/checkout-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Checkout API</strong> </td><td align="center">Also known as the PreOrder API, sends cart information to ESW Checkout system.<br></td><td><a href="/spaces/chjZv79baUiFWxjmZavx/pages/mCWQ5A8Kq5jMqZwsZXyq">/spaces/chjZv79baUiFWxjmZavx/pages/mCWQ5A8Kq5jMqZwsZXyq</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-tag">:tag:</i> Order

{% embed url="<https://developer.esw.com/order-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Order API</strong> </td><td align="center">Central order management layer in the ESW cross-border commerce platform.<br></td><td><a href="/spaces/9sJh9mebwGhWfzKvcTnt/pages/PEK4qwopvAt70p01AeIx">/spaces/9sJh9mebwGhWfzKvcTnt/pages/PEK4qwopvAt70p01AeIx</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-box-open">:box-open:</i> Package

{% embed url="<https://developer.esw.com/package-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Package API</strong> </td><td align="center">Manage shipment and delivery data efficiently.<br></td><td><a href="/spaces/ZhcwGHfYyTPT5VkoQl32/pages/4c24e961c980bd6a81469b55ff7abfb609f33945">/spaces/ZhcwGHfYyTPT5VkoQl32/pages/4c24e961c980bd6a81469b55ff7abfb609f33945</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-truck">:truck:</i> Fulfillment

{% embed url="<https://developer.esw.com/fulfillment-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>Fulfillment API</strong> </td><td align="center">Enable automated, real-time exchange of catalog, inventory, order, and shipment data across platforms.<br></td><td><a href="/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/ORi0M8U9B1scFJYIPq2F">/spaces/OA1tnmF5u1Lk9QuR6ayG/pages/ORi0M8U9B1scFJYIPq2F</a></td></tr></tbody></table>
{% endstep %}

{% step %}

#### <i class="fa-turn-down-left">:turn-down-left:</i> Returns

{% embed url="<https://developer.esw.com/returns-api>" %}

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><i class="fa-rectangle-api">:rectangle-api:</i> <strong>GRP Returns API</strong> </td><td align="center">Central integration layer for ESW's Global Returns Platform<br></td><td><a href="/spaces/a921jcoPME0jDOOuVtoT/pages/t4fyNGgFIcCWyiReueRm">/spaces/a921jcoPME0jDOOuVtoT/pages/t4fyNGgFIcCWyiReueRm</a></td></tr></tbody></table>
{% endstep %}
{% endstepper %}


# Catalog File Integration

How to name, format, and deliver Excel/CSV catalog files to ESW via SFTP, including required fields.

Use the Catalog file to send your product master data to ESW. ESW uses this data for duties/taxes calculations and customs validation.

You can upload either an **Excel `.xlsx`** file or a **CSV `.csv`** file. Deliver files to an ESW-provided **SFTP** location.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref">Link</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td><strong>File Processing</strong><br>What to expect after upload, plus sample templates.</td><td><a href="/spaces/bB3UcHnWX3RLHHoolsLd/pages/7ea0dc635c01fd18bf934c6efe780f45ffbed488">/spaces/bB3UcHnWX3RLHHoolsLd/pages/7ea0dc635c01fd18bf934c6efe780f45ffbed488</a></td><td><a href="/files/gMYsvBEHgaaDHKZgKM4r">/files/gMYsvBEHgaaDHKZgKM4r</a></td><td><a href="/files/kjbJbJR7abG5u3N5s4SG">/files/kjbJbJR7abG5u3N5s4SG</a></td></tr><tr><td><strong>Sample Customs Catalog Template</strong><br>Download a starter file and <code>enum</code> values</td><td><a href="/spaces/bB3UcHnWX3RLHHoolsLd/pages/5XnBNID38K8vApYWe0ax">/spaces/bB3UcHnWX3RLHHoolsLd/pages/5XnBNID38K8vApYWe0ax</a></td><td><a href="/files/XCzeUsZZ5xMCqiOK8gzc">/files/XCzeUsZZ5xMCqiOK8gzc</a></td><td><a href="/files/3MBubEJJZmNSZKxvVECM">/files/3MBubEJJZmNSZKxvVECM</a></td></tr></tbody></table>

### File naming

Use this format:

* `Catalog-nnn-xxxxxxxx.xlsx`
* `Catalog-nnn-xxxxxxxx.csv`

Where:

* `nnn`: the ESW-provided brand code.
* `xxxxxxxx`: an 8-digit, zero-padded counter starting at `00000001`.

Example: `Catalog-ABC-00000001.xlsx`

### Generation and delivery

* Agree the delivery schedule with ESW (daily, weekly, etc.).
* Include records for **one brand/retailer** per file.
* Keep the sequence increasing for each new file you send.

{% hint style="info" %}
ESW provides SFTP connection details (host, username, password) during onboarding.
{% endhint %}

### Upload modes

ESW can process both full loads and delta uploads. Agree the approach with ESW.

* **Full catalog**: recommended for first upload and for major refreshes.
* **New products only**: include only SKUs not yet in ESW.
* **Updates to existing products**: include only SKUs you want to change.
  * On successful processing, populated fields overwrite previously stored values.

### File format rules

{% tabs %}
{% tab title="Excel (.xlsx)" %}

* Use **one worksheet** only.
* Put **one product per row**.
* Row 1 must be the **header row**.
* Use header names exactly as defined in [Field reference](#field-reference).
* Do not include HTML tags or markup in any field.
  {% endtab %}

{% tab title="CSV (.csv)" %}

* Choose a delimiter: comma `,`, semicolon `;`, or pipe `|`. Agree this with ESW.
* Use the same delimiter for the header and all data rows.
* Quote fields when they contain the delimiter (standard CSV rules).
* Put **one product per row**.
* Do not include HTML tags or markup in any field.
* Avoid trailing empty records at the end of the file.
  {% endtab %}
  {% endtabs %}

### Data rules

* Use **English** values only.
* Use one row to represent one product.
* Use stable identifiers. `productCode` is the primary key.
* If you model variants in the file, add differentiators (for example `size`) and use `variantProductCode` where applicable.

### Field reference

<table><thead><tr><th width="177">Field</th><th width="134">Type</th><th>Description</th><th>Notes</th></tr></thead><tbody><tr><td><code>productCode</code></td><td>String (50)</td><td><mark style="color:$danger;"><code>Required</code></mark> Brand unique master identifier or SKU. Examples: <code>1231321313</code>, <code>ABC-1234</code>, <code>2132132323 1</code></td><td>Key identifier. Use the product SKU where possible. Keep it searchable and consistent across the retailer site, checkout, and shipping.</td></tr><tr><td><code>name</code></td><td>String (150)</td><td><mark style="color:$danger;"><code>Required</code></mark> Product name. Examples: <code>Cubania Shirt</code>, <code>10" High-Rise Skinny Jeans in Indigo Dye Wash</code>, <code>LOVELY MASCARA</code></td><td>Match the product landing page title. For variants, include a distinguishing value such as color or size.</td></tr><tr><td><code>description</code></td><td>String (100)</td><td><mark style="color:$danger;"><code>Required</code></mark> Short product description. Examples: <code>women’s trousers (woven)</code>, <code>A soft, lightweight, and breathable Cubania shirt</code>, <code>high glow lipstick</code></td><td>Use a concise customs-ready description. This field is used for customs clearance.</td></tr><tr><td><code>material</code></td><td>String (100)</td><td><mark style="color:$danger;"><code>Required</code></mark> Material composition of the product. Examples: <code>90% cotton, 10% silk</code>, <code>Premium 95% cotton/3% poly/2% elastane ISKO™ denim</code>, <code>Aqua (Water), Paraffin, Glyceryl Stearate</code></td><td>List the primary material first. You can add up to two secondary materials. This field is used for customs clearance.</td></tr><tr><td><code>countryOfOrigin</code></td><td>CountryIso</td><td><mark style="color:$danger;"><code>Required</code></mark> Two-letter ISO code for the country where the product is manufactured. Examples: <code>CN</code>, <code>US</code></td><td></td></tr><tr><td><code>hsCode</code></td><td>String (12)</td><td><mark style="color:$danger;"><code>Required</code></mark> Brand HS code for the product. Use 8 to 12 digits. Example: <code>62310100</code></td><td>Keep HS code length consistent across products in the same file.</td></tr><tr><td><code>hsCodeRegion</code></td><td>Region</td><td><mark style="color:$danger;"><code>Required</code></mark> ESW region for the related <code>hsCode</code>. Examples: <code>EU</code>, <code>US</code></td><td></td></tr><tr><td><code>category</code></td><td>Category</td><td><mark style="color:$warning;"><code>Optional</code></mark> ESW category ID for the product. Example: <code>ApparelClothingNotKnitted</code></td><td>Recommended when you know the best category match.</td></tr><tr><td><code>gender</code></td><td>Gender</td><td><mark style="color:$warning;"><code>Optional</code></mark> Gender value for the product. Examples: <code>Female</code>, <code>Male</code></td><td>Use for a single product with multiple variants.</td></tr><tr><td><code>ageGroup</code></td><td>AgeGroup</td><td><mark style="color:$warning;"><code>Optional</code></mark> Age group for the product. Examples: <code>Adult</code>, <code>Kids</code></td><td>Use for a single product with multiple variants.</td></tr><tr><td><code>size</code></td><td>String (100)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product size. Examples: <code>Small</code>, <code>Large</code>, <code>32D</code>, <code>XXL</code></td><td>Use for a single product with multiple variants.</td></tr><tr><td><code>weight</code></td><td>Decimal</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product weight in the related <code>weightUnit</code>. Example: <code>1.00</code></td><td><p>Use the product weight without packaging.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>Conditional</h4><p>If <code>weightUnit</code> is present, <code>weight</code> is required.</p></div></td></tr><tr><td><code>weightUnit</code></td><td>WeightUnit</td><td><mark style="color:$warning;"><code>Optional</code></mark> Unit for <code>weight</code>. Examples: <code>Kg</code>, <code>Lb</code></td><td><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>Conditional</h4><p>If <code>weight</code> is present, <code>weightUnit</code> is required.</p></div></td></tr><tr><td><code>url</code></td><td>String (200)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product landing page URL.</td><td><p>Use a verified domain. Start with <code>http://</code> or <code>https://</code>.</p><div data-gb-custom-block data-tag="hint" data-style="danger" class="hint hint-danger"><h4>Required for specific destinations</h4><p>This field is required when shipping to Russia or Japan.</p></div></td></tr><tr><td><code>imageUrl</code></td><td>String (200)</td><td><mark style="color:$warning;"><code>Optional</code></mark> URL for the product’s main image thumbnail.</td><td>Link to the main product image thumbnail. Start with <code>http://</code> or <code>https://</code>.</td></tr><tr><td><code>unitPrice</code></td><td>Decimal</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product price. Example: <code>2.69</code></td><td><p>Submit the accurate selling price, not an approximate value.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>Conditional</h4><p>If <code>unitPriceCurrencyIso</code> is present, <code>unitPrice</code> is required.</p></div></td></tr><tr><td><code>unitPriceCurrencyIso</code></td><td>CurrencyIso</td><td><mark style="color:$warning;"><code>Optional</code></mark> ISO currency for <code>unitPrice</code>. Example: <code>EUR</code></td><td><p>Use a valid ISO currency code.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>Conditional</h4><p>If <code>unitPrice</code> is present, <code>unitPriceCurrencyIso</code> is required.</p></div></td></tr><tr><td><code>dangerousGoods</code></td><td>Boolean</td><td><mark style="color:$warning;"><code>Optional</code></mark> Indicates whether the product is classified as dangerous goods or hazardous material. Accepted values: <code>TRUE</code>, <code>FALSE</code></td><td>Items that can cause damage, harm, or injury are not allowed.</td></tr><tr><td><code>additionalProductCode</code></td><td>String (50)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Additional product identifier, such as a manufacturer SKU.</td><td>Use when you need a secondary searchable identifier. Keep it consistent across checkout and shipping.</td></tr><tr><td><code>variantProductCode</code></td><td>String (50)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Variant-level version of the brand master identifier or SKU.</td><td>Use when product variants need their own identifier. Keep it consistent across checkout and shipping.</td></tr><tr><td><code>isRestricted</code></td><td>Boolean</td><td><mark style="color:$warning;"><code>Optional</code></mark> Identifies whether the product is restricted, independent of destination or other attributes. Accepted values: <code>TRUE</code>, <code>FALSE</code></td><td></td></tr><tr><td><code>MID</code></td><td>String (500)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Manufacturer or shipper identification code.</td><td><div data-gb-custom-block data-tag="hint" data-style="danger" class="hint hint-danger"><h4>Conditional</h4><p>This field is required for shipments to or from the US when the order value is <code>$800</code> or more.</p></div></td></tr><tr><td><code>MIDAddressZip</code></td><td>String (500)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Merchant registered address ZIP or postal code.</td><td><div data-gb-custom-block data-tag="hint" data-style="danger" class="hint hint-danger"><h4>Conditional</h4><p>This field is required when <code>MID</code> is present and <code>countryOfOrigin</code> is <code>CN</code> or <code>VN</code>. Full MID address details are mandatory when <code>countryOfOrigin</code> is <code>VN</code>.</p></div></td></tr><tr><td><code>AdditionalInformation</code></td><td>String (200)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Extra catalog details.</td><td></td></tr><tr><td><code>CategoryInformation</code></td><td>String (200)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Additional data that categorizes the retailer’s goods or services.</td><td></td></tr><tr><td><code>IsSubscription</code></td><td>Boolean</td><td><mark style="color:$warning;"><code>Optional</code></mark> Indicates whether the product can be bought as part of a subscription. Accepted values: <code>TRUE</code>, <code>FALSE</code></td><td></td></tr><tr><td><code>IsCustomized</code></td><td>Boolean</td><td><mark style="color:$warning;"><code>Optional</code></mark> Indicates whether the product is customized. Accepted values: <code>TRUE</code>, <code>FALSE</code></td><td></td></tr><tr><td><code>eccn</code></td><td>String (5)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Export Control Classification Number for consumer electronics.</td><td><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>Conditional</h4><p><code>eccn</code> is required in several cases, including export or re-export flows, shipments to certain countries, dual-use items, and sensitive technologies.</p></div></td></tr><tr><td><code>ean</code></td><td>String (13)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product identifier used for catalog matching and downstream system reference. This is not a mandatory customs attribute.</td><td><p>Used for product identification only.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>If supplied</h4><ul><li>EAN must be 13 numeric digits.</li><li>Only one of <code>EAN</code> or <code>UPC</code> is required per product.</li><li>If both are provided, ESW prioritizes <code>EAN</code>.</li><li>If neither is supplied, customs processing can still proceed if all other mandatory catalog fields are present.</li></ul></div></td></tr><tr><td><code>upc</code></td><td>String (12)</td><td><mark style="color:$warning;"><code>Optional</code></mark> Product identifier used for catalog matching and downstream system reference. This is not a mandatory customs attribute.</td><td><p>Used for product identification only.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><h4>If supplied</h4><ul><li>UPC must be 12 numeric digits.</li><li>Only one of <code>EAN</code> or <code>UPC</code> is required per product.</li><li>If both are provided, ESW prioritizes <code>EAN</code>.</li><li>If neither is supplied, customs processing can still proceed if all other mandatory catalog fields are present.</li></ul></div></td></tr></tbody></table>


# Sample Customs Catalog Template

Download a sample customs catalog template and reference allowed enum values for file-based catalog uploads.

Use this sample file as a starting point for a file-based customs catalog upload.

### Download the template

{% file src="/files/3hMy3LFK5vZrgH4E3jJV" %}

{% @code-walkthrough/alert-block title="Enum Values" message="Enum values can be case-sensitive. Send them exactly as shown." type="error" %}

### Enumerations

### `WeightUnit`

Use uppercase values.

| Value |
| ----- |
| `LB`  |
| `KG`  |

### `Gender`

| Value    |
| -------- |
| `Male`   |
| `Female` |
| `Unisex` |

### `AgeGroup`

| Value     | Description         |
| --------- | ------------------- |
| `Newborn` | Up to 3 months old. |
| `Infant`  | 3–18 months old.    |
| `Toddler` | 1.5–5 years old.    |
| `Kids`    | 6–12 years old.     |
| `Adult`   | Teens or older.     |

### `Category`

Use these values for the `category` field.

<details>

<summary>Show category values</summary>

| Value                                                           |
| --------------------------------------------------------------- |
| `AircraftSpacecraft`                                            |
| `AlbuminoidalSubstances`                                        |
| `AluminumAndArticlesThereof`                                    |
| `AnimalsPetSupplies`                                            |
| `ApparelAccessories`                                            |
| `ApparelClothingKnitted`                                        |
| `ApparelClothingNotKnitted`                                     |
| `ArmsAndAmmunition`                                             |
| `ArticlesOfIronSteel`                                           |
| `ArticlesOfLeather`                                             |
| `ArticlesOfStone`                                               |
| `ArtsEntertainment`                                             |
| `BabyToddler`                                                   |
| `BusinessIndustrial`                                            |
| `CamerasOptics`                                                 |
| `CarpetsAndFloorCoverings`                                      |
| `CeramicProducts`                                               |
| `ClocksAndWatches`                                              |
| `CompleteIndustrialPlant`                                       |
| `CopperAndArticlesThereof`                                      |
| `Cork`                                                          |
| `Cotton`                                                        |
| `Digital`                                                       |
| `ElectricalMachinerySoundAndTv`                                 |
| `Electronics`                                                   |
| `ExplosivesEtc`                                                 |
| `FeathersAndDownArticlesAndArtificialFlowers`                   |
| `FoodBeveragesTobacco`                                          |
| `Footwear`                                                      |
| `Furniture`                                                     |
| `FurnitureAndFurnishings`                                       |
| `FurskinsAndArtificialFur`                                      |
| `GlassAndGlassware`                                             |
| `Hardware`                                                      |
| `Headgear`                                                      |
| `HealthBeauty`                                                  |
| `HomeGarden`                                                    |
| `IndustrialTextileFabricsAndTextileArticles`                    |
| `IronAndSteel`                                                  |
| `KnittedCrochetedFabrics`                                       |
| `LeadAndArticlesThereof`                                        |
| `LuggageBags`                                                   |
| `ManMadeFilaments`                                              |
| `ManMadeStapleFibres`                                           |
| `ManufacturesOfStrawBasketwareAndWickerwork`                    |
| `Mature`                                                        |
| `Media`                                                         |
| `MiscellaneousArticlesOfBaseMetal`                              |
| `MiscellaneousChemicalProducts`                                 |
| `MiscellaneousManufacturedArticles`                             |
| `MusicalInstruments`                                            |
| `NickelAndArticlesThereof`                                      |
| `NuclearReactorsBoilersMachinery`                               |
| `OfficeSupplies`                                                |
| `OpticalPhotographicCinematographicMeasuringMedicalInstruments` |
| `OtherBaseMetalsAndArticlesThereof`                             |
| `OtherMadeupWornTextileArticles`                                |
| `OtherVegetableTextileFibres`                                   |
| `PaperAndPaperboard`                                            |
| `PerfumeryCosmeticToiletPreparations`                           |
| `PhotographicCinematographicGoods`                              |
| `Plastics`                                                      |
| `PreciousStonesMetalsAndJewelry`                                |
| `PrintedBooksNewspapers`                                        |
| `PulpOfWoodScrapPaperPaperboard`                                |
| `RailwayTramwayLocomotivesRollingStock`                         |
| `RawHidesAndSkins`                                              |
| `ReligiousCeremonial`                                           |
| `Returns label`                                                 |
| `Rubber`                                                        |
| `ShipsBoatsAndFloatingStructures`                               |
| `Silk`                                                          |
| `SoapPolishCandlesEtc`                                          |
| `Software`                                                      |
| `SpecialCombinedNomenclatureCodes`                              |
| `SpecialWovenFabrics`                                           |
| `SportingGoods`                                                 |
| `TinAndArticlesThereof`                                         |
| `ToolsImplementsCutlery`                                        |
| `ToysGames`                                                     |
| `ToysGamesAndSports`                                            |
| `UmbrellasAndWalkingSticks`                                     |
| `VehiclesOtherThanRailwayTramwayRollingStock`                   |
| `VehiclesParts`                                                 |
| `WaddingSpecialYarnsTwine`                                      |
| `Wood`                                                          |
| `WoolAndAnimalHair`                                             |
| `WorksOfArtAndAntiques`                                         |
| `ZincAndArticlesThereof`                                        |

</details>

### `CurrencyIso`

Use standard ISO 4217 currency codes.

Examples: `USD`, `EUR`, `GBP`.

<details>

<summary>Show CurrencyIso values</summary>

| Code | Currency                    |
| ---- | --------------------------- |
| ARS  | Argentine Peso              |
| AUD  | Australian Dollar           |
| AZN  | Azerbaijani Manat           |
| BHD  | Bahraini Dinar              |
| BDT  | Bangladeshi Taka            |
| BBD  | Barbados Dollar             |
| BYR  | Belarusian Ruble            |
| BYN  | Belarusian Ruble            |
| BZD  | Belize Dollar               |
| BMD  | Bermudian Dollar            |
| BOB  | Boliviano                   |
| BRL  | Brazilian Real              |
| BGN  | Bulgarian Lev               |
| KHR  | Cambodian Riel              |
| CAD  | Canadian Dollar             |
| CLP  | Chilean Peso                |
| CNY  | Chinese Yuan                |
| COP  | Colombian Peso              |
| CRC  | Costa Rican Colon           |
| HRK  | Croatian Kuna               |
| CZK  | Czech Koruna                |
| DKK  | Danish Krone                |
| DOP  | Dominican Peso              |
| EGP  | Egyptian Pound              |
| EUR  | Euro                        |
| GIP  | Gibraltar Pound             |
| GTQ  | Guatemalan Quetzal          |
| HNL  | Honduran Lempira            |
| HKD  | Hong Kong Dollar            |
| HUF  | Hungarian Forint            |
| INR  | Indian Rupee                |
| IDR  | Indonesian Rupiah           |
| ILS  | Israeli New Shekel          |
| JMD  | Jamaican Dollar             |
| JPY  | Japanese Yen                |
| JOD  | Jordanian Dinar             |
| KZT  | Kazakhstani Tenge           |
| KWD  | Kuwaiti Dinar               |
| LVL  | Latvian Lats                |
| LTL  | Lithuanian Litas            |
| MYR  | Malaysian Ringgit           |
| MVR  | Maldivian Rufiyaa           |
| MXN  | Mexican Peso                |
| MDL  | Moldovan Leu                |
| TWD  | New Taiwan Dollar           |
| NZD  | New Zealand Dollar          |
| NIO  | Nicaraguan Córdoba          |
| NOK  | Norwegian Krone             |
| OMR  | Omani Rial                  |
| PKR  | Pakistani Rupee             |
| PAB  | Panamanian Balboa           |
| PYG  | Paraguayan Guaraní          |
| PEN  | Peruvian Nuevo Sol          |
| PHP  | Philippine Peso             |
| PLN  | Polish Zloty                |
| GBP  | Pound Sterling              |
| QAR  | Qatari Riyal                |
| ROL  | Romanian Leu                |
| RON  | Romanian New Leu            |
| RUB  | Russian Ruble               |
| SAR  | Saudi Riyal                 |
| SGD  | Singapore Dollar            |
| ZAR  | South African Rand          |
| KRW  | South Korean Won            |
| LKR  | Sri Lankan Rupee            |
| SEK  | Swedish Krona/Kronor        |
| CHF  | Swiss Franc                 |
| THB  | Thai Baht                   |
| TRY  | Turkish Lira                |
| UAH  | Ukrainian Hryvnia           |
| AED  | United Arab Emirates Dirham |
| USD  | United States Dollar        |
| VEF  | Venezuelan Bolívar          |
| VND  | Vietnamese Dong             |

</details>

### `Region`

Use the HS code region agreed with ESW.

Common values include `EU` and `US`.

<details>

<summary>Show region values</summary>

| Code | Country                  |
| ---- | ------------------------ |
| AE   | United Arab Emirates     |
| AL   | Albania                  |
| AU   | Australia                |
| BA   | Bosnia and Herzegovina   |
| BH   | Bahrain                  |
| CA   | Canada                   |
| CH   | Switzerland              |
| CL   | Chile                    |
| CN   | China                    |
| CO   | Columbia                 |
| EG   | Egypt                    |
| EU   | European Union           |
| GE   | Georgia                  |
| HK   | Hong Kong                |
| ID   | Indonesia                |
| IL   | Israel                   |
| IN   | India                    |
| JP   | Japan                    |
| KR   | Korea, Republic of       |
| KW   | Kuwait                   |
| MA   | Morocco                  |
| MD   | Moldova                  |
| MX   | Mexico                   |
| MY   | Malaysia                 |
| NO   | Norway                   |
| NZ   | New Zealand              |
| PH   | Philippines              |
| PR   | Puerto Rico              |
| QA   | Qatar                    |
| RU   | Russian Federation       |
| SA   | Saudi Arabia             |
| SG   | Singapore                |
| TH   | Thailand                 |
| TR   | Turkey                   |
| TW   | Taiwan                   |
| US   | United States of America |
| VN   | Vietnam                  |
| ZA   | South Africa             |

</details>

#### `CountryIso`

Use ISO 3166-1 alpha-2 country codes.

Examples: `US`, `CN`, `GB`.

<details>

<summary>Show CountryIso values</summary>

| Code | Country/Region                              |
| ---- | ------------------------------------------- |
| AF   | Afghanistan                                 |
| AX   | Aland Islands                               |
| AL   | Albania                                     |
| DZ   | Algeria                                     |
| AS   | American Samoa                              |
| AD   | Andorra                                     |
| AO   | Angola                                      |
| AI   | Anguilla                                    |
| AQ   | Antarctica                                  |
| AG   | Antigua and Barbuda                         |
| AR   | Argentina                                   |
| AM   | Armenia                                     |
| AW   | Aruba                                       |
| AU   | Australia                                   |
| AT   | Austria                                     |
| AZ   | Azerbaijan                                  |
| BS   | Bahamas                                     |
| BH   | Bahrain                                     |
| BD   | Bangladesh                                  |
| BB   | Barbados                                    |
| BY   | Belarus                                     |
| BE   | Belgium                                     |
| BZ   | Belize                                      |
| BJ   | Benin                                       |
| BM   | Bermuda                                     |
| BT   | Bhutan                                      |
| BO   | Bolivia                                     |
| BQ   | Bonaire, Sint Eustatius and Saba            |
| BA   | Bosnia and Herzegovina                      |
| BW   | Botswana                                    |
| BV   | Bouvet Island                               |
| BR   | Brazil                                      |
| IO   | British Indian Ocean Territory              |
| VG   | British Virgin Islands (UK                  |
| BN   | Brunei Darussalam                           |
| BG   | Bulgaria                                    |
| BF   | Burkina Faso                                |
| BI   | Burundi                                     |
| KH   | Cambodia                                    |
| CM   | Cameroon                                    |
| CA   | Canada                                      |
| CV   | Cape Verde                                  |
| KY   | Cayman Islands (UK)                         |
| CF   | Central African Republic                    |
| TD   | Chad                                        |
| CL   | Chile                                       |
| CN   | China                                       |
| CX   | Christmas Island                            |
| CC   | Cocos (Keeling) Islands                     |
| CO   | Colombia                                    |
| KM   | Comoros                                     |
| CG   | Congo                                       |
| CD   | Congo, Democratic Republic of the           |
| CK   | Cook Islands                                |
| CR   | Costa Rica                                  |
| CI   | Côte D'Ivoire                               |
| HR   | Croatia                                     |
| CU   | Cuba                                        |
| CW   | Curaçao                                     |
| CY   | Cyprus                                      |
| CZ   | Czech Republic                              |
| DK   | Denmark                                     |
| DJ   | Djibouti                                    |
| DM   | Dominica                                    |
| DO   | Dominican Republic                          |
| EC   | Ecuador                                     |
| EG   | Egypt                                       |
| SV   | El Salvador                                 |
| GQ   | Equatorial Guinea                           |
| ER   | Eritrea                                     |
| EE   | Estonia                                     |
| ET   | Ethiopia                                    |
| FK   | Falkland Islands                            |
| FO   | Faroe Islands                               |
| FJ   | Fiji                                        |
| FI   | Finland                                     |
| FR   | France                                      |
| GF   | French Guiana                               |
| PF   | French Polynesia                            |
| TF   | French Southern Territories                 |
| GA   | Gabon                                       |
| GM   | Gambia                                      |
| GE   | Georgia                                     |
| DE   | Germany                                     |
| GH   | Ghana                                       |
| GI   | Gibraltar                                   |
| GR   | Greece                                      |
| GL   | Greenland                                   |
| GD   | Grenada                                     |
| GP   | Guadeloupe                                  |
| GU   | Guam                                        |
| GT   | Guatemala                                   |
| GG   | Guernsey                                    |
| GN   | Guinea                                      |
| GW   | Guinea-Bissau                               |
| GY   | Guyana                                      |
| HT   | Haiti                                       |
| HM   | Heard Island and McDonald Islands           |
| VA   | Holy See (Vatican City)                     |
| HN   | Honduras                                    |
| HK   | Hong Kong                                   |
| HU   | Hungary                                     |
| IS   | Iceland                                     |
| IN   | India                                       |
| ID   | Indonesia                                   |
| IR   | Iran                                        |
| IQ   | Iraq                                        |
| IE   | Ireland                                     |
| IM   | Isle of Man                                 |
| IL   | Israel                                      |
| IT   | Italy                                       |
| JM   | Jamaica                                     |
| JP   | Japan                                       |
| JE   | Jersey                                      |
| JO   | Jordan                                      |
| KZ   | Kazakhstan                                  |
| KE   | Kenya                                       |
| KI   | Kiribati                                    |
| KP   | Korea, Democratic People's Republic (North) |
| KR   | Korea, Republic of (South)                  |
| KW   | Kuwait                                      |
| KG   | Kyrgyzstan                                  |
| LA   | Laos                                        |
| LV   | Latvia                                      |
| LB   | Lebanon                                     |
| LS   | Lesotho                                     |
| LR   | Liberia                                     |
| LY   | Libya                                       |
| LI   | Liechtenstein                               |
| LT   | Lithuania                                   |
| LU   | Luxembourg                                  |
| MO   | Macau                                       |
| MK   | Macedonia                                   |
| MG   | Madagascar                                  |
| MW   | Malawi                                      |
| MY   | Malaysia                                    |
| MV   | Maldives                                    |
| ML   | Mali                                        |
| MT   | Malta                                       |
| MH   | Marshall Islands                            |
| MQ   | Martinique (FR)                             |
| MR   | Mauritania                                  |
| MU   | Mauritius                                   |
| YT   | Mayotte (FR)                                |
| MX   | Mexico                                      |
| FM   | Micronesia, Federated States of             |
| MD   | Moldova Republic of                         |
| MC   | Monaco                                      |
| MN   | Mongolia                                    |
| ME   | Montenegro                                  |
| MS   | Montserrat                                  |
| MA   | Morocco                                     |
| MZ   | Mozambique                                  |
| MM   | Myanmar                                     |
| NA   | Namibia                                     |
| NR   | Nauru                                       |
| NP   | Nepal                                       |
| NL   | Netherlands                                 |
| NC   | New Caledonia                               |
| NZ   | New Zealand                                 |
| NI   | Nicaragua                                   |
| NE   | Niger                                       |
| NG   | Nigeria                                     |
| NU   | Niue                                        |
| NF   | Norfolk Island                              |
| MP   | Northern Mariana Islands                    |
| NO   | Norway                                      |
| OM   | Oman                                        |
| PK   | Pakistan                                    |
| PW   | Palau                                       |
| PS   | Palestinian Territories                     |
| PA   | Panama                                      |
| PG   | Papua New Guinea                            |
| PY   | Paraguay                                    |
| PE   | Peru                                        |
| PH   | Philippines                                 |
| PN   | Pitcairn Islands                            |
| PL   | Poland                                      |
| PT   | Portugal                                    |
| PR   | Puerto Rico                                 |
| QA   | Qatar                                       |
| RE   | Reunion                                     |
| RO   | Romania                                     |
| RU   | Russia                                      |
| RW   | Rwanda                                      |
| BL   | Saint Barthelemy                            |
| SH   | Saint Helena                                |
| KN   | Saint Kitts and Nevis                       |
| LC   | Saint Lucia                                 |
| MF   | Saint Martin                                |
| PM   | Saint Pierre & Miquelon                     |
| VC   | Saint Vincent and the Grenadines            |
| WS   | Samoa                                       |
| SM   | San Marino                                  |
| ST   | Sao Tome and Principe                       |
| SA   | Saudi Arabia                                |
| SN   | Senegal                                     |
| RS   | Serbia                                      |
| SC   | Seychelles                                  |
| SL   | Sierra Leone                                |
| SG   | Singapore                                   |
| SX   | Sint Maarten                                |
| SK   | Slovakia                                    |
| SI   | Slovenia                                    |
| SB   | Solomon Islands                             |
| SO   | Somalia                                     |
| ZA   | South Africa                                |
| GS   | South Georgia & South Sandwich Islands      |
| SS   | South Sudan                                 |
| ES   | Spain                                       |
| LK   | Sri Lanka                                   |
| SD   | Sudan                                       |
| SR   | Suriname                                    |
| SJ   | Svalbard and Jan Mayen                      |
| SZ   | Swaziland                                   |
| SE   | Sweden                                      |
| CH   | Switzerland                                 |
| SY   | Syria                                       |
| TW   | Taiwan                                      |
| TJ   | Tajikistan                                  |
| TZ   | Tanzania                                    |
| TH   | Thailand                                    |
| TL   | Timor-Leste                                 |
| TG   | Togo                                        |
| TK   | Tokelau                                     |
| TO   | Tonga                                       |
| TT   | Trinidad and Tobago                         |
| TN   | Tunisia                                     |
| TR   | Turkey                                      |
| TM   | Turkmenistan                                |
| TC   | Turks and Caicos Islands                    |
| TV   | Tuvalu                                      |
| UG   | Uganda                                      |
| UA   | Ukraine                                     |
| AE   | United Arab Emirates                        |
| GB   | United Kingdom                              |
| US   | United States                               |
| UM   | United States Minor Outlying Islands        |
| UY   | Uruguay                                     |
| UZ   | Uzbekistan                                  |
| VU   | Vanuatu                                     |
| VE   | Venezuela                                   |
| VN   | Vietnam                                     |
| VI   | Virgin Islands                              |
| WF   | Wallis and Futuna                           |
| EH   | Western Sahara                              |
| YE   | Yemen                                       |
| ZM   | Zambia                                      |
| ZW   | Zimbabwe                                    |

</details>


# File Processing

Understand file processing notifications and download sample templates for Excel, CSV, customs catalog, and sales report uploads.

### Processing results

After ESW processes your file, it sends a success/failure notification to the ESW Trade Compliance Team. Each notification includes the validation status for every catalog item. If a file fails validation, fix the data and resubmit the file.

### Example templates

Download sample templates for each format and publication year.

{% tabs %}
{% tab title="Excel" %}

#### **Minimum catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/8ZFtuqXo53FmG2i91en4" %}

**Publication year:** 2022

{% file src="/files/ZmbPpcAsz7Y9alLbFQeq" %}

***

#### **Full catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/XOttyC61cGaN5SmL6oTt" %}

**Publication year:** 2022

{% file src="/files/Hs9zsU1s19zHCRvoQUHa" %}

***

#### **Delta catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/wJfBRVTYyGrMju88AftN" %}

**Publication year:** 2022

{% file src="/files/Qr5MgrrhVSep7ekMV63Q" %}
{% endtab %}

{% tab title="CSV (Using Comma Delimiter)" %}

#### **Minimum catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/DFkjjbYuhqyVy2tcDXEx" %}

**Publication year:** 2022

{% file src="/files/g4cJjBUb0kjZeJtlyhJ8" %}

***

#### **Full catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/f1VQOn6fj4swamwb6hWj" %}

**Publication year:** 2022

{% file src="/files/RKTY2jdBQRsdnvZnr6bS" %}

***

#### **Delta catalog file**

**Publication year:** 2024 (latest)

{% file src="/files/PBGFHYYKK6iGPXqqnWUA" %}

**Publication year:** 2022

{% file src="/files/R53Y3BoOeTMy4kvWMaC0" %}
{% endtab %}
{% endtabs %}

### Customs catalog and sales report templates

Use these templates when uploading files in the ESW wizard during self-serve brand setup. They show the expected columns and formatting.

{% tabs %}
{% tab title="Customs catalog template" %}
{% file src="/files/3hMy3LFK5vZrgH4E3jJV" %}
{% endtab %}

{% tab title="Sales report template" %}
{% file src="/files/yW0UR9sy22rAT4BBkHMA" %}
{% endtab %}
{% endtabs %}


# Package File Integration

How to name, format, and deliver XML package files to ESW via SFTP, including required fields.

Use the Package file to send package and item data to ESW in batches. One file can contain many packages.

If you also send catalog data by SFTP, keep the naming and sequencing rules consistent across feeds.

### File naming

Use this format:

* `Package-nnn-xxxxxxxx.xml`

Where:

* `nnn`: the ESW-provided brand code.
* `xxxxxxxx`: an 8-digit, zero-padded counter starting at `00000001`.

Example: `Package-123-00000001.xml`

### Delivery (SFTP)

* Upload files to an ESW-provided SFTP folder.
* Agree the delivery schedule with ESW (hourly, daily, etc.).
* Keep the sequence increasing for each new file you send.
* Do not re-use a file name. Send a new file after fixes.

{% hint style="info" %}
ESW provides SFTP connection details (host, username, password) during onboarding.
{% endhint %}

### File format rules

* XML must be well-formed and encoded as UTF-8.
* Use a single root node: `<Packages>`.
* Include one `<Package>` node per package.
* Element names and casing must match the agreed schema.
* Omit optional elements when you have no value (preferred over sending empty tags).

After upload, ESW processes the file and returns a success/failure notification. See [File Processing](/integrations/integrations/catalog-file-integration/file-processing).

### Example XML

<details>

<summary>Show example XML</summary>

{% hint style="warning" %}
Use element names exactly as shown. XML element names are case-sensitive.
{% endhint %}

```xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Packages>
  <Package>
    <BrandCode>123</BrandCode>
    <WareHouse>DUB1</WareHouse>
    <OrderReference>ORDER-10001</OrderReference>
    <OriginalOrderReference>ORDER-10001</OriginalOrderReference>
    <PackageReference>PKG-00000001</PackageReference>
    <CarrierReference>TRACKING-123</CarrierReference>
    <IsBackOrder>false</IsBackOrder>

    <Consignee>
      <FirstName>Jane</FirstName>
      <LastName>Doe</LastName>
      <Email>jane.doe@example.com</Email>
      <Telephone>+3531234567</Telephone>
      <Address1>1 Main St</Address1>
      <City>Dublin</City>
      <PostalCode>D01 ABC2</PostalCode>
      <Country>IE</Country>
    </Consignee>

    <OrderType>CHECKOUT</OrderType>

    <ShippingInfo>
      <ShippingChargeValue>4.15</ShippingChargeValue>
      <ShippingChargeCurrency>EUR</ShippingChargeCurrency>
    </ShippingInfo>

    <Weight>
      <WeightTotal>1.2</WeightTotal>
      <WeightUnit>Kg</WeightUnit>
    </Weight>

    <Dimensions>
      <DimHeight>10</DimHeight>
      <DimLength>30</DimLength>
      <DimWidth>20</DimWidth>
      <DimMeasurementUnit>Cm</DimMeasurementUnit>
    </Dimensions>

    <GoodsDescription>Apparel</GoodsDescription>
    <ServiceLevel>POST</ServiceLevel>

    <PackageItems>
      <PackageItem>
        <ProductCode>SKU-001</ProductCode>
        <Quantity>1</Quantity>
        <ProductDescription>T-shirt</ProductDescription>
        <ProductCustomsDescription>100% cotton t-shirt</ProductCustomsDescription>
        <CountryOfOrigin>CN</CountryOfOrigin>
        <Weight>0.3</Weight>
        <WeightUnit>Kg</WeightUnit>
        <UnitPrice>25.00</UnitPrice>
        <UnitPriceCurrency>EUR</UnitPriceCurrency>
        <HsCode>610910</HsCode>
      </PackageItem>
    </PackageItems>

    <PackageStatus>NEW</PackageStatus>
  </Package>
</Packages>
```

</details>

### Field reference

{% hint style="info" %}
Some fields are required only for specific order flows (for example non-checkout orders). Confirm your exact requirements with ESW during onboarding.
{% endhint %}

<details>

<summary>Package</summary>

| Element                  | Type          | Required    | Notes                                                                               |
| ------------------------ | ------------- | ----------- | ----------------------------------------------------------------------------------- |
| `BrandCode`              | string (3)    | Yes         | ESW-provided identifier for the brand/retailer.                                     |
| `WareHouse`              | string (200)  | No          | Warehouse shipping location identifier.                                             |
| `OrderReference`         | string (30)   | Yes         | Unique order reference for the package.                                             |
| `OriginalOrderReference` | string (30)   | No          | Parent order reference for backorders or split shipments.                           |
| `PackageReference`       | string (50)   | Yes         | Unique package reference.                                                           |
| `CarrierReference`       | string (50)   | No          | Carrier tracking/reference number.                                                  |
| `IsBackOrder`            | boolean       | No          | Set `true` when this is not the first package for the order.                        |
| `Consignee`              | object        | Conditional | Optional for checkout; required for non-checkout orders.                            |
| `OrderType`              | string / enum | Yes         | Order flow identifier (for example `CHECKOUT`). Use the ESW-agreed values.          |
| `ShippingInfo`           | object        | Yes         | Shipping charge details.                                                            |
| `Weight`                 | object        | Yes         | Total package weight.                                                               |
| `Dimensions`             | object        | Yes         | Package dimensions.                                                                 |
| `GoodsDescription`       | string (100)  | Yes         | High-level description of goods.                                                    |
| `ServiceLevel`           | string / enum | Conditional | Optional for checkout; required for non-checkout orders. Use the ESW-agreed values. |
| `PackageItems`           | object        | Yes         | Container for one or more `PackageItem` nodes.                                      |
| `PackageStatus`          | string / enum | Yes         | Package status (for example `NEW`). Use the ESW-agreed values.                      |

</details>

<details>

<summary>Consignee</summary>

| Element      | Type         | Required | Notes                                       |
| ------------ | ------------ | -------- | ------------------------------------------- |
| `FirstName`  | string (70)  | Yes      | Recipient first name.                       |
| `LastName`   | string (70)  | Yes      | Recipient last name.                        |
| `Gender`     | string (6)   | No       | Recipient gender.                           |
| `Email`      | string (100) | Yes      | Recipient email address.                    |
| `Telephone`  | string (150) | Yes      | Recipient phone number.                     |
| `Unit`       | string (100) | No       | Apartment/unit/suite.                       |
| `Address1`   | string (150) | Yes      | Address line 1.                             |
| `Address2`   | string (150) | No       | Address line 2.                             |
| `Address3`   | string (150) | No       | Address line 3.                             |
| `City`       | string (100) | Yes      | City.                                       |
| `PostalCode` | string (50)  | Yes      | Postcode or ZIP.                            |
| `POBox`      | string (50)  | No       | PO box.                                     |
| `Region`     | string (150) | No       | State/province/region.                      |
| `Country`    | string (2)   | Yes      | ISO 3166-1 alpha-2 code (for example `JP`). |

</details>

<details>

<summary>ShippingInfo</summary>

| Element                  | Type       | Required | Notes                                  |
| ------------------------ | ---------- | -------- | -------------------------------------- |
| `ShippingChargeValue`    | decimal    | No       | Shipping amount (for example `4.15`).  |
| `ShippingChargeCurrency` | string (3) | No       | ISO 4217 currency (for example `EUR`). |

</details>

<details>

<summary>Weight</summary>

| Element       | Type          | Required | Notes                                                                 |
| ------------- | ------------- | -------- | --------------------------------------------------------------------- |
| `WeightTotal` | decimal       | Yes      | Total package weight.                                                 |
| `WeightUnit`  | string / enum | Yes      | Unit for `WeightTotal` (for example `Kg`). Use the ESW-agreed values. |

</details>

<details>

<summary>Dimensions</summary>

| Element              | Type          | Required | Notes                                                                    |
| -------------------- | ------------- | -------- | ------------------------------------------------------------------------ |
| `DimHeight`          | decimal       | No       | Package height.                                                          |
| `DimLength`          | decimal       | No       | Package length.                                                          |
| `DimWidth`           | decimal       | No       | Package width.                                                           |
| `DimensionalWeight`  | decimal       | No       | Dimensional weight if provided.                                          |
| `DimMeasurementUnit` | string / enum | No       | Unit for dimensions (for example `In`, `Cm`). Use the ESW-agreed values. |

</details>

<details>

<summary>PackageItem</summary>

| Element                     | Type          | Required    | Notes                                                                           |
| --------------------------- | ------------- | ----------- | ------------------------------------------------------------------------------- |
| `ProductCode`               | string (50)   | Yes         | Retailer SKU or product code.                                                   |
| `Quantity`                  | integer       | Yes         | Quantity for this `ProductCode` at the same `UnitPrice`.                        |
| `ProductDescription`        | string (150)  | Conditional | Optional for checkout; required for non-checkout orders.                        |
| `ProductCustomsDescription` | string (150)  | Conditional | Optional for checkout; required for non-checkout orders.                        |
| `CountryOfOrigin`           | string (2)    | Conditional | Optional for checkout; required for non-checkout orders. ISO 3166-1 alpha-2.    |
| `Weight`                    | decimal       | Yes         | Item weight.                                                                    |
| `WeightUnit`                | string / enum | Yes         | Unit for item `Weight` (for example `Kg`). Use the ESW-agreed values.           |
| `UnitPrice`                 | decimal       | Conditional | Optional for checkout; required for non-checkout orders. Price after discounts. |
| `UnitPriceCurrency`         | string (3)    | Conditional | Required when `UnitPrice` is present. ISO 4217 (for example `EUR`).             |
| `HsCode`                    | string (20)   | Conditional | Optional for checkout; required for non-checkout orders.                        |

</details>


# Tracking XML File Spec

Schema and delivery rules for ESW tracking outbound XML files.

Use the Tracking outbound file to receive package tracking events from ESW. ESW generates files on a schedule and drops them to SFTP.

{% hint style="info" icon="file-xml" %}

* The tracking event records will be supplied as a delta of the previous file.
* ESW will never send the same tracking event for any package more than once.
  {% endhint %}

### Delta behavior

* Each file contains only new tracking events since the previous file.
* ESW does not send the same tracking event for the same package more than once.
* Process files in sequence and persist the last processed counter.

### File naming

Use this format:

* `Tracking-nnnnnnnn-xxxxxxxx:xml`

Where:

* `nnnnnnnn:` your ESW customer number.
* `xxxxxxxx`: an 8-digit, zero-padded counter starting at `00000001`.

Example: `Tracking-1004-00000001.xml`

### Delivery (SFTP)

* ESW provides an SFTP folder for tracking outbound files.
* Agree the generation frequency with ESW (for example hourly or daily).
* Each file contains records for one brand/retailer.

{% hint style="warning" icon="memo-circle-check" %}
ESW provides SFTP connection details (host, username, password) during onboarding.
{% endhint %}

### File format rules

* XML must be well-formed and encoded as UTF-8.
* Root node: `<Tracking>`.
* The file contains one `<Header>` and one or more `<TrackingEvent>` nodes.
* Omit optional elements when you have no value (preferred over sending empty tags).

### Field reference

#### Header

<details>

<summary>Show header fields</summary>

| Element        | Type        | Required | Notes                                                                              |
| -------------- | ----------- | -------- | ---------------------------------------------------------------------------------- |
| `Version`      | string      | Yes      | File version. Always `2.05`.                                                       |
| `RecordCount`  | integer     | Yes      | Number of `<TrackingEvent>` records in the file.                                   |
| `FileDateTime` | string (16) | Yes      | File creation timestamp. Format: `YYYY-MM-DD HH:MM` (24-hour).                     |
| `TimeZone`     | string (3)  | Yes      | Timezone for `FileDateTime` (for example `UTC`).                                   |
| `FileName`     | string      | Yes      | File name including extension. Format: `Tracking-<CustomerNumber>-<Sequence>.xml`. |

</details>

#### TrackingEvent

<details>

<summary>Show TrackingEvent fields</summary>

| Element                    | Type         | Required | Notes                                                                                            |
| -------------------------- | ------------ | -------- | ------------------------------------------------------------------------------------------------ |
| `CustomerOrderReference`   | string (20)  | Yes      | Your order reference.                                                                            |
| `CustomerPackageReference` | string (20)  | No       | Your package reference.                                                                          |
| `EswOrderReference`        | string (20)  | No       | ESW order reference.                                                                             |
| `EswPackageReference`      | string (20)  | No       | ESW package reference.                                                                           |
| `EswReturnOrderReference`  | string (20)  | No       | ESW return order reference (when applicable).                                                    |
| `CarrierPackageReference`  | string (20)  | No       | Carrier tracking/reference number.                                                               |
| `EventCode`                | string (20)  | Yes      | Event code from the [Event codes](#event-codes) list.                                            |
| `EventDescription`         | string (100) | Yes      | Human-readable event description.                                                                |
| `EventDateTime`            | string (16)  | Yes      | Tracking event timestamp. Format: `YYYY-MM-DD HH:MM` (24-hour).                                  |
| `EventLocation`            | string (50)  | Yes      | Location in `Town/City, CC` format, where `CC` is ISO 3166-1 alpha-2 (for example `London, GB`). |

</details>

#### Example XML

<details>

<summary>Show example XML</summary>

```xml
<?xml version="1.0" encoding="utf-8"?>
<Tracking>
  <Header>
    <Version>2.05</Version>
    <RecordCount>2</RecordCount>
    <FileDateTime>2013-01-25 14:56</FileDateTime>
    <TimeZone>UTC</TimeZone>
    <FileName>Tracking-1004-00000001.xml</FileName>
  </Header>

  <TrackingEvent>
    <CustomerOrderReference>12345678901234567810</CustomerOrderReference>
    <CustomerPackageReference>123456789012345678</CustomerPackageReference>
    <EswOrderReference>5001000000001</EswOrderReference>
    <EswPackageReference>6001000000001</EswPackageReference>
    <EswReturnOrderReference>200100123</EswReturnOrderReference>
    <CarrierPackageReference>12345678901234567810</CarrierPackageReference>
    <EventCode>ESW0000015</EventCode>
    <EventDescription>Shipment Delivered - J.Smith</EventDescription>
    <EventDateTime>2013-01-25 14:56</EventDateTime>
    <EventLocation>London, GB</EventLocation>
  </TrackingEvent>

  <TrackingEvent>
    <CustomerOrderReference>12345678901234567811</CustomerOrderReference>
    <CustomerPackageReference>123456789012345679</CustomerPackageReference>
    <EswOrderReference>5001000000002</EswOrderReference>
    <EswPackageReference>6001000000002</EswPackageReference>
    <EswReturnOrderReference>200100124</EswReturnOrderReference>
    <CarrierPackageReference>12345678901234567811</CarrierPackageReference>
    <EventCode>ESW0000008</EventCode>
    <EventDescription>Departed Origin Country</EventDescription>
    <EventDateTime>2013-01-27 17:16</EventDateTime>
    <EventLocation>New York, US</EventLocation>
  </TrackingEvent>
</Tracking>
```

</details>

#### Event codes

The following table shows the meaning of each `EventCode` value.

<details>

<summary>Show event codes</summary>

| EventCode  | Description                                                          | Short Description                                  |
| ---------- | -------------------------------------------------------------------- | -------------------------------------------------- |
| ESW0000001 | Order pending ID details collection                                  | Pending ID Details                                 |
| ESW0000002 | ID Details received or submitted by Shopper                          | Released - consignee Information Received          |
| ESW0000003 | Shipment is on hold at origin waiting for CD\&T payment              | Pending Customs, Duty & Tax Payment                |
| ESW0000004 | Payment received or Retailer requested to release                    | Released - Payment received                        |
| ESW0000005 | Shipment left the retailer warehouse                                 | Shipped                                            |
| ESW0000006 | Shipment arrived to International forwarder at origin                | Arrived International Hub                          |
| ESW0000007 | Shipment left international forwarder and tendered to Airlines       | Departed International Hub                         |
| ESW0000008 | Shipment had departed on flight to destination country               | Departed Origin Country                            |
| ESW0000009 | Shipment arrived to the port of Destination country                  | Arrived at Transit Hub                             |
| ESW0000010 | Shipment forwarded to Destination country                            | In Transit to Destination Country                  |
| ESW0000011 | Shipment arrived to final destination country                        | Arrived Destination Country                        |
| ESW0000012 | Shipment held in customs for check and release                       | Pending customs release                            |
| ESW0000013 | Shipment customs released                                            | Customs Released                                   |
| ESW0000014 | Shipment is out for Delivery with Driver                             | Out for Delivery                                   |
| ESW0000015 | Shipment Delivered/Picked up/dropped at post box/                    | Delivered                                          |
| ESW0000016 | Delivery failed due to various reasons (address, Phone…)             | Attempted Delivery                                 |
| ESW0000017 | Shipment returned from destination country back to port of Entry     | Return to Sender                                   |
| ESW0000019 | Shipment can't be delivered due to various reasons                   | Undelivered                                        |
| ESW0000020 | Shipment on hold waiting for an action from Shopper or Shipper       | On Hold                                            |
| ESW0000021 | Operational delay, carrier fault (Misrouted, missed delivery slot…)  | Delay/Misrouted                                    |
| ESW0000022 | Delay caused by Weather, Bank Holiday, Act of God…                   | Uncontrollable Delay                               |
| ESW0000023 | Shipment sent to destination under a new tracking Ref.               | Redirected under a new reference                   |
| ESW0000024 | Shipment has been sent to a different delivery address               | Redirected to another destination                  |
| ESW0000025 | General Tracking Update                                              | General Update                                     |
| ESW0000026 | Shipment was not received at destination port or destination country | Short at Arrival                                   |
| ESW0000027 | Shipment destroyed upon shipper request                              | Destroyed                                          |
| ESW0000028 | Short Shipped                                                        | ASN Received - Package Missing                     |
| ESW0000029 | Damaged - can't be delivered                                         | Carton Arrived Damaged - Return to Vendor          |
| ESW0000030 | Damaged - forwarded under new packaging                              | Carton Arrived Damaged - Repackaged                |
| ESW0000031 | Shipment received, can be forwarded                                  | Carton Arrived OK                                  |
| ESW0000032 | Delay in Line                                                        | Carton Arrived Damaged - Repackaged                |
| ESW0000033 | Shipment Overage                                                     | Carton Arrived - no ASN                            |
| ESW0000034 | Shipment stopped                                                     | Carton Arrived - Stop Flag set                     |
| ESW0000035 | Shipment stopped                                                     | Carton Arrived - Stop - Other                      |
| ESW0000036 | Duplicate Shipment                                                   | Carton Arrived - Duplicate package                 |
| ESW0000037 | Incorrect Address                                                    | Carton Arrived - Address failure                   |
| ESW0000038 | Package has been labelled and ready for shipping                     | Package Received                                   |
| ESW0000039 | Package has been added to a Shipping Manifest                        | Shipment manifested (TMS)                          |
| ESW0000040 | Shipment was scheduled for delivery upon Customer request            | Shipment Scheduled for Delivery                    |
| ESW0000041 | In Transit                                                           | In Transit                                         |
| ESW0000042 | Pending Shopper Pickup from Office (New Update)                      | Pending Shopper Pickup from Office (New Update)    |
| ESW0000043 | Package HOLD returned from HUB                                       | Package HOLD returned from HUB                     |
| ESW0000044 | Return Order Created                                                 | Return Order Created                               |
| ESW0000045 | Return Order Arrived at RC                                           | Return Order Arrived at RC                         |
| ESW0000046 | COD Amount Collected                                                 | COD Amount Collected                               |
| ESW0000047 | COD Amount Paid to Retailer (ESW)                                    | COD Amount Paid to Retailer (ESW)                  |
| ESW0000048 | Package lost                                                         | Package lost                                       |
| ESW0000049 | Package Repacked                                                     | Package Repacked                                   |
| ESW0000050 | Handed over to third party                                           | Handed over to third party                         |
| ESW0000051 | Return Label Created                                                 | Return Label Created                               |
| ESW0000052 | Return Received by Carrier                                           | Return Received by Carrier                         |
| ESW0000053 | Return Inspected                                                     | Return Inspected                                   |
| ESW0000054 | Refund Issued                                                        | Refund Issued                                      |
| ESW0000055 | COD Amount Not Collected                                             | COD Amount Not Collected                           |
| ESW0000056 | Departed Hub                                                         | Departed Hub                                       |
| ESW0000057 | In Transit to Retailer                                               | In Transit to Retailer                             |
| ESW0000058 | Returned to Retailer                                                 | Returned to Retailer                               |
| ESW0000060 | Package Declared                                                     | Package Declared                                   |
| ESW0000099 | No Internal Mapping                                                  | No Internal Mapping                                |
| ESW0000601 | Delivered to RC                                                      | Delivered to RC                                    |
| ESW0000602 | Return not delivered to RC                                           | Return not delivered to RC                         |
| ESW0000603 | Processed in RC                                                      | Processed in RC                                    |
| ESW0000604 | Destruction by RC                                                    | Destruction by RC                                  |
| ESW0000605 | Delivered to Origin Hub                                              | Delivered to Origin Hub                            |
| ESW0000606 | Return not delivered to Origin Hub                                   | Return not delivered to Origin Hub                 |
| ESW0000607 | In Transit to Retailer                                               | In Transit to Retailer                             |
| ESW0000608 | Delivered to Retailer- Closure Event                                 | Delivered to Retailer- Closure Event               |
| ESW0000620 | Return shipment Lost - Under investigation                           | Return shipment Lost - Under investigation         |
| ESW0000621 | Return shipment Lost - Claim submitted                               | Return shipment Lost - Claim submitted             |
| ESW0005100 | Package received in hub, awaiting Customer Data file                 | Package received in hub, awaiting Data file        |
| ESW0005101 | Customer Data file received, Package not received in HUB             | Customer Data received, Package not received       |
| ESW0005102 | Delayed in fulfilment, truck delay                                   | Delayed in fulfilment, truck delay                 |
| ESW0005103 | Delayed in fulfilment, parcel not received                           | Delayed in fulfilment, parcel not received         |
| ESW0005104 | Delayed in fulfilment, ASN no package                                | Delayed in fulfilment, ASN no package              |
| ESW0005105 | Package received, awaiting Customer Data                             | Package received, awaiting Customer Data           |
| ESW0005106 | Retailer advised package will not be shipped, package not shipped    | Package not shipped - Retailer request             |
| ESW0005107 | Retailer advised package will not be shipped, data not sent          | Retailer advised package will not be shipped       |
| ESW0005108 | Label reserved, order not fulfilled                                  | Label reserved, order not fulfilled                |
| ESW0005109 | BMO not received                                                     | BMO not received                                   |
| ESW0005110 | No BMO - Retailer to Action                                          | No BMO - Retailer to Action                        |
| ESW0005200 | Package not picked up by carrier                                     | Package not picked up by carrier                   |
| ESW0005201 | Hub Exception - On Hand in Hub                                       | Hub Exception - On Hand in Hub                     |
| ESW0005203 | Printed Not Manifested - Enquiry Lodged                              | Printed Not Manifested - Enquiry Lodged            |
| ESW0005204 | Pre Export Delay                                                     | Pre Export Delay                                   |
| ESW0005205 | Pre Export Issue                                                     | Pre Export Issue                                   |
| ESW0005206 | Released not Printed                                                 | Released not Printed                               |
| ESW0005210 | Awaiting Shopper ID details                                          | Awaiting Shopper ID details                        |
| ESW0005211 | Package received, on hold due to stop flag activation                | Package received, on hold                          |
| ESW0005212 | Package received, MCO data error                                     | Package received, MCO data error                   |
| ESW0005213 | Package received, duplicate error                                    | Package received, duplicate error                  |
| ESW0005214 | Package recevied, address error                                      | Package recevied, address error                    |
| ESW0005215 | Processing delay in HUB                                              | Processing delay in HUB                            |
| ESW0005216 | Package recevied, address error                                      | Package recevied, address error                    |
| ESW0005217 | Awaiting Shopper ID details                                          | Awaiting Shopper ID details                        |
| ESW0005218 | Package received, duplicate error                                    | Package received, duplicate error                  |
| ESW0005219 | Carrier label applied, not manifested to Carrier                     | Carrier label applied, not manifested to Carrier   |
| ESW0005220 | Package manifested, scan to pallet event missing                     | Package manifested, scan to pallet event missing   |
| ESW0005221 | Error - DG flag in ASN, no DG packaging                              | Error - DG flag in ASN, no DG packaging            |
| ESW0005222 | Error - DG packaging, no DG flag in ASN                              | Error - DG packaging, no DG flag in ASN            |
| ESW0005223 | Error - DG in ASN, country not in scope                              | Error - DG in ASN, country not in scope            |
| ESW0005224 | Package not received from hub                                        | Package not received from hub                      |
| ESW0005225 | Package received, missing data                                       | Package received, missing data                     |
| ESW0005226 | Package on hold in HUB                                               | Package on hold in HUB                             |
| ESW0005227 | Package will not ship, military address prohibited                   | Package will not ship, military address prohibited |
| ESW0005228 | Error - No DG Declaration                                            | Error - No DG Declaration                          |
| ESW0005229 | Error - quantity issue                                               | Error - quantity issue                             |
| ESW0005230 | HUB Exception - for Return to Sender                                 | HUB Exception - for Return to Sender               |
| ESW0005231 | HUB Exception - for Return to Sender - No ID details                 | HUB Exception - Return to Sender - No ID details   |
| ESW0005232 | HUB Exception - for Return to Sender - Cannot ship                   | HUB Exception - for Return to Sender - Cannot ship |
| ESW0005233 | HUB Exception - for Return to Sender - Military address              | HUB Exception - Return to Sender-Military address  |
| ESW0005234 | HUB Exception - for Return to Sender - quantity issue                | HUB Exception - Return to Sender - quantity issue  |
| ESW0005235 | HUB Exception - for Return to Sender - DG packaging issue            | Return to Sender - DG packaging issue              |
| ESW0005236 | HUB Exception - for Return to Sender - DG ASN issue                  | HUB Exception - Return to Sender - DG ASN issue    |
| ESW0005237 | HUB Exception - for Return to Sender - Country not in scope DG       | Return to Sender - Country not in scope DG         |
| ESW0005238 | HUB Exception - for Return to Sender - ID issue                      | HUB Exception - for Return to Sender - ID issue    |
| ESW0005239 | HUB Exception - for Return to Sender - general return                | HUB Exception - Return to Sender - general return  |
| ESW0005240 | HUB Exception - for Return to Sender - Military address              | HUB Exception - Return to Sender-Military address  |
| ESW0005241 | HUB Exception - for Return to Sender - quantity issue                | HUB Exception - Return to Sender - quantity issue  |
| ESW0005242 | Fraud stop, returned to retailer                                     | Fraud stop, returned to retailer                   |
| ESW0005243 | MITI – Fraud Order                                                   | MITI – Fraud Order                                 |
| ESW0005301 | In Transit - Flight departed                                         | In Transit - Flight departed                       |
| ESW0005302 | In Transit - Flight arrived                                          | In Transit - Flight arrived                        |
| ESW0005303 | Transit Delay - Technical issue, 1 day delay                         | Transit Delay - Technical issue, 1 day delay       |
| ESW0005304 | Transit Delay - Technical issue, 2 day delay                         | Transit Delay - Technical issue, 2 day delay       |
| ESW0005305 | Transit Delay - Weather related issue, 1 day delay                   | Transit Delay - Weather related issue, 1 day delay |
| ESW0005306 | Transit Delay - Weather related issue, 2 day delay                   | Transit Delay - Weather related issue, 2 day delay |
| ESW0005307 | Transit Delay - Capacity issue, 1 day delay                          | Transit Delay - Capacity issue, 1 day delay        |
| ESW0005308 | Transit Delay - Capacity issue, 2 day delay                          | Transit Delay - Capacity issue, 2 day delay        |
| ESW0005309 | Transit Delay - Ground transport delay                               | Transit Delay - Ground transport delay             |
| ESW0005310 | Transit Delay - ESW Data Issue                                       | Transit Delay - ESW Data Issue                     |
| ESW0005311 | MITI – Retailer Data Issue                                           | MITI – Retailer Data Issue                         |
| ESW0005401 | Transit Delay - Confiscated by Customs                               | Transit Delay - Confiscated by Customs             |
| ESW0005402 | Transit Delay - Awaiting Customs clearance                           | Transit Delay - Awaiting Customs clearance         |
| ESW0005403 | Transit Delay - Customs checks                                       | Transit Delay - Customs checks                     |
| ESW0005404 | Transit Delay - Customs enquiry                                      | Transit Delay - Customs enquiry                    |
| ESW0005405 | Transit Delay - Shopper to supply information                        | Transit Delay - Shopper to supply information      |
| ESW0005406 | Transit Delay - Commercial Invoice required                          | Transit Delay - Commercial Invoice required        |
| ESW0005407 | Transit Delay - D\&T not paid                                        | Transit Delay - D\&T not paid                      |
| ESW0005408 | Transit Delay - Cannot contact shopper                               | Transit Delay - Cannot contact shopper             |
| ESW0005409 | Transit Delay - Pending Shopper ID                                   | Transit Delay - Pending Shopper ID                 |
| ESW0005410 | Transit Delay - Customs delay, expect 1 day delay                    | Transit Delay - Customs delay, expect 1 day delay  |
| ESW0005411 | Transit Delay - Customs delay, expect 2 day delay                    | Transit Delay - Customs delay, expect 2 day delay  |
| ESW0005412 | Transit Delay - Missing data for processing                          | Transit Delay - Missing data for processing        |
| ESW0005413 | Transit Delay - Formal Clearance required                            | Transit Delay - Formal Clearance required          |
| ESW0005414 | Transit Delay - Customs processing delay, Flight delay impact        | Customs processing delay, Flight delay impact      |
| ESW0005415 | Transit Delay - Customs processing delay, COVID19 related delay      | Customs processing delay, COVID19 related Delay    |
| ESW0005416 | Transit Delay - Customs processing delay, COVID19 related delay      | Customs processing delay, COVID19 related Delay    |
| ESW0005417 | Transit Delay - Not injected in last mile                            | Transit Delay - Not injected in last mile          |
| ESW0005418 | LM Update - Customs Clearance confirmed                              | LM Update - Customs Clearance confirmed            |
| ESW0005419 | LM Update - Injected to network confirmed                            | LM Update - Injected to network confirmed          |
| ESW0005501 | Transit delay - Under investigation, delayed                         | Transit delay - Under investigation, delayed       |
| ESW0005502 | Transit delay - Under investigation, transit delay                   | Transit delay - Under investigation, transit delay |
| ESW0005503 | Mistroute - Package misrouted, under investigation                   | Mistroute - Package misrouted, under investigation |
| ESW0005504 | With Third-Party                                                     | With Third-Party                                   |
| ESW0005505 | Transit delay - Carrier Investigation ongoing                        | Transit delay - Carrier Investigation ongoing      |
| ESW0005506 | Delivered - NO POD or Third Party                                    | Delivered - NO POD or Third Party                  |
| ESW0005507 | Attempted Delivery                                                   | Attempted Delivery                                 |
| ESW0005508 | With Delivery Partner for delivery                                   | With Delivery Partner for delivery                 |
| ESW0005509 | In Transit - Data issue                                              | In Transit - Data issue                            |
| ESW0005510 | Transit Delay - flight-related, expect 1 day delay                   | Transit Delay - flight-related, expect 1 day delay |
| ESW0005511 | Transit Delay - flight-related, expect 2 day delay                   | Transit Delay - flight-related, expect 2 day delay |
| ESW0005512 | With Delivery Partner for delivery                                   | With Delivery Partner for delivery                 |
| ESW0005513 | Transit Issue - Manifested but not received                          | Transit Issue - Manifested but not received        |
| ESW0005514 | Transit Delay - flight delay impacting delivery                      | Transit Delay - flight delay impacting delivery    |
| ESW0005515 | Transit delay - Under investigation                                  | Transit delay - Under investigation                |
| ESW0005516 | CTS General Update                                                   | CTS General Update                                 |
| ESW0005517 | Lost Package - Under investigation                                   | Lost Package - Under investigation                 |
| ESW0005518 | Lost Package - Claim process opened with Carrier                     | Lost Package - Claim process opened with Carrier   |
| ESW0005519 | MITI Final mile address issue                                        | Final mile address issue                           |
| ESW0005520 | Package at risk                                                      | Final Mile Package at risk                         |
| ESW0005521 | MITI Last Mile - Major weather disruption                            | Final Mile - Major weather disruption              |
| ESW0005522 | MIT Last Mile - Uncontrollable Delay                                 | Final Mile - Uncontrollable Delay                  |
| ESW0005523 | MITI Flight Delay - Covid19 Related                                  | Flight Delay - Covid19 Related                     |
| ESW0005524 | MITI Pending COD payment                                             | MITI Pending COD payment                           |
| ESW0005525 | Package Undeliverable - Returns Initiated                            | Package Undeliverable - Returns Initiated          |
| ESW0005X01 | General transit delay, delivery delay unknown                        | General transit delay, delivery delay unknown      |
| ESW0005X02 | Transit Delay Email - up to 3 day delay                              | Transit Delay Email - up to 3 day delay            |
| ESW0005X03 | Transit Delay Email - up to 5 day delay                              | Transit Delay Email - up to 5 day delay            |
| ESW0005X04 | Transit Delay Email - up to 8 day delay                              | Transit Delay Email - up to 8 day delay            |
| ESW0005X05 | Transit Delay Email - up to 10 day delay                             | Transit Delay Email - up to 10 day delay           |
| ESW0008000 | ESW CS Service Now Ticket Received- Enquiry Lodged                   | ESW CS Service Now Ticket Received- Enquiry Lodged |

</details>


# Light Touch Integration

Connect your storefront to ESW services with minimal implementation effort.

{% hint style="success" icon="memo-circle-info" %}

## Technical Details

See [Light Touch Integration](/light-touch-integration) (LTI) documentation for technical details.
{% endhint %}

ESW Light Touch Integration (LTI) connects your storefront to ESW services with minimal effort. It reduces the work required for flows such as PreOrder and Order Confirmation webhooks.

{% hint style="info" icon="store" %}
ESW Light Touch Integration supports different features by platform. All supported platforms include **Country Selector**, **Dynamic Pricing**, and **Returns Integration**.
{% endhint %}

BigCommerce, WooCommerce, and Commerce Tools support checkout and order status synchronization. Web Platform supports fixed pricing. Callback API supports every feature, including fixed pricing, checkout, and order status synchronization.

Use the feature pages below for implementation details.

<table data-full-width="false"><thead><tr><th width="147"></th><th width="103" align="center">Country Selector</th><th width="108" align="center" valign="middle">Dynamic Pricing</th><th width="100" align="center">Fixed Pricing</th><th width="91" align="center">Checkout</th><th width="113" align="center">Returns Integration</th><th align="center">Order Status Sync</th></tr></thead><tbody><tr><td><strong>BigCommerce</strong></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center" valign="middle"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/cross-32px.png" alt="Cross Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td></tr><tr><td><strong>WooCommerce</strong></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center" valign="middle"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/cross-32px.png" alt="Cross Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td></tr><tr><td><strong>Commerce Tools</strong></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center" valign="middle"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/cross-32px.png" alt="Cross Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td></tr><tr><td><strong>Web Platform</strong></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center" valign="middle"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/cross-32px.png" alt="Cross Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/cross-32px.png" alt="Cross Mark" data-size="line"></td></tr><tr><td><strong>Custom (Callback API)</strong></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center" valign="middle"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td><td align="center"><img src="https://pf-emoji-service.prod-east.frontend.public.atl-paas.net/assets/atlassian/productivityEmojis/check-32px.png" alt="Check Mark" data-size="line"></td></tr></tbody></table>


# Embedded Checkout

Keep shoppers on your storefront with ESW iFrame Checkout and Light Touch Integration features for localization, payments, and consent.

Embedded Checkout allows shoppers to complete their purchases directly within your storefront using an iFrame provided by ESW. This feature enhances the shopping experience by keeping the entire checkout process on the retailer’s site, thereby increasing shopper trust and confidence.

Light Touch Integration (LTI) is a simple way to connect an eCommerce storefront with ESW using a JavaScript widget. It is easy to set up with scripts and helps create a smooth shopping experience for customers.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref">Target</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td><strong>Country &#x26; Currency Selector</strong><br>Adjusts store settings based on the shopper’s location and currency.</td><td></td><td><a href="/files/NZ6ut502fUclyC5umZeT">/files/NZ6ut502fUclyC5umZeT</a></td><td><a href="/files/urNjaLur0ul6jH0dyWhf">/files/urNjaLur0ul6jH0dyWhf</a></td><td><a href="/files/rl81lIU4IzM94CVbDwLL">/files/rl81lIU4IzM94CVbDwLL</a></td><td><a href="/files/rl81lIU4IzM94CVbDwLL">/files/rl81lIU4IzM94CVbDwLL</a></td><td><a href="/files/rl81lIU4IzM94CVbDwLL">/files/rl81lIU4IzM94CVbDwLL</a></td><td><a href="/files/rl81lIU4IzM94CVbDwLL">/files/rl81lIU4IzM94CVbDwLL</a></td></tr><tr><td><strong>Pricing Conversion</strong><br>Displays accurate prices in the shopper’s local currency.</td><td></td><td><a href="/files/s4SN62Qd7QzuPUZlSksG">/files/s4SN62Qd7QzuPUZlSksG</a></td><td><a href="/files/BUxHyHPvrPzE5f5e6viI">/files/BUxHyHPvrPzE5f5e6viI</a></td><td></td><td><a href="/files/9Ix0swCu3Fw7cnE4VXxN">/files/9Ix0swCu3Fw7cnE4VXxN</a></td><td><a href="/files/9Ix0swCu3Fw7cnE4VXxN">/files/9Ix0swCu3Fw7cnE4VXxN</a></td><td><a href="/files/9Ix0swCu3Fw7cnE4VXxN">/files/9Ix0swCu3Fw7cnE4VXxN</a></td></tr><tr><td><strong>ESW iFrame Checkout</strong><br>Lets shoppers check out directly on the storefront without redirection.</td><td></td><td><a href="/files/XCzeUsZZ5xMCqiOK8gzc">/files/XCzeUsZZ5xMCqiOK8gzc</a></td><td><a href="/files/jfF0496z0rzXBJidjZ0b">/files/jfF0496z0rzXBJidjZ0b</a></td><td></td><td></td><td></td><td><a href="/files/3MBubEJJZmNSZKxvVECM">/files/3MBubEJJZmNSZKxvVECM</a></td></tr><tr><td><strong>Express Payments</strong><br>Supports payment methods such as PayPal, Apple Pay, and Google Pay.</td><td></td><td><a href="/files/gMYsvBEHgaaDHKZgKM4r">/files/gMYsvBEHgaaDHKZgKM4r</a></td><td><a href="/files/pS0TSpsO2gxd3b4Q0X7Q">/files/pS0TSpsO2gxd3b4Q0X7Q</a></td><td></td><td></td><td></td><td><a href="/files/kjbJbJR7abG5u3N5s4SG">/files/kjbJbJR7abG5u3N5s4SG</a></td></tr><tr><td><strong>Cookie Consent</strong><br>Manages shopper consent for cookies to support privacy compliance.</td><td></td><td><a href="/files/M5wiaw4wIMU3xS9ksqkA">/files/M5wiaw4wIMU3xS9ksqkA</a></td><td><a href="/files/RgGGoBpG8B8wKOVeoPFM">/files/RgGGoBpG8B8wKOVeoPFM</a></td><td></td><td></td><td></td><td><a href="/files/TfyiylYsmQ3yg88FFAfY">/files/TfyiylYsmQ3yg88FFAfY</a></td></tr></tbody></table>

When used with the Magento plugin, LTI makes it easier for anyone with custom frontends to integrate Magento as a backend. This combination provides a simple and efficient solution for creating a seamless shopping experience.

#### Technical Details <a href="#technical-details" id="technical-details"></a>

The integration of Magento with LTI provides flexibility, supporting various levels of implementation based on specific requirements:

* Full Frontend Integration: Incorporates complete features such as pricing conversion, delivering a seamless and localized shopping experience for customers.
* Partial Integration: Enables the addition of specific functionalities, such as the ESW checkout process using an iFrame, without altering the entire frontend.

This flexibility allows you to select the necessary components and customize the integration to align with business requirements.


# Direct Integration

Embed ESW Checkout in a dedicated storefront iframe using event-based communication, PreOrder URLs, and domain masking.

* The retailer needs to embed an iframe on a dedicated page (e.g., /checkout). This iframe will host the checkout experience.
* Script Injection: A script must be injected into the \<head> section of the retailer’s page. This script, hosted on a CDN, facilitates communication between the retailer’s site and the checkout iframe.

### Event-based Communication

* The script listens for events like iframe-ready and iframe-height-update, ensuring dynamic height adjustments.
* The retailer needs to handle build-checkout and begin-checkout events to fetch and assign the checkout URL to the iframe.
* Pre-order URL Handling: Before rendering the iframe, the retailer must generate a pre-order URL by calling the checkout API and then pass this URL via an event.

### Domain Masking Requirement

{% hint style="info" icon="globe-pointer" %}
See [Domain Masking Configuration](/checkout-api/checkout-api/domain-masking)
{% endhint %}

* The iframe must have the same domain as the retailer’s site to meet security and compliance standards.
* X-Frame options and security headers need to be configured to prevent clickjacking.
* A domain masking solution using TLS and CDN certificates ensures seamless integration.
* Generic Public Script: A script hosted on the retailer’s CDN will be available for all tenants. This script simplifies the integration process by automatically handling iframe rendering and event communication.

***

### Steps

#### 1. Set Up the Dedicated Checkout Page <a href="#id-1.-set-up-the-dedicated-checkout-page" id="id-1.-set-up-the-dedicated-checkout-page"></a>

* The checkout should be a separate page (e.g., /checkout).
* The entire page should be occupied by the checkout iframe.

#### 2. Inject the Required Script <a href="#id-2.-inject-the-required-script" id="id-2.-inject-the-required-script"></a>

* The CDN-hosted script is responsible for rendering the checkout iframe.
* Include the script in the \<head> of the checkout page.

#### 3. Generate the Pre-Order URL <a href="#id-3.-generate-the-pre-order-url" id="id-3.-generate-the-pre-order-url"></a>

Before the checkout iframe is rendered, the retailer must:

1. Call the checkout API to generate a pre-order URL.
2. Send a "build checkout" event with the URL.

#### 4. Render the Checkout Iframe <a href="#id-4.-render-the-checkout-iframe" id="id-4.-render-the-checkout-iframe"></a>

Once the pre-order URL is obtained, trigger the event to embed the iframe.

#### 5. Handle Events for Iframe Communication <a href="#id-5.-handle-events-for-iframe-communication" id="id-5.-handle-events-for-iframe-communication"></a>

The embedded checkout script sends events to the retailer’s page.

### Events to Handle: <a href="#events-to-handle" id="events-to-handle"></a>

* build-checkout: an event that needs to be emitted from the retailer's storefront to bootstrap checkout embedding. This event requires the checkout URL to be sent and set as iframe data.
* iframe-ready : an event emitted by the script once the iframe is loaded. It notifies child iframes about the storefront’s origin, which should be used for secure communication.
* esw-navigate-outside: an event emitted by the checkout in case external navigation needs to be done. Contains an external URL that the storefront should navigate to.
* Other communication events, from checkout itself or payment panel as an inner iframe, are captured and proxied by script back to their consumers as contentWindow so it keeps the existing communication mechanism.
* esw-update-iframe-height: an event to notify the size of the iframe height to avoid the use of scroll bars.
* esw-scroll-to-error: an event to notify the origin that the view should be scrolled. It triggers once the checkout form contains invalid controls. It accepts ScrollToOptions that defines top and left dimensions.

### iFrame Communication Script <a href="#iframe-communication-script" id="iframe-communication-script"></a>

* The iframe sends events (iframe-ready, esw-update-iframe-height, navigate-outside) to the parent page.
* The parent page listens and responds (e.g., adjusting iframe height, redirecting users).
* The iframe-communication.js script ensures seamless interaction.

`<script src="/scripts/iframe-communication.js"></script>` indicates that a separate script handles communication between the iframe and the parent page.

### Security & Domain Masking Setup <a href="#security-and-domain-masking-setup" id="security-and-domain-masking-setup"></a>

#### Why This Matters <a href="#why-this-matters" id="why-this-matters"></a>

* The iframe must have the same domain as the parent page (or use domain masking).
* Proper security headers protect against clickjacking and unauthorized embedding.

### Steps for Domain Masking <a href="#steps-for-domain-masking" id="steps-for-domain-masking"></a>

{% hint style="success" icon="globe-pointer" %}
For more information, refer to [Domain Masking Configuration](/checkout-api/checkout-api/domain-masking)
{% endhint %}

1. Obtain a TLS Certificate for checkout.retailer.com.
2. Configure a CNAME Record e.g., checkout.retailer.com → checkout-service.provider.net
3. Ensure API endpoints match the retailer’s domain:

{% hint style="info" %}
e.g., `https://checkout.retailer.com/api/checkout`
{% endhint %}

4. Update security headers


# iFrame Integration

{% hint style="danger" %}

#### Managed Process

Integration is implemented by ESW.
{% endhint %}

{% tabs %}
{% tab title="Tutorial" %}
{% embed url="<https://demo.esw.com/share/cpiokf33wsdf>" fullWidth="false" %}
{% endtab %}
{% endtabs %}


# Coming Soon

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


# Model Context Protocol (MCP)

Connect AI clients to the ESW MCP server, configure OAuth or service tokens, and use approved ESW knowledge tools.

The ESW Model Context Protocol server provides retrieval tools against the sanctioned ESW documentation corpus, allowing assistants to ground their responses in approved material

## Connect to the ESW MCP <a href="#connect-to-the-esw-mcp" id="connect-to-the-esw-mcp"></a>

### Cursor <a href="#cursor" id="cursor"></a>

<a href="https://cursor//anysphere.cursor-deeplink/mcp/install?name=esw&#x26;config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AuZXN3LmNvbS9tY3AifQ%3D%3D" class="button secondary">Install in Cursor</a>

Open Cursor <i class="fa-cursor">:cursor:</i> and click install. Alternatively, add the following to your `~/.cursor/mcp.json` file.&#x20;

{% embed url="<https://cursor.com/docs>" %}
Refer to Cursor docs for more info
{% endembed %}

{% code expandable="true" %}

```json
{
  "mcpServers": {"esw": {
      "url": "https://mcp.esw.com/mcp"
    }
  }
}
```

{% endcode %}

### VS Code <a href="#vs-code" id="vs-code"></a>

<a href="https://vscode.dev/redirect/mcp/install?name=esw&#x26;config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.esw.com%2Fmcp%22%7D" class="button secondary">Install in VS Code</a>

Open VS Code <i class="fa-vscode">:vscode:</i> and click Install. Alternatively, add the following to your `.vscode/mcp.json` file in your workspace. Refer to [VS Code docs](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for more information.

{% code expandable="true" %}

```json
{
  "servers": {"esw": {
      "type": "http",
      "url": "https://mcp.esw.com/mcp"
    }
  }
}
```

{% endcode %}

### Claude Code <a href="#claude-code" id="claude-code"></a>

To add MCP to Claude Code, run the following command.

{% code expandable="true" %}

```bash
claude mcp add --transport http esw https://mcp.esw.com/mcp
```

{% endcode %}

{% embed url="<https://code.claude.com/docs/en/mcp#configure-mcp-servers>" %}
Refer to Claude Code docs for more info
{% endembed %}

### ChatGPT <a href="#chatgpt" id="chatgpt"></a>

You can enable MCP servers on ChatGPT <i class="fa-chatgpt">:chatgpt:</i> if you have a Pro, Plus, Business, Enterprise, or Education account. Follow the [OpenAI documentation](https://platform.openai.com/docs/guides/developer-mode) for instructions. Use the following parameters when setting up your custom connector:

* The server URL is `https://mcp.esw.com/mcp`.
* Use `OAuth` as the connection mechanism.

The ESW MCP server also works with OpenAI’s Responses API when building autonomous agents or calling tools through custom runtimes.

{% embed url="<https://developers.openai.com/api/docs/guides/developer-mode>" %}

### Other <a href="#other" id="other"></a>

MCP is an open protocol supported by many clients. Consult your client’s documentation for connection guidance. Use the server URL `https://mcp.esw.com/mcp` and OAuth whenever possible. If your client cannot perform OAuth, request a service API key from the ESW MCP team and pass it in the `Authorization` header as a bearer token:

{% code expandable="true" %}

```json
"esw": {
  "url": "https://mcp.esw.com/mcp",
  "headers": {
    "Authorization": "Bearer <<YOUR_SERVICE_TOKEN>>"
  }
}
```

{% endcode %}

***

## OAuth <a href="#oauth" id="oauth"></a>

The ESW MCP server supports OAuth 2.1 with PKCE, optional Dynamic Client Registration, and API key authentication for service accounts. Most clients use the authorization code + PKCE grant to request scopes, while automated systems can register dynamically at `https://mcp.esw.com/register` or supply an administrator-issued API key. Choose OAuth for human-driven sessions, Dynamic Client Registration for self-service client onboarding, and API keys for tightly scoped automation.

## Autonomous Agents <a href="#autonomous-agents" id="autonomous-agents"></a>

If you’re building agentic software or integrating with orchestration frameworks, you can pass a service token or restricted API key as a bearer token to the MCP server.

{% code expandable="true" %}

```json
curl https://mcp.esw.com/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <<YOUR_SERVICE_TOKEN>>" \
  -d '{
      "jsonrpc": "2.0",
      "method": "tools/call",
      "params": {
        "name": "kb_search",
        "arguments": {"query": "reset VPN token", "top_k": 3}
      },
      "id": 1
  }'
```

{% endcode %}

## Tools <a href="#tools" id="tools"></a>

The server exposes the following [MCP tools](https://modelcontextprotocol.io/docs/concepts/tools). Enable operator confirmation inside your MCP client, and be cautious when chaining this server with others to avoid prompt-injection attacks. To request additional tools, email <ai-support@esw.com>

| Resource           | Tool       | Data source / API                        |
| ------------------ | ---------- | ---------------------------------------- |
| ESW Knowledge Base | kb\_search | Internal ESW knowledge base search index |

Each tool returns a structured payload containing the normalized query, result count, and an array of documents with page titles, URLs, content snippets, and relevance scores.

***

{% embed url="<https://modelcontextprotocol.io/specification/2025-11-25>" %}

Contact the [ESW MCP team](mailto:ai-support@esw.com)


# Microsoft Copilot Integration Guide

Set up agent-led commerce, manage catalogs, and resolve common issues.

Use this guide to enable agentic commerce through ESW. Shoppers can buy directly in AI experiences such as Microsoft Copilot, Google Gemini, and Shopify-powered storefronts.

ESW enables your products to appear where shoppers already ask for help: AI agents such as Microsoft Copilot and Google Gemini. You deliver product discovery, checkout, and order completion through ESW checkout services, so shoppers can move from intent to purchase with fewer steps.

Contact your ESW CSM to enable ESW Agentic Commerce for your brand.

UCP gives AI platforms a clear, standard way to work with your commerce services. Use it to let agents:

* Discover your products in Microsoft and Google shopping surfaces
* Retrieve accurate product details, price, and availability
* Create checkout sessions through ESW
* Complete purchases and return clear order outcomes

{% hint style="info" %}
ESW supports the `Jan 23, 2026 UCP specification` and uses this guide to anchor your implementation with more versions coming soon.
{% endhint %}


# UCP profile setup

Configure the UCP profile for agent-led ESW checkout.

Enable your UCP profile so Microsoft Copilot, Google Gemini, and Shopify assistants can find products. Agents route qualified shoppers into ESW checkout.

ESW pushes catalog changes to Microsoft Merchant Center. This avoids relying on site crawling for accurate discovery results.

Microsoft Merchant Center creates searchable indexes from your product data. Agents check relevance, price, and availability before creating checkout sessions.

### Host the UCP profile

Your UCP profile is also called the UCP well-known file. Host the manifest JSON on your domain. It tells agents which commerce actions your brand supports. It also connects agents to the ESW checkout API.

The January 23, 2026 UCP specification supports these checkout session actions:

* Create
* Update
* Retrieve and cancel

ESW completes the order and returns the order number and status. The standard post-purchase journey continues through confirmation emails, fulfilment, customer service, tracking, and returns.

### Example UCP well-known file

{% code expandable="true" %}

```json
{
  "ucp": {
    "version": "2026-01-23",
    "services": {
      "dev.ucp.shopping": [
        {
          "version": "2026-01-23",
          "spec": "https://ucp.dev/specification/overview",
          "transport": "rest",
          "endpoint": "https://checkout-acp-api.test.eshopworld.net/UCP/QAUQAU",
          "schema": "https://ucp.dev/2026-01-23/services/shopping/openapi.json"
        }
      ]
    },
    "capabilities": {
      "dev.ucp.shopping.checkout": [
        {
          "version": "2026-01-23",
          "spec": "https://ucp.dev/specification/checkout",
          "schema": "https://ucp.dev/2026-01-23/schemas/shopping/checkout.json",
          "extends": null,
          "config": null
        }
      ],
      "dev.ucp.shopping.fulfillment": [
        {
          "version": "2026-01-23",
          "spec": "https://ucp.dev/specification/fulfillment",
          "schema": "https://ucp.dev/2026-01-23/schemas/shopping/fulfillment.json",
          "extends": "dev.ucp.shopping.checkout",
          "config": null
        }
      ]
    },
    "payment_handlers": {
      "com.adyen": [
        {
          "id": "adyen-card-tokenization",
          "version": "2026-01-23",
          "spec": "https://ucp.dev/specification/payment-handler-guide",
          "config_schema": "https://ucp.dev/2026-01-23/handlers/tokenization/openapi.json",
          "instrument_schemas": [
            "https://ucp.dev/2026-01-23/handlers/tokenization/schemas/card_instrument.json"
          ],
          "config": {
            "environment": "test",
            "public_merchant_id": "e8b29c2e-dd09-48f3-949e-f63fbb416041"
          }
        }
      ]
    }
  },
  "signing_keys": [
    {
      "kid": "ucpgo_2025",
      "kty": "EC",
      "crv": "P-256",
      "x": "WbbXwVYGdJoP4Xm3qCkGvBRcRvKtEfXDbWvPzpPS8LA",
      "y": "sP4jHHxYqC89HBo8TjrtVOAGHfJDflYxw7MFMxuFMPY",
      "use": "sig",
      "alg": "ES256"
    }
  ]
}
```

{% endcode %}


# Merchant Center and catalog preparation

Prepare catalog data for AI shopping discovery.

### Microsoft Merchant Center access

For brands without a Microsoft Merchant Center account, ESW operates the account and creates the store. ESW sends enriched product data to Microsoft Copilot shopping discovery in the United States.

Support for existing Microsoft Merchant Center accounts is planned. Google Merchant Center support is also planned. Prepare your catalog now for both surfaces.

### Provide the product catalog

Provide one CSV catalog so ESW can prepare products for agent-led discovery and checkout. Include every required field.

Add recommended fields where available:

* Selling points and key features
* Category, material, and intended use
* Product attributes that explain buyer suitability

### Ingestion and enrichment

ESW enriches your catalog for AI agents. Clear selling points and features help agents understand product value.

ESW combines these fields with product titles, categories, intended use, materials, and intended users. The resulting descriptions help agents recommend appropriate products.

Describe the shopper need clearly. For example, state whether a product suits running, travel, gaming, office work, or children.

### Enhanced data distribution

ESW sends enriched catalogs to the relevant merchant center, starting with Microsoft Merchant Center. Provide one catalog per market. Each catalog should contain the correct language, pricing, availability, and selling points.

Multi-market discovery across ESW-operated markets is planned for `Q4 2026`. You can apply unique selling points and key features to each market file.


# Manage catalog uploads (SFTP)

Upload and maintain market-specific product catalogs through SFTP.

Send catalog files to ESW through SFTP. Use one file per market whenever prices or availability change.

### Upload cadence

* Send an initial full catalog with every active, in-stock product.
* Upload a new file for price, availability, or attribute changes.
* Upload a full catalog at least monthly.

Set `availability` to `out_of_stock` to remove a product. A file can contain new products, updates, and removals.

Allow up to 72 hours after the first successful upload for Microsoft validation. ESW monitors validation and resolves blockers to product visibility.

### SFTP location

Upload files to:

```hurl
https://eshopworld3.files.com/files/Development/Core/Retailers/<BRANDCODE>RetailersFTP/<ENV>/ProductFeed/Pending
```

* `<BRANDCODE>` is your agreed brand code.
* `<ENV>` is the target environment, such as `TEST` or `PROD`.

Example:

```hurl
https://eshopworld3.files.com/files/Development/Core/Retailers/PGLRetailersFTP/TEST/ProductFeed/Pending
```

### File naming

Use this filename format:

```csv
{catalogFileName}-{countryIso3166Alpha2}.csv
```

### Preserve product IDs in Excel

Excel can convert long values into scientific notation. This can corrupt GTINs, product IDs, and MPNs.

1. Format every ID column as **Text** before entering values.
2. Import CSV files with **Data → From Text/CSV**.
3. Set the GTIN column type to **Text** before loading.

Before upload, confirm that each ID is complete. For example, use `5063589815347`, not `1.24504323E+12`.

Open the CSV as a `.txt` file in Notepad to verify IDs. Reformatting a converted Excel cell does not restore its original value. Correct the source data and export again.


# Product catalog specification

Field requirements for product catalog CSV files.

Use this specification when preparing catalog files.&#x20;

{% file src="/files/QVnFPRNw0s9iePaHdqJv" %}

### Core fields

| Field                | Requirement | Description and example                                                                                    |
| -------------------- | ----------- | ---------------------------------------------------------------------------------------------------------- |
| `productId`          | Required    | Unique retailer product ID or SKU. Maximum 50 characters. Example: `SKU-12345`.                            |
| `marketCountryIso`   | Optional    | Two-letter ISO 3166-1 market code. Required on every row for multi-country files. Example: `GB`.           |
| `title`              | Required    | Product title. Example: `Men’s Cotton Oxford Shirt`.                                                       |
| `brand`              | Optional    | Manufacturer, brand, or publisher. Maximum 70 characters and 10 words. Defaults to retailer brand.         |
| `mpn`                | Optional    | Manufacturer Part Number. Up to 70 alphanumeric characters.                                                |
| `gtin`               | Recommended | Barcode, GTIN, UPC, EAN, or ISBN. Numeric, up to 14 digits per value. Separate up to 10 values with pipes. |
| `description`        | Required    | No HTML or promotional text. Maximum 10,000 characters. Include size, colour, and pattern where relevant.  |
| `material`           | Optional    | Material composition. Required unless the item is a digital good. Example: `100% Cotton`.                  |
| `countryOfOriginIso` | Required    | Two-letter ISO 3166-1 manufacturing country code.                                                          |
| `availability`       | Required    | One of: `preorder`, `out_of_stock`, `in_stock`, or `backorder`.                                            |
| `condition`          | Optional    | One of: `new`, `refurbished`, or `used`.                                                                   |
| `contentLanguageISO` | Optional    | Two-letter ISO 639-1 product language code. Example: `en`.                                                 |

### Price, weight, and links

| Field                  | Requirement | Description and example                                     |
| ---------------------- | ----------- | ----------------------------------------------------------- |
| `price`                | Required    | Decimal price with a full-stop separator. Example: `29.99`. |
| `currencyIso`          | Required    | ISO 4217 currency code. Example: `GBP`.                     |
| `weight`               | Optional    | Decimal product weight. Example: `0.35`.                    |
| `weightUnit`           | Optional    | One of: `lb`, `oz`, `g`, or `kg`.                           |
| `link`                 | Required    | Direct product page URL.                                    |
| `imageLink`            | Required    | Main product image URL.                                     |
| `additionalImageLinks` | Optional    | Up to 10 extra image URLs, separated by commas.             |

### Product attributes

| Field         | Requirement | Description and example                                                                  |
| ------------- | ----------- | ---------------------------------------------------------------------------------------- |
| `color`       | Conditional | Up to three values separated by `/`, dominant first. Required for Apparel & Accessories. |
| `size`        | Optional    | Product size. Maximum 100 characters.                                                    |
| `gender`      | Optional    | One of: `male`, `female`, or `unisex`.                                                   |
| `category`    | Optional    | Category path using `>` only. Maximum 255 characters.                                    |
| `productType` | Optional    | Full category path. Maximum 750 characters.                                              |
| `pattern`     | Optional    | Pattern or graphic print. Maximum 100 characters.                                        |
| `keywords`    | Recommended | Highlights and USPs. Maximum 150 characters. Separate values with commas.                |
| `ageGroup`    | Conditional | `newborn`, `infant`, `toddler`, `kids`, or `adult`. Required for Apparel.                |
| `itemGroupId` | Optional    | Shared ID for variants. Up to 50 alphanumeric characters.                                |
| `sizeType`    | Optional    | Apparel modifier. Example: `petite`.                                                     |
| `sizeSystem`  | Optional    | Apparel modifier. Example: `UK`.                                                         |

### Promotions and bundles

| Field                    | Requirement | Description and example                                        |
| ------------------------ | ----------- | -------------------------------------------------------------- |
| `salePrice`              | Optional    | Discounted item price. Example: `21.99`.                       |
| `salePriceEffectiveDate` | Optional    | Sale time range. Example: `2026-06-25T00:00/2026-06-30T23:59`. |
| `costOfGoodsSold`        | Optional    | Merchant’s actual item cost. Example: `15.00`.                 |
| `promotionId`            | Optional    | Promotion identifier. Example: `SUMMER_SALE`.                  |
| `isBundle`               | Conditional | Merchant-defined bundle flag: `yes` or `no`.                   |
| `multipack`              | Conditional | Number of identical grouped items. Example: `3`.               |
| `adult`                  | Conditional | Adult-oriented content flag: `yes` or `no`.                    |

### Enrichment and shopper information

| Field                    | Requirement | Description and example                                                                                |
| ------------------------ | ----------- | ------------------------------------------------------------------------------------------------------ |
| `productHighlight`       | Optional    | Product highlights, separated by commas.                                                               |
| `productDetail`          | Optional    | Product details using structured key-value information.                                                |
| `returnExceptionPolicy`  | Optional    | Product-specific return exception. Maximum 50 characters. This information may appear during checkout. |
| `consumerMessageType`    | Optional    | Warning category, such as `legal_disclaimer`, `safety_warning`, or `prop_65`.                          |
| `consumerMessageContent` | Optional    | Shopper warning text. Maximum 1,000 characters. Supports `<b>`, `<br>`, `<i>`, and `<a href>`.         |
| `documentLinks`          | Optional    | Related manual, assembly, or safety document links. Separate values with commas.                       |
| `relatedProducts`        | Optional    | Related products and their relationship identifiers. Separate values with commas.                      |

### GTIN formats

Use numeric GTIN values only. Supported formats include:

* **UPC / GTIN-12 / UPC-A** — 12 digits, mainly North America.
* **EAN / GTIN-13** — usually 13 digits, also 8 or 14 digits.
* **JAN / GTIN-13** — 8 or 13 digits, used in Japan.
* **ISBN** — 10 or 13 digits for books. ISBN-13 usually starts with `978` or `979`.


# Checkout, testing, and errors

Understand payment handling, validation, and shopper error recovery.

### Payment handling

ESW handles Adyen payments through a secure token-based flow. Adyen provides the payment token. ESW maps the token to the shopper conversation, authorizes payment, and returns the checkout outcome.

### Validation and testing

ESW validates the checkout services against the manifest. Testing confirms UCP actions perform efficiently and product data synchronizes correctly to merchant centers.

### Checkout service errors

ESW separates shopper-correctable issues from ESW-managed issues. Shoppers receive guidance for correctable details. ESW resolves catalog, authentication, capacity, and infrastructure issues behind the scenes.

| Scenario                                  | Who handles it                    | Shopper experience                                              |
| ----------------------------------------- | --------------------------------- | --------------------------------------------------------------- |
| Invalid personal details                  | Shopper, prompted by the AI agent | Correct and resubmit details.                                   |
| Unsupported delivery country              | Shopper, prompted by the AI agent | Choose a supported country.                                     |
| Product catalog or pricing data issue     | ESW                               | Hidden from the shopper. ESW resolves it.                       |
| Authentication or permissions failure     | ESW                               | ESW adapter handles it. No action required.                     |
| Rate limiting or temporary capacity issue | ESW                               | Automatic retry after a short delay.                            |
| Infrastructure or integration failure     | ESW                               | A graceful message appears. ESW resolves it.                    |
| Minor data formatting issue               | ESW                               | ESW silently corrects it where possible.                        |
| Payment declined                          | ESW                               | A graceful message reflects the failure reason.                 |
| 3DS or fraud challenge required           | Shopper and ESW                   | Complete the challenge, then resume the same checkout session.  |
| Unsupported payment method                | Shopper, prompted by the AI agent | Choose a supported method for the market.                       |
| Item out of stock at checkout             | Shopper and ESW                   | Remove the item or choose an alternative. ESW refreshes totals. |
| Address validation failure                | Shopper, prompted by the AI agent | Correct the specified field before retrying.                    |


# Catalog FAQs

Resolve common catalog upload and product discovery questions.

### Uploading catalogs

<details>

<summary>Where do I upload my catalog?</summary>

Upload to your assigned tenant folder through SFTP. Use the exact brand code, environment, and `ProductFeed/Pending` path provided by ESW. Confirm the folder with your ESW Customer Success Manager if needed.

</details>

<details>

<summary>Can I upload multiple files for one market?</summary>

No. Send one CSV per market. Include every product for that market. Do not split files by category, brand, or action type.

</details>

<details>

<summary>What belongs in my first upload?</summary>

Include every active, in-stock product you want discoverable in Microsoft Copilot. Include required fields and useful selling points, features, category, material, and intended use.

</details>

<details>

<summary>What format do I need?</summary>

Send a UTF-8 CSV. Populate mandatory fields for each product category. Validate the file before upload.

</details>

### Timing and markets

<details>

<summary>When do products appear in Microsoft Merchant Center and Copilot?</summary>

Allow up to 72 hours after successful upload. Upload at least four days before launches, campaigns, or price changes.

</details>

<details>

<summary>Which markets support Microsoft Copilot purchases?</summary>

Microsoft Copilot purchasing currently supports the United States. Prioritize accurate US catalogs, then prepare market-specific files for future expansion.

</details>

<details>

<summary>When should I upload sale prices?</summary>

Upload changes at least 72 hours before launch. Upload major event changes at least four days ahead. Verify results before peak traffic.

</details>

<details>

<summary>How often should I update catalogs?</summary>

Send a full catalog at least monthly. Upload price, availability, and removal changes as soon as they occur.

</details>

### Errors and corrections

<details>

<summary>Why was my entire file rejected?</summary>

A structural error prevented parsing. Export a fresh UTF-8 CSV. Confirm equal column counts, escaped commas and quotes, then re-upload.

</details>

<details>

<summary>Can some products succeed while others fail?</summary>

Yes, if the file structure is valid. ESW uploads valid products and logs failed products. Correct failed SKUs and re-upload them.

</details>

<details>

<summary>Why did products fail with a non-USD pricing error?</summary>

Microsoft Copilot purchasing currently requires USD. Convert prices to USD, remove currency symbols, use values like `49.99`, then re-upload.

</details>

<details>

<summary>How do I update or remove products?</summary>

Use the same SKU or product ID and upload the latest values. To remove a product, set `availability` to `out_of_stock`. Omitting a SKU does not remove it.

</details>

<details>

<summary>Why are IDs displayed as scientific notation?</summary>

Excel converted long IDs and corrupted them. Regenerate the CSV from the source system. Import with **Data → From Text/CSV** and set ID columns to **Text**.

</details>

<details>

<summary>How do I verify data before uploading?</summary>

Open the CSV in Notepad. Confirm long IDs appear in full, such as `5063589815347`, not `1.23E+13`. Regenerate the file if values are converted.

</details>

<details>

<summary>What does an empty catalog file error mean?</summary>

The CSV has no product rows. Re-run the export. Confirm it has headers and product data, then upload it again.

</details>

<details>

<summary>Why are products missing mandatory fields?</summary>

Each category requires specific fields. Use the catalog specification, populate required fields, and re-upload corrected products.

</details>


# Shopify Native

ESW integration leverages Shopify's native checkout to handle shopper's purchase flow.

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

<p align="center"><a href="/pages/3b245df82504f55e59cbf60afbcca675dbd0dbed" class="button primary" data-icon="plug-circle-bolt">Install Apps</a> <a href="/pages/QKhE7W1umAOn2YhrRUy4" class="button secondary" data-icon="gear-complex">Configuration</a><a href="/pages/8a40d2660132fd14cc920f0c631c592ce0507382" class="button secondary" data-icon="arrow-progress">Integration Workflow</a></p>

<details open>

<summary>Integration matrix</summary>

|                                     |                               ESW                               |                             Shopify                             |
| :---------------------------------: | :-------------------------------------------------------------: | :-------------------------------------------------------------: |
|               Browsing              | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> |
|            Checkout Flow            | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> |
|       Customer Communications       | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> |
|   Gift Cards, Coupons & Promotions  | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> |
| Checkout Languages and Translations | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> |
|          Price Calculation          | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|      Shipping Methods & Pricing     | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|        Duty & Tax Calculation       | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|           Payment Methods           | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|          Merchant of Record         | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|         Product Restrictions        | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |
|   Returns & Tracking Translations   | <img src="/files/l7YjeD7BD3BTcDb3FWWn" alt="" data-size="line"> | <img src="/files/N3H63lkdyRFcOYvqgnK2" alt="" data-size="line"> |

{% hint style="info" icon="shopify" %}
Shopify owns the checkout flow
{% endhint %}

</details>


# Quick Start Guide

Install and configure the ESW Shopify apps, coordinate ESW onboarding provisioning, and prepare for testing and go-live.

Welcome to ESW!&#x20;

Expand your Shopify store globally with ESW. From multi-currency payments to duties, taxes, and international shipping, ESW simplifies global commerce so you can sell anywhere - all while staying compliant, all from one platform.&#x20;

Important note: to use the ESW Shopify integration, you must download and enable both International and Payment Apps. They are designed to work together and cannot be used separately.&#x20;

Once you have downloaded these two apps, please contact the ESW Onboarding team. They will complete the provisioning for your account, so the apps can be activated and ready to use.

Let’s get started.&#x20;

{% hint style="danger" icon="light-emergency-on" %}

#### Before you Begin

* The integration of the ESW Shopify Apps requires that you install, enable, and configure *both*, the International App and the Payments App for the solution to be functional.
* Note that these applications are interdependent.
* These Apps cannot be implemented or used separately.
  {% endhint %}

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

### Managed Process

* After the apps are installed, your account must be provisioned by the ESW Onboarding Team.
* Contact our team and provide your shop domain to notify them of your installation. The onboarding team will complete the provisioning for you.
* Once provisioning is complete, the app will become available for activation in your Shopify admin.
* Activation is the final, simple step that enables ESW apps.

#### Order of Action

{% stepper %}
{% step %}

### Install the International App

Install the ESW Shopify [International App](/shopify/shopify-native/quick-start-guide/install-esw-shopify-apps#international-app-1).
{% endstep %}

{% step %}

### Install the Payments App

Install the ESW Shopify [Payments App](/shopify/shopify-native/quick-start-guide/install-esw-shopify-apps#payments-app-1).
{% endstep %}

{% step %}

### Create a Market

[Create and configure a m**a**rket](/shopify/shopify-native/configuration/create-a-new-market) for your target region(s).
{% endstep %}

{% step %}

### Add Legal Messaging

Add the [ESW Privacy Notice](/shopify/shopify-native/configuration/add-legal-messaging) to your Shopify checkout page.
{% endstep %}

{% step %}

### Testing Period

{% hint style="info" icon="flask-vial" %}
Conduct testing to validate:

* App integrations
* Payment workflows
* Market settings and configurations
  {% endhint %}
  {% endstep %}

{% step %}

### Go-Live

Once testing is successful, proceed with **go-live** on the agreed date.

{% hint style="warning" icon="rectangle-beta" %}
Testing before go-live ensures smooth functionality and reduces potential issues in production.
{% endhint %}

{% code expandable="true" %}

```mermaid
%%{init: {
  "theme": "base",
  "themeVariables": {
    "fontFamily": "Arial, sans-serif",
    "primaryColor": "#007A4E",
    "primaryTextColor": "#1E2221",
    "primaryBorderColor": "#007A4E",

    "lineColor": "#1E2221",
    "signalColor": "#1E2221",
    "signalTextColor": "#1E2221",

    "actorBkg": "#CFF3E4",
    "actorTextColor": "#1E2221",

    "labelBoxBkgColor": "#DEEBE5",
    "labelTextColor": "#1E2221",

    "noteBkgColor": "#DEEBE5",
    "noteTextColor": "#1E2221",

    "sequenceNumberColor": "#FFD138",
    "activationBorderColor": "#007A4E",
    "activationBkgColor": "#80E8BF"
  }
}}%%
sequenceDiagram
    autonumber
    participant U as User
    participant SA as Shopify Admin
    participant TP as Testing Period
    participant GL as Go-Live

    Note over U,SA: Shopify setup
    U->>SA: Install the International App
    U->>SA: Install the Payments App
    U->>SA: Add a Market

    Note over SA,TP: Validation phase
    SA->>TP: Conduct testing to validate functionality

    Note over TP,GL: Launch phase
    TP->>GL: Proceed with go-live on agreed date
```

{% endcode %}
{% endstep %}
{% endstepper %}

***


# Install ESW Shopify Apps

Install ESW Shopify apps

{% hint style="danger" icon="light-emergency-on" %}

* Install, enable, and configure the ESW International App and Payments App.
* If you offer alternative payment methods (APMs), also install the relevant ESW APM app.
* If you use ESW Returns & Exchanges, also install the ESW [Returns & Exchanges app](/shopify/shopify-native/quick-start-guide/install-returns-and-exchanges-app).
  {% endhint %}

Install the International App and Payments App. Also install an ESW APM app when offering APMs. Install the ESW Returns & Exchanges app when using ESW Returns & Exchanges.

{% tabs %}
{% tab title="Installation" %}

<table data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center">International App</td><td data-object-fit="contain"><a href="/files/oTlyQVDlzuHglHcU6nBW">/files/oTlyQVDlzuHglHcU6nBW</a></td><td><a href="/pages/3b245df82504f55e59cbf60afbcca675dbd0dbed#international-app">/pages/3b245df82504f55e59cbf60afbcca675dbd0dbed#international-app</a></td></tr><tr><td align="center">Payment App</td><td data-object-fit="contain"><a href="/files/nY5CiTGIRHxwZy1SjpvA">/files/nY5CiTGIRHxwZy1SjpvA</a></td><td><a href="/pages/3b245df82504f55e59cbf60afbcca675dbd0dbed#payments-app">/pages/3b245df82504f55e59cbf60afbcca675dbd0dbed#payments-app</a></td></tr><tr><td align="center">Returns &#x26; Exchanges App</td><td data-object-fit="contain"><a href="/files/CS8AcGx9WAOR5GLEyuip">/files/CS8AcGx9WAOR5GLEyuip</a></td><td><a href="/pages/7791b749e2bbaa60bbc865dfde5395df56ce4680">/pages/7791b749e2bbaa60bbc865dfde5395df56ce4680</a></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

<h2 align="center">International App</h2>

<div data-with-frame="true"><img src="/files/RZPiSZiyAwAbFIXiNto5" alt="" width="563"></div>

The International App empowers merchants to expand internationally by localizing pricing, managing orders, and handling logistics from the Shopify store to ESW-supported markets – a streamlined experience to help you and your business.

Using the International App offers:

* Seamless Global Reach: Calculates international prices with duties and taxes included, improving transparency for global shoppers,
* Efficient Order Handling: Orders are taken directly into the ESW systems, streamlining fulfillment,
* Simplified Logistics: ESW’s forward shipping service, reducing complexity for cross-border delivery,
* Compliance Support: Duty and tax declarations for compliance.

### Installation

{% stepper %}
{% step %}

### Install link

Click on the <kbd>`Install Link`</kbd>

{% hint style="warning" icon="globe-pointer" %}
Link to be provided by ESW
{% endhint %}
{% endstep %}

{% step %}

### Install app

Run the installation on the `myshopify` subdomain.

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

**Click** <kbd>`Install`</kbd>
{% endstep %}

{% step %}

### Contact ESW onboarding manager

After the app is successfully installed, the following screen will appear.\
Please contact the Onboarding Manager to proceed with the configuration of your account, environment, and tenant for your brand.

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

{% step %}

### Confirmation screen

Once the tenant has been successfully configured, the following screen will appear within the app.\
You will be notified by ESW upon successful completion of the tenant configuration.

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

{% step %}

### Update brand configuration settings

Once the account, environment, and tenant have been set up, the brand configuration settings can be accessed and updated via the ESP link.

Find the ESP link [here](https://esp.sandbox.eshopworld.com/brand-management/storefront-integration).
{% endstep %}

{% step %}

### View installation in your Shopify admin

In your Shopify admin, click <kbd>`Apps`</kbd> to view the installed application.

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

***

<h2 align="center">Payments App</h2>

{% hint style="danger" icon="sliders-up" %}

#### Works with

* ESW International App
* ESW Returns & Exchanges
  {% endhint %}

<div data-with-frame="true"><img src="/files/6wZ3OgWmqPqIQYajP5mG" alt="" width="563"></div>

ESW offers a powerful global payment solution that makes every purchase feel local to your shoppers. The Payments App consolidates the most popular payment methods into one app and uses local acquiring to boost payment success and dynamic routing to show the most relevant options to each shopper.

Using the Payments App offers:

* Localized payment methods tailored to each market,
* Processes payments locally to improve success rates,
* Flexible business models including Merchant of Record,
* Secure, compliant payment processing with fraud protection,
* Optimized checkout displays the highest-converting payment options.

### Installation

{% stepper %}
{% step %}

### Install link

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

{% embed url="<https://apps.shopify.com/esw-card-payments>" %}
{% endstep %}

{% step %}

### Install app

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

**Click** <kbd>`Install`</kbd> at the bottom of the installation screen.
{% endstep %}

{% step %}

### Contact ESW onboarding manager

Once the app is successfully installed, contact ESW onboarding manager to configure your account, environment, and tenant for your brand.
{% endstep %}

{% step %}

### Confirmation screen

The app communicates readiness with Shopify. You will get a confirmation screen once the tenant has been successfully configured.
{% endstep %}

{% step %}

### Activate app

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

**Click** <kbd>`Activate`</kbd>
{% endstep %}
{% endstepper %}

***

If these steps don’t work or you need further support, please contact [onboarding@esw.com.](mailto:onboarding@esw.com)


# Install Returns and Exchanges App

Install the ESW Returns and Exchanges app in Shopify, then contact ESW to provision and configure your tenant.

{% @code-walkthrough/alert-block title="" message="Standalone App" type="success" %}

<div data-with-frame="true"><img src="/files/6wZ3OgWmqPqIQYajP5mG" alt="" width="563"></div>

Returns and Exchanges App provides a localized, self-service returns experience for international shoppers through the ESW Returns Portal.

* Improved Customer Experience: Shoppers can easily initiate returns through a branded, localized portal.
* Return Logistics Simplified: ESW handles return routing and customs declarations, reducing operational overhead.
* Duty & Tax Automation: Ensures accurate processing of return-related tax declarations, reducing compliance burdens.

## Installation

Follow these steps to install the GRP Returns App:

{% stepper %}
{% step %}

### Install link

Click the Shopify App Store link to install the ESW Returns and Exchanges app.

{% hint style="info" %}
Link to be provided by ESW.
{% endhint %}
{% endstep %}

{% step %}

### Install app

#### <i class="fa-bags-shopping" style="color:$info;">:bags-shopping:</i> [Shopify Store](https://myshopify.com/)

Run the installation on the `myshopify.com` subdomain.\
The installation screen will appear as shown below. Click Install app to proceed.

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

**Click** <kbd>`Install`</kbd> to proceed.
{% endstep %}

{% step %}

### Contact ESW onboarding manager

Once the app is successfully installed, the following screen will appear.\
At this stage, please contact the Onboarding Manager to configure the account, environment, and tenant for your brand.

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

{% step %}

### Confirmation screen

Once the tenant has been successfully configured, the following screen will be displayed.\
You will be notified by ESW once the configuration is complete.

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

{% step %}

### Update brand configuration settings

Once account, environment and tenant have been setup, update brand configuration settings on ESP. Find the <img src="/files/HO65mTfyqbD3ivGfW5C2" alt="" data-size="line"> ESP link [here](https://esp.sandbox.eshopworld.com/brand-management/storefront-integration).
{% endstep %}

{% step %}

### View installation in your Shopify admin

To view the installation, navigate to your Shopify admin and click <kbd>`Apps`</kbd>.
{% endstep %}
{% endstepper %}


# Supported Countries

Reference list of ESW-supported countries for Shopify, with ISO 3166-1 alpha-2 codes.

### A–J

| Country                                                                                                                                                                              | Code |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---- |
| <img src="https://flagcdn.com/al.svg" alt="Albania flag" data-size="line"> Albania                                                                                                   | `AL` |
| <img src="https://flagcdn.com/dz.svg" alt="Algeria flag" data-size="line"> Algeria                                                                                                   | `DZ` |
| <img src="https://flagcdn.com/ad.svg" alt="Andorra flag" data-size="line"> Andorra                                                                                                   | `AD` |
| <img src="https://flagcdn.com/ao.svg" alt="Angola flag" data-size="line"> Angola                                                                                                     | `AO` |
| <img src="https://flagcdn.com/ai.svg" alt="Anguilla flag" data-size="line"> Anguilla                                                                                                 | `AI` |
| <img src="https://flagcdn.com/ag.svg" alt="Antigua and Barbuda flag" data-size="line"> Antigua and Barbuda                                                                           | `AG` |
| <img src="https://flagcdn.com/ar.svg" alt="Argentina flag" data-size="line"> Argentina                                                                                               | `AR` |
| <img src="/files/37443cfb303bad0d4eaaf68e599dc8f7b83f04d3" alt="Armenia flag" data-size="line"> Armenia                                                                              | `AM` |
| <img src="https://flagcdn.com/aw.svg" alt="Aruba flag" data-size="line"> Aruba                                                                                                       | `AW` |
| <img src="https://flagcdn.com/au.svg" alt="Australia flag" data-size="line"> Australia                                                                                               | `AU` |
| <img src="/files/e635ded43ab984ded8b93b250ab1093e69d95b68" alt="Austria flag" data-size="line"> Austria                                                                              | `AT` |
| <img src="https://flagcdn.com/az.svg" alt="Azerbaijan flag" data-size="line"> Azerbaijan                                                                                             | `AZ` |
| <img src="/files/112805a0e4295af20cdd69c7775424d935dbd080" alt="Bahamas flag" data-size="line"> Bahamas                                                                              | `BS` |
| <img src="/files/b8fb562578b2dffce56b5459c0ff87657f4010de" alt="Bahrain flag" data-size="line"> Bahrain                                                                              | `BH` |
| <img src="/files/bd60bb23f6bcb6bd5c044d6378570165b0c368c1" alt="Bangladesh flag" data-size="line"> Bangladesh                                                                        | `BD` |
| <img src="https://flagcdn.com/bb.svg" alt="Barbados flag" data-size="line"> Barbados                                                                                                 | `BB` |
| <img src="https://flagcdn.com/by.svg" alt="Belarus flag" data-size="line"> Belarus                                                                                                   | `BY` |
| <img src="/files/ae386ff1a680480b533fde0bce7e593dbf673da5" alt="Belgium flag" data-size="line"> Belgium                                                                              | `BE` |
| <img src="https://flagcdn.com/bz.svg" alt="Belize flag" data-size="line"> Belize                                                                                                     | `BZ` |
| <img src="/files/af014948919f40fa0a010ff984a3d7ba38ee6825" alt="Benin flag" data-size="line"> Benin                                                                                  | `BJ` |
| <img src="https://flagcdn.com/bm.svg" alt="Bermuda flag" data-size="line"> Bermuda                                                                                                   | `BM` |
| <img src="https://flagcdn.com/bt.svg" alt="Bhutan flag" data-size="line"> Bhutan                                                                                                     | `BT` |
| <img src="https://flagcdn.com/bo.svg" alt="Bolivia flag" data-size="line"> Bolivia                                                                                                   | `BO` |
| <img src="https://flagcdn.com/bq.svg" alt="Bonaire, Sint Eustatius and Saba (Caribbean Netherlands) flag" data-size="line"> Bonaire, Sint Eustatius and Saba (Caribbean Netherlands) | `BQ` |
| <img src="https://flagcdn.com/ba.svg" alt="Bosnia and Herzegovina flag" data-size="line"> Bosnia and Herzegovina                                                                     | `BA` |
| <img src="/files/92e71f2a02a9d957e497c769048ab0de6f7f8e18" alt="Botswana flag" data-size="line"> Botswana                                                                            | `BW` |
| <img src="https://flagcdn.com/br.svg" alt="Brazil flag" data-size="line"> Brazil                                                                                                     | `BR` |
| <img src="https://flagcdn.com/bn.svg" alt="Brunei flag" data-size="line"> Brunei                                                                                                     | `BN` |
| <img src="/files/daf4b147222e2b013132afec7a46c59248a29d72" alt="Bulgaria flag" data-size="line"> Bulgaria                                                                            | `BG` |
| <img src="https://flagcdn.com/bf.svg" alt="Burkina Faso flag" data-size="line"> Burkina Faso                                                                                         | `BF` |
| <img src="https://flagcdn.com/bi.svg" alt="Burundi flag" data-size="line"> Burundi                                                                                                   | `BI` |
| <img src="https://flagcdn.com/kh.svg" alt="Cambodia flag" data-size="line"> Cambodia                                                                                                 | `KH` |
| <img src="https://flagcdn.com/cm.svg" alt="Cameroon flag" data-size="line"> Cameroon                                                                                                 | `CM` |
| <img src="https://flagcdn.com/ca.svg" alt="Canada flag" data-size="line"> Canada                                                                                                     | `CA` |
| <img src="https://flagcdn.com/cv.svg" alt="Cabo Verde flag" data-size="line"> Cabo Verde                                                                                             | `CV` |
| <img src="https://flagcdn.com/ky.svg" alt="Cayman Islands flag" data-size="line"> Cayman Islands                                                                                     | `KY` |
| <img src="https://flagcdn.com/cf.svg" alt="Central African Republic flag" data-size="line"> Central African Republic                                                                 | `CF` |
| <img src="/files/7a1841ad09d427e1096840a44f5aad1692229eb5" alt="Chad flag" data-size="line"> Chad                                                                                    | `TD` |
| <img src="https://flagcdn.com/cl.svg" alt="Chile flag" data-size="line"> Chile                                                                                                       | `CL` |
| <img src="https://flagcdn.com/cn.svg" alt="China flag" data-size="line"> China                                                                                                       | `CN` |
| <img src="/files/76e8ac433c237a2b643279b44601d75723cf5505" alt="Colombia flag" data-size="line"> Colombia                                                                            | `CO` |
| <img src="https://flagcdn.com/km.svg" alt="Comoros flag" data-size="line"> Comoros                                                                                                   | `KM` |
| <img src="/files/53bca64051e09ce92e3d4f57b27b60d2074549fa" alt="Congo (Republic of the) flag" data-size="line"> Congo (Republic of the)                                              | `CG` |
| <img src="https://flagcdn.com/cd.svg" alt="Congo (Democratic Republic of the) flag" data-size="line"> Congo (Democratic Republic of the)                                             | `CD` |
| <img src="https://flagcdn.com/ck.svg" alt="Cook Islands flag" data-size="line"> Cook Islands                                                                                         | `CK` |
| <img src="https://flagcdn.com/cr.svg" alt="Costa Rica flag" data-size="line"> Costa Rica                                                                                             | `CR` |
| <img src="/files/f1ab53559c4c59bf38306030aa941f7614550fba" alt="Côte d’Ivoire flag" data-size="line"> Côte d’Ivoire                                                                  | `CI` |
| <img src="https://flagcdn.com/hr.svg" alt="Croatia flag" data-size="line"> Croatia                                                                                                   | `HR` |
| <img src="https://flagcdn.com/cu.svg" alt="Cuba flag" data-size="line"> Cuba                                                                                                         | `CU` |
| <img src="https://flagcdn.com/cw.svg" alt="Curaçao flag" data-size="line"> Curaçao                                                                                                   | `CW` |
| <img src="https://flagcdn.com/cy.svg" alt="Cyprus flag" data-size="line"> Cyprus                                                                                                     | `CY` |
| <img src="/files/de2d10ffa275b1d11060c01d3d5a03b6e452c155" alt="Czechia flag" data-size="line"> Czechia                                                                              | `CZ` |
| <img src="/files/ca7d381aa44ea78f7511838b29a48575fc8f6eae" alt="Denmark flag" data-size="line"> Denmark                                                                              | `DK` |
| <img src="https://flagcdn.com/dj.svg" alt="Djibouti flag" data-size="line"> Djibouti                                                                                                 | `DJ` |
| <img src="https://flagcdn.com/dm.svg" alt="Dominica flag" data-size="line"> Dominica                                                                                                 | `DM` |
| <img src="https://flagcdn.com/do.svg" alt="Dominican Republic flag" data-size="line"> Dominican Republic                                                                             | `DO` |
| <img src="https://flagcdn.com/ec.svg" alt="Ecuador flag" data-size="line"> Ecuador                                                                                                   | `EC` |
| <img src="https://flagcdn.com/eg.svg" alt="Egypt flag" data-size="line"> Egypt                                                                                                       | `EG` |
| <img src="https://flagcdn.com/sv.svg" alt="El Salvador flag" data-size="line"> El Salvador                                                                                           | `SV` |
| <img src="https://flagcdn.com/gq.svg" alt="Equatorial Guinea flag" data-size="line"> Equatorial Guinea                                                                               | `GQ` |
| <img src="https://flagcdn.com/er.svg" alt="Eritrea flag" data-size="line"> Eritrea                                                                                                   | `ER` |
| <img src="/files/3dd5dc2e7ddb0c584c6ad25f95a4ffed43b9d540" alt="Estonia flag" data-size="line"> Estonia                                                                              | `EE` |
| <img src="https://flagcdn.com/et.svg" alt="Ethiopia flag" data-size="line"> Ethiopia                                                                                                 | `ET` |
| <img src="https://flagcdn.com/fk.svg" alt="Falkland Islands flag" data-size="line"> Falkland Islands                                                                                 | `FK` |
| <img src="https://flagcdn.com/fo.svg" alt="Faroe Islands flag" data-size="line"> Faroe Islands                                                                                       | `FO` |
| <img src="https://flagcdn.com/fj.svg" alt="Fiji flag" data-size="line"> Fiji                                                                                                         | `FJ` |
| <img src="/files/39f99f02f4f84bb44898575db81a0edf2738db4c" alt="Finland flag" data-size="line"> Finland                                                                              | `FI` |
| <img src="/files/6612a76fd770c787d3a48f13b18bacc64f62fca6" alt="France flag" data-size="line"> France                                                                                | `FR` |
| <img src="/files/49e927cc8198910b48165b86b7c887db39bd154b" alt="French Guiana flag" data-size="line"> French Guiana                                                                  | `GF` |
| <img src="https://flagcdn.com/pf.svg" alt="French Polynesia flag" data-size="line"> French Polynesia                                                                                 | `PF` |
| <img src="/files/0070416aa772e9d0016f70710aa8ab90ffd7ed8b" alt="Gabon flag" data-size="line"> Gabon                                                                                  | `GA` |
| <img src="/files/45169edaa659577f88f57975a24543feb5fa0599" alt="Gambia flag" data-size="line"> Gambia                                                                                | `GM` |
| <img src="https://flagcdn.com/ge.svg" alt="Georgia flag" data-size="line"> Georgia                                                                                                   | `GE` |
| <img src="/files/ec496c5b80441cf3732cf67f6ee3ab36a534e1ab" alt="Germany flag" data-size="line"> Germany                                                                              | `DE` |
| <img src="/files/7e09c2f820059b5fefa8587cd309277ed4d9e3e2" alt="Ghana flag" data-size="line"> Ghana                                                                                  | `GH` |
| <img src="https://flagcdn.com/gi.svg" alt="Gibraltar flag" data-size="line"> Gibraltar                                                                                               | `GI` |
| <img src="/files/1dbd086546d8ce3a598a748d82c45a6bc3f6258f" alt="Greece flag" data-size="line"> Greece                                                                                | `GR` |
| <img src="/files/536aa6b234bb1a3ba8ee478532e8634b75790c22" alt="Greenland flag" data-size="line"> Greenland                                                                          | `GL` |
| <img src="https://flagcdn.com/gd.svg" alt="Grenada flag" data-size="line"> Grenada                                                                                                   | `GD` |
| <img src="https://flagcdn.com/gp.svg" alt="Guadeloupe flag" data-size="line"> Guadeloupe                                                                                             | `GP` |
| <img src="https://flagcdn.com/gt.svg" alt="Guatemala flag" data-size="line"> Guatemala                                                                                               | `GT` |
| <img src="https://flagcdn.com/gg.svg" alt="Guernsey flag" data-size="line"> Guernsey                                                                                                 | `GG` |
| <img src="/files/cb89e996ee631d71a7584bb7d80032fd8825eb17" alt="Guinea flag" data-size="line"> Guinea                                                                                | `GN` |
| <img src="https://flagcdn.com/gw.svg" alt="Guinea-Bissau flag" data-size="line"> Guinea-Bissau                                                                                       | `GW` |
| <img src="https://flagcdn.com/gy.svg" alt="Guyana flag" data-size="line"> Guyana                                                                                                     | `GY` |
| <img src="https://flagcdn.com/ht.svg" alt="Haiti flag" data-size="line"> Haiti                                                                                                       | `HT` |
| <img src="https://flagcdn.com/va.svg" alt="Holy See (Vatican City) flag" data-size="line"> Holy See (Vatican City)                                                                   | `VA` |
| <img src="https://flagcdn.com/hn.svg" alt="Honduras flag" data-size="line"> Honduras                                                                                                 | `HN` |
| <img src="https://flagcdn.com/hk.svg" alt="Hong Kong flag" data-size="line"> Hong Kong                                                                                               | `HK` |
| <img src="/files/59af8014d9ffbe74cc89ade40ec336ad67e888a0" alt="Hungary flag" data-size="line"> Hungary                                                                              | `HU` |
| <img src="/files/f655d55ce618d6c447a61aa4ab8002d44ed3d911" alt="Iceland flag" data-size="line"> Iceland                                                                              | `IS` |
| <img src="https://flagcdn.com/in.svg" alt="India flag" data-size="line"> India                                                                                                       | `IN` |
| <img src="/files/7ea59d897471b0adf10e0f84b514b203a00ef583" alt="Indonesia flag" data-size="line"> Indonesia                                                                          | `ID` |
| <img src="https://flagcdn.com/iq.svg" alt="Iraq flag" data-size="line"> Iraq                                                                                                         | `IQ` |
| <img src="/files/714a0f740410cf4590fcf5994bc8a8b18bd38a98" alt="Ireland flag" data-size="line"> Ireland                                                                              | `IE` |
| <img src="https://flagcdn.com/im.svg" alt="Isle of Man flag" data-size="line"> Isle of Man                                                                                           | `IM` |
| <img src="https://flagcdn.com/il.svg" alt="Israel flag" data-size="line"> Israel                                                                                                     | `IL` |
| <img src="/files/15e15b0b5a3eb1dc0bad1e3fe2d2d82cf586de27" alt="Italy flag" data-size="line"> Italy                                                                                  | `IT` |
| <img src="https://flagcdn.com/jm.svg" alt="Jamaica flag" data-size="line"> Jamaica                                                                                                   | `JM` |
| <img src="/files/ca7e30c2c6c340904286cf8dfcf755d76bc68ad4" alt="Japan flag" data-size="line"> Japan                                                                                  | `JP` |
| <img src="https://flagcdn.com/je.svg" alt="Jersey flag" data-size="line"> Jersey                                                                                                     | `JE` |
| <img src="https://flagcdn.com/jo.svg" alt="Jordan flag" data-size="line"> Jordan                                                                                                     | `JO` |

### K–T

| Country                                                                                                                                                      | Code |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---- |
| <img src="https://flagcdn.com/kz.svg" alt="Kazakhstan flag" data-size="line"> Kazakhstan                                                                     | `KZ` |
| <img src="https://flagcdn.com/ke.svg" alt="Kenya flag" data-size="line"> Kenya                                                                               | `KE` |
| <img src="https://flagcdn.com/kp.svg" alt="North Korea flag" data-size="line"> North Korea                                                                   | `KP` |
| <img src="https://flagcdn.com/kr.svg" alt="South Korea flag" data-size="line"> South Korea                                                                   | `KR` |
| <img src="https://flagcdn.com/xk.svg" alt="Kosovo flag" data-size="line"> Kosovo                                                                             | `XK` |
| <img src="/files/bec954a6509199f05d73fae62d67f65b8685c540" alt="Kuwait flag" data-size="line"> Kuwait                                                        | `KW` |
| <img src="https://flagcdn.com/kg.svg" alt="Kyrgyzstan flag" data-size="line"> Kyrgyzstan                                                                     | `KG` |
| <img src="/files/2f78983891956faa0fb2e7d018bf9fe68eeddcc3" alt="Laos flag" data-size="line"> Laos                                                            | `LA` |
| <img src="/files/f431c545fc187daeec21b39b808e571f981de270" alt="Latvia flag" data-size="line"> Latvia                                                        | `LV` |
| <img src="https://flagcdn.com/lb.svg" alt="Lebanon flag" data-size="line"> Lebanon                                                                           | `LB` |
| <img src="https://flagcdn.com/ls.svg" alt="Lesotho flag" data-size="line"> Lesotho                                                                           | `LS` |
| <img src="https://flagcdn.com/lr.svg" alt="Liberia flag" data-size="line"> Liberia                                                                           | `LR` |
| <img src="https://flagcdn.com/ly.svg" alt="Libya flag" data-size="line"> Libya                                                                               | `LY` |
| <img src="https://flagcdn.com/li.svg" alt="Liechtenstein flag" data-size="line"> Liechtenstein                                                               | `LI` |
| <img src="/files/e84884d8c43d40e0e5bbba32f0f7f29b772cced5" alt="Lithuania flag" data-size="line"> Lithuania                                                  | `LT` |
| <img src="/files/c057375bd4190030d7f35e57d0034d9d0695c05c" alt="Luxembourg flag" data-size="line"> Luxembourg                                                | `LU` |
| <img src="https://flagcdn.com/mo.svg" alt="Macao flag" data-size="line"> Macao                                                                               | `MO` |
| <img src="https://flagcdn.com/mk.svg" alt="North Macedonia flag" data-size="line"> North Macedonia                                                           | `MK` |
| <img src="/files/d10b1de7e868fb45a23863b0bbe4e046a8974f4a" alt="Madagascar flag" data-size="line"> Madagascar                                                | `MG` |
| <img src="https://flagcdn.com/mw.svg" alt="Malawi flag" data-size="line"> Malawi                                                                             | `MW` |
| <img src="https://flagcdn.com/my.svg" alt="Malaysia flag" data-size="line"> Malaysia                                                                         | `MY` |
| <img src="/files/e1a724c42a487efca480a7ffff9b0bb001cd608b" alt="Maldives flag" data-size="line"> Maldives                                                    | `MV` |
| <img src="/files/f2f921104cb2b9d95db41d7fcc3f950658a8818f" alt="Mali flag" data-size="line"> Mali                                                            | `ML` |
| <img src="https://flagcdn.com/mt.svg" alt="Malta flag" data-size="line"> Malta                                                                               | `MT` |
| <img src="/files/7c690dc0288080b155b1a8287bac685117320385" alt="Martinique flag" data-size="line"> Martinique                                                | `MQ` |
| <img src="https://flagcdn.com/mr.svg" alt="Mauritania flag" data-size="line"> Mauritania                                                                     | `MR` |
| <img src="/files/9110a59d672fced10179d352eb20a3591f786761" alt="Mauritius flag" data-size="line"> Mauritius                                                  | `MU` |
| <img src="https://flagcdn.com/yt.svg" alt="Mayotte flag" data-size="line"> Mayotte                                                                           | `YT` |
| <img src="https://flagcdn.com/mx.svg" alt="Mexico flag" data-size="line"> Mexico                                                                             | `MX` |
| <img src="https://flagcdn.com/md.svg" alt="Moldova flag" data-size="line"> Moldova                                                                           | `MD` |
| <img src="/files/a115042a131018f2b9c5f3559f30aabe8a15e3e7" alt="Monaco flag" data-size="line"> Monaco                                                        | `MC` |
| <img src="https://flagcdn.com/mn.svg" alt="Mongolia flag" data-size="line"> Mongolia                                                                         | `MN` |
| <img src="https://flagcdn.com/me.svg" alt="Montenegro flag" data-size="line"> Montenegro                                                                     | `ME` |
| <img src="https://flagcdn.com/ms.svg" alt="Montserrat flag" data-size="line"> Montserrat                                                                     | `MS` |
| <img src="https://flagcdn.com/ma.svg" alt="Morocco flag" data-size="line"> Morocco                                                                           | `MA` |
| <img src="https://flagcdn.com/mz.svg" alt="Mozambique flag" data-size="line"> Mozambique                                                                     | `MZ` |
| <img src="https://flagcdn.com/mm.svg" alt="Myanmar flag" data-size="line"> Myanmar                                                                           | `MM` |
| <img src="https://flagcdn.com/na.svg" alt="Namibia flag" data-size="line"> Namibia                                                                           | `NA` |
| <img src="https://flagcdn.com/np.svg" alt="Nepal flag" data-size="line"> Nepal                                                                               | `NP` |
| <img src="/files/335e0cb7902ef03806cb1eca7bdadf47c897847a" alt="Netherlands flag" data-size="line"> Netherlands                                              | `NL` |
| <img src="https://flagcdn.com/an.svg" alt="Netherlands Antilles (deprecated) flag" data-size="line"> Netherlands Antilles (deprecated)                       | `AN` |
| <img src="https://flagcdn.com/nc.svg" alt="New Caledonia flag" data-size="line"> New Caledonia                                                               | `NC` |
| <img src="https://flagcdn.com/nz.svg" alt="New Zealand flag" data-size="line"> New Zealand                                                                   | `NZ` |
| <img src="https://flagcdn.com/ni.svg" alt="Nicaragua flag" data-size="line"> Nicaragua                                                                       | `NI` |
| <img src="/files/0c1abaee55550716d009c31c0725da575c413795" alt="Niger flag" data-size="line"> Niger                                                          | `NE` |
| <img src="/files/3c04cbffb8f97fcc3fe817fe2b6eb95b4ecd6dd6" alt="Nigeria flag" data-size="line"> Nigeria                                                      | `NG` |
| <img src="/files/9b1ab20651138c899ad4571d8a6c7c24098336f2" alt="Norway flag" data-size="line"> Norway                                                        | `NO` |
| <img src="https://flagcdn.com/om.svg" alt="Oman flag" data-size="line"> Oman                                                                                 | `OM` |
| <img src="https://flagcdn.com/pk.svg" alt="Pakistan flag" data-size="line"> Pakistan                                                                         | `PK` |
| <img src="https://flagcdn.com/pa.svg" alt="Panama flag" data-size="line"> Panama                                                                             | `PA` |
| <img src="https://flagcdn.com/pg.svg" alt="Papua New Guinea flag" data-size="line"> Papua New Guinea                                                         | `PG` |
| <img src="https://flagcdn.com/py.svg" alt="Paraguay flag" data-size="line"> Paraguay                                                                         | `PY` |
| <img src="/files/bb0d17aab53fd6a756b2bcdfacaf745e8bf23812" alt="Peru flag" data-size="line"> Peru                                                            | `PE` |
| <img src="https://flagcdn.com/ph.svg" alt="Philippines flag" data-size="line"> Philippines                                                                   | `PH` |
| <img src="/files/5658692f2f7baea59174b826ecf86d683c663030" alt="Poland flag" data-size="line"> Poland                                                        | `PL` |
| <img src="https://flagcdn.com/pt.svg" alt="Portugal flag" data-size="line"> Portugal                                                                         | `PT` |
| <img src="https://flagcdn.com/qa.svg" alt="Qatar flag" data-size="line"> Qatar                                                                               | `QA` |
| <img src="https://flagcdn.com/re.svg" alt="Réunion flag" data-size="line"> Réunion                                                                           | `RE` |
| <img src="/files/552aeb08d18170764adcb469dd5c1abfae44d522" alt="Romania flag" data-size="line"> Romania                                                      | `RO` |
| <img src="/files/85ff0ff67f757632807939d55f4853d142dbd422" alt="Russia flag" data-size="line"> Russia                                                        | `RU` |
| <img src="https://flagcdn.com/rw.svg" alt="Rwanda flag" data-size="line"> Rwanda                                                                             | `RW` |
| <img src="https://flagcdn.com/bl.svg" alt="Saint Barthélemy flag" data-size="line"> Saint Barthélemy                                                         | `BL` |
| <img src="https://flagcdn.com/sh.svg" alt="Saint Helena, Ascension and Tristan da Cunha flag" data-size="line"> Saint Helena, Ascension and Tristan da Cunha | `SH` |
| <img src="https://flagcdn.com/kn.svg" alt="Saint Kitts and Nevis flag" data-size="line"> Saint Kitts and Nevis                                               | `KN` |
| <img src="/files/aec23c183003e4d8f24505397f6dfebf1a6a039f" alt="Saint Lucia flag" data-size="line"> Saint Lucia                                              | `LC` |
| <img src="/files/d36dc4508d62085a717b8cec185babc8f9d7e9df" alt="Saint Martin (French part) flag" data-size="line"> Saint Martin (French part)                | `MF` |
| <img src="https://flagcdn.com/vc.svg" alt="Saint Vincent and the Grenadines flag" data-size="line"> Saint Vincent and the Grenadines                         | `VC` |
| <img src="https://flagcdn.com/ws.svg" alt="Samoa flag" data-size="line"> Samoa                                                                               | `WS` |
| <img src="https://flagcdn.com/sm.svg" alt="San Marino flag" data-size="line"> San Marino                                                                     | `SM` |
| <img src="https://flagcdn.com/st.svg" alt="São Tomé and Príncipe flag" data-size="line"> São Tomé and Príncipe                                               | `ST` |
| <img src="https://flagcdn.com/sa.svg" alt="Saudi Arabia flag" data-size="line"> Saudi Arabia                                                                 | `SA` |
| <img src="/files/326c7833f28b2e3d43d5e9351af84c4fdc7ef4de" alt="Senegal flag" data-size="line"> Senegal                                                      | `SN` |
| <img src="https://flagcdn.com/rs.svg" alt="Serbia flag" data-size="line"> Serbia                                                                             | `RS` |
| <img src="https://flagcdn.com/sc.svg" alt="Seychelles flag" data-size="line"> Seychelles                                                                     | `SC` |
| <img src="/files/faed9b3fd9b41c0a7960d4b5588b799409584c20" alt="Sierra Leone flag" data-size="line"> Sierra Leone                                            | `SL` |
| <img src="https://flagcdn.com/sg.svg" alt="Singapore flag" data-size="line"> Singapore                                                                       | `SG` |
| <img src="https://flagcdn.com/sx.svg" alt="Sint Maarten (Dutch part) flag" data-size="line"> Sint Maarten (Dutch part)                                       | `SX` |
| <img src="https://flagcdn.com/sk.svg" alt="Slovakia flag" data-size="line"> Slovakia                                                                         | `SK` |
| <img src="https://flagcdn.com/si.svg" alt="Slovenia flag" data-size="line"> Slovenia                                                                         | `SI` |
| <img src="https://flagcdn.com/sb.svg" alt="Solomon Islands flag" data-size="line"> Solomon Islands                                                           | `SB` |
| <img src="https://flagcdn.com/so.svg" alt="Somalia flag" data-size="line"> Somalia                                                                           | `SO` |
| <img src="https://flagcdn.com/za.svg" alt="South Africa flag" data-size="line"> South Africa                                                                 | `ZA` |
| <img src="https://flagcdn.com/es.svg" alt="Spain flag" data-size="line"> Spain                                                                               | `ES` |
| <img src="https://flagcdn.com/lk.svg" alt="Sri Lanka flag" data-size="line"> Sri Lanka                                                                       | `LK` |
| <img src="https://flagcdn.com/sr.svg" alt="Suriname flag" data-size="line"> Suriname                                                                         | `SR` |
| <img src="https://flagcdn.com/sz.svg" alt="Eswatini (formerly Swaziland) flag" data-size="line"> Eswatini (formerly Swaziland)                               | `SZ` |
| <img src="/files/1ea14583c8688788e264b0b609361b92a9742a07" alt="Sweden flag" data-size="line"> Sweden                                                        | `SE` |
| <img src="/files/ab8266262db39fc5a0d736f0d7d4968230fb71ad" alt="Switzerland flag" data-size="line"> Switzerland                                              | `CH` |
| <img src="https://flagcdn.com/tw.svg" alt="Taiwan flag" data-size="line"> Taiwan                                                                             | `TW` |
| <img src="https://flagcdn.com/tj.svg" alt="Tajikistan flag" data-size="line"> Tajikistan                                                                     | `TJ` |
| <img src="https://flagcdn.com/tz.svg" alt="Tanzania flag" data-size="line"> Tanzania                                                                         | `TZ` |
| <img src="/files/c0c3b1180a4c95d0b7a821179b34ff087e0ef552" alt="Thailand flag" data-size="line"> Thailand                                                    | `TH` |
| <img src="https://flagcdn.com/tl.svg" alt="Timor-Leste flag" data-size="line"> Timor-Leste                                                                   | `TL` |
| <img src="https://flagcdn.com/tg.svg" alt="Togo flag" data-size="line"> Togo                                                                                 | `TG` |
| <img src="/files/fecbd3420e302468cea97bb75d9acd14e2c03e38" alt="Tonga flag" data-size="line"> Tonga                                                          | `TO` |
| <img src="/files/3de177067baf348794eb64820f6a5f28c2b46ecc" alt="Trinidad and Tobago flag" data-size="line"> Trinidad and Tobago                              | `TT` |
| <img src="https://flagcdn.com/tn.svg" alt="Tunisia flag" data-size="line"> Tunisia                                                                           | `TN` |
| <img src="https://flagcdn.com/tr.svg" alt="Türkiye (Turkey) flag" data-size="line"> Türkiye (Turkey)                                                         | `TR` |
| <img src="https://flagcdn.com/tc.svg" alt="Turks and Caicos Islands flag" data-size="line"> Turks and Caicos Islands                                         | `TC` |

### U–Z

| Country                                                                                                                           | Code |
| --------------------------------------------------------------------------------------------------------------------------------- | ---- |
| <img src="https://flagcdn.com/ug.svg" alt="Uganda flag" data-size="line"> Uganda                                                  | `UG` |
| <img src="/files/14e105be1aedca5c1f56a90d70a4459e28bf9084" alt="Ukraine flag" data-size="line"> Ukraine                           | `UA` |
| <img src="/files/380def234d546ec97a34ea3b408e98d00c161e7f" alt="United Arab Emirates flag" data-size="line"> United Arab Emirates | `AE` |
| <img src="https://flagcdn.com/gb.svg" alt="United Kingdom flag" data-size="line"> United Kingdom                                  | `GB` |
| <img src="https://flagcdn.com/us.svg" alt="United States flag" data-size="line"> United States                                    | `US` |
| <img src="https://flagcdn.com/uy.svg" alt="Uruguay flag" data-size="line"> Uruguay                                                | `UY` |
| <img src="https://flagcdn.com/uz.svg" alt="Uzbekistan flag" data-size="line"> Uzbekistan                                          | `UZ` |
| <img src="https://flagcdn.com/vu.svg" alt="Vanuatu flag" data-size="line"> Vanuatu                                                | `VU` |
| <img src="https://flagcdn.com/ve.svg" alt="Venezuela flag" data-size="line"> Venezuela                                            | `VE` |
| <img src="/files/d7666bf89a0f401fefac7d359c13ccf6b4230a7c" alt="Vietnam flag" data-size="line"> Vietnam                           | `VN` |
| <img src="https://flagcdn.com/vg.svg" alt="Virgin Islands (British) flag" data-size="line"> Virgin Islands (British)              | `VG` |
| <img src="/files/5447fb01281004971d24c176f0ef27ff2c4cabb5" alt="Yemen flag" data-size="line"> Yemen                               | `YE` |
| <img src="https://flagcdn.com/zm.svg" alt="Zambia flag" data-size="line"> Zambia                                                  | `ZM` |
| <img src="https://flagcdn.com/zw.svg" alt="Zimbabwe flag" data-size="line"> Zimbabwe                                              | `ZW` |


# Test Cards

Supported test cards

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

{% @code-walkthrough/alert-block title="" message="The Adyen cards are enrolled in 3D Secure 2 security framework. To test 3D Secure 2 (advanced) scenarios, refer to test 3D Secure 2 authentication. One time password (OTP): 1234" type="warning" %}

<table><thead><tr><th width="100">Logo</th><th align="center">Card Type</th><th align="center">Card Number</th><th align="center">Expiry Date</th><th align="center" valign="middle">Security Code</th></tr></thead><tbody><tr><td><img src="/files/ae0660a1c299afd9fbe57888431ba76d2d7aed2b" alt="American Express" data-size="original"></td><td align="center">American Express</td><td align="center">3714 4963 5398 431</td><td align="center">Mar-30</td><td align="center" valign="middle">7373</td></tr><tr><td></td><td align="center">Bancontact / Maestro</td><td align="center">6703 4444 4444 4449</td><td align="center">Mar-30</td><td align="center" valign="middle">Not applicable</td></tr><tr><td><img src="/files/2d7654fa067221fdb0115fcef67696fa295f54f4" alt="Visa"></td><td align="center">Bancontact / Visa</td><td align="center">4871 0499 9999 9910</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td><img src="/files/2d7654fa067221fdb0115fcef67696fa295f54f4" alt="Visa"></td><td align="center">Cartes Bancaires / Visa Debit</td><td align="center">4035 5014 2814 6300</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td></td><td align="center">Cartes Bancaires</td><td align="center">4360 0000 0100 0005</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td></td><td align="center">China UnionPay (Credit)</td><td align="center">6250 9470 0000 0014</td><td align="center">Mar-30</td><td align="center" valign="middle">123</td></tr><tr><td></td><td align="center">China UnionPay (Debit)</td><td align="center">6250 9460 0000 0016</td><td align="center">Mar-30</td><td align="center" valign="middle">123</td></tr><tr><td><img src="/files/2754de8b65ba0c19e64e83afd9f43548689a0c73" alt="Diners"></td><td align="center">Diners</td><td align="center">3056 9309 0259 04</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td><img src="/files/17bbb6c8d2728f93bbb9eb683e2831534c598037" alt="Discover"></td><td align="center">Discover</td><td align="center">6011 1111 1111 1117</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td></td><td align="center">Maestro</td><td align="center">5000 5500 0000 0029</td><td align="center">Mar-30</td><td align="center" valign="middle">Not applicable</td></tr><tr><td><img src="/files/87e23288dfb31dcc8489767780b0260f17807302" alt="Mastercard"></td><td align="center">Mastercard</td><td align="center">5555 4444 3333 1111</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td><img src="/files/87e23288dfb31dcc8489767780b0260f17807302" alt="Mastercard"></td><td align="center">Mastercard Credit</td><td align="center">2222 4000 1000 0008</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td><img src="/files/2d7654fa067221fdb0115fcef67696fa295f54f4" alt="Visa"></td><td align="center">Visa</td><td align="center">4917 6100 0000 0000</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr><tr><td><img src="/files/2d7654fa067221fdb0115fcef67696fa295f54f4" alt="Visa Classic"></td><td align="center">Visa Classic</td><td align="center">4166 6766 6766 6746</td><td align="center">Mar-30</td><td align="center" valign="middle">737</td></tr></tbody></table>

The test cards listed above are for testing purposes only and cannot be used for real transactions.\
For more information on testing, refer to the [Adyen documentation](https://docs.adyen.com/development-resources/test-cards).


# Configuration

Configure markets, pricing, languages, redirection, and shipping for ESW on Shopify.

Use these guides to configure your Shopify store for ESW.

You’ll set up markets, pricing rules, storefront language and domain behavior, and shipping options.

{% hint style="info" %}
Start here after you’ve installed the ESW apps and your tenant is provisioned. See [Quick Start Guide](/shopify/shopify-native/quick-start-guide).
{% endhint %}

<table data-view="cards"><thead><tr><th>Topic</th><th data-hidden data-card-target data-type="content-ref">Link</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td>Create a New Market</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/a0a2eadad4c5ff61afd8a05174598e97ac510f88">/spaces/OZrcZKoZhyUFlsuSu228/pages/a0a2eadad4c5ff61afd8a05174598e97ac510f88</a></td><td><a href="/files/6dFzRF5B85EJ1Vb0KdaC">/files/6dFzRF5B85EJ1Vb0KdaC</a></td><td><a href="/files/Ido7cleFUYVAmgfmlFWP">/files/Ido7cleFUYVAmgfmlFWP</a></td></tr><tr><td>Add Legal Messaging</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/f15b08c8a834ede660f52ce0482abd5d8015e6b4">/spaces/OZrcZKoZhyUFlsuSu228/pages/f15b08c8a834ede660f52ce0482abd5d8015e6b4</a></td><td><a href="/files/7x1Xs2CtkCjWe5c8uXhS">/files/7x1Xs2CtkCjWe5c8uXhS</a></td><td><a href="/files/ZevqGZNOpELBKSvQSJNW">/files/ZevqGZNOpELBKSvQSJNW</a></td></tr><tr><td>Product Pricing</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/c22ad658d9b3a2ccc6a10d8bb9b2403d1b91808b">/spaces/OZrcZKoZhyUFlsuSu228/pages/c22ad658d9b3a2ccc6a10d8bb9b2403d1b91808b</a></td><td><a href="/files/l7pL6vchwKVIHlSWnsQZ">/files/l7pL6vchwKVIHlSWnsQZ</a></td><td><a href="/files/Zn9WWvNhKVBMLfohh8Wa">/files/Zn9WWvNhKVBMLfohh8Wa</a></td></tr><tr><td>Languages &#x26; Domains</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/0418d191c245bb5f8df7b834e0d8ae79a29a34b1">/spaces/OZrcZKoZhyUFlsuSu228/pages/0418d191c245bb5f8df7b834e0d8ae79a29a34b1</a></td><td><a href="/files/rwCcrlHMOKFmh0HRIMdt">/files/rwCcrlHMOKFmh0HRIMdt</a></td><td><a href="/files/h00yxq4iMKnY8UvMX3pG">/files/h00yxq4iMKnY8UvMX3pG</a></td></tr><tr><td>Setup Automatic Country and Language Redirection</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/48a36f0a1493d5b196ac6d1f8447bb6f2cfacf75">/spaces/OZrcZKoZhyUFlsuSu228/pages/48a36f0a1493d5b196ac6d1f8447bb6f2cfacf75</a></td><td><a href="/files/8uBoR4UpqWLFCtycVZoX">/files/8uBoR4UpqWLFCtycVZoX</a></td><td><a href="/files/MOVOzmFm08yF5bliCROB">/files/MOVOzmFm08yF5bliCROB</a></td></tr><tr><td>Shipping Methods, Rates, EDD for New Markets</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/32dd5cfcb789743704bc52d748fd8a08e1a5a130">/spaces/OZrcZKoZhyUFlsuSu228/pages/32dd5cfcb789743704bc52d748fd8a08e1a5a130</a></td><td><a href="/files/rLLdWJqjrcS1EayWHFXi">/files/rLLdWJqjrcS1EayWHFXi</a></td><td><a href="/files/IKsGMbeQQmDgTeBCiTeD">/files/IKsGMbeQQmDgTeBCiTeD</a></td></tr></tbody></table>


# Create a New Market

Create a Shopify market, set customer conditions, and inherit or customize settings for a new region.

If your new market does not have a parent market, it will be created with your store’s default settings and no customizations. If you assign a parent market, the new market will automatically inherit the customizations from the parent market.

{% stepper %}
{% step %}

### Access Markets

* From your **Shopify Admin**, navigate to **Markets**.
* Click <kbd>`Create market`</kbd>

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

{% step %}

### Enter Market Name

In the **Name** section, enter a name for your new market.

> (This name is for internal reference and not shown to customers.)

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

{% step %}

### Select Publishing Status

Choose the publishing status:

* **Active:** Display the market immediately to customers.
* **Draft:** Preview the market before making it live.
  {% endstep %}

{% step %}

### Define Market Conditions

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

In the **Includes** section:

* Click **Add Condition**.
* Specify which customers the market should apply to, such as:
  * A specific **region**
  * A **company location** (for B2B)

Click `Done`
{% endstep %}

{% step %}

### Review and Customize Settings

* Review inherited settings from your **store defaults** or **parent market**.
* Optionally customize:
  * **Currency**
  * **Catalogs**
  * **Online Store**
  * **Domain / Language**
    {% endstep %}

{% step %}

### Save the Market

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

Click `Save`

{% hint style="info" %}
You can preview the shopper experience for any added languages to ensure proper localization before publishing.
{% endhint %}
{% endstep %}
{% endstepper %}


# Add Legal Messaging

Add the ESW Privacy Notice block to Shopify checkout to meet legal requirements before go-live.

To comply with legal requirements, you must add the [ESW Privacy Notice](https://esw.com/privacy-policy/) to your Shopify checkout page. This ensures that shoppers are informed about how their data is handled during the checkout process. The legal messaging is designed to integrate the ESW Privacy Notice into your Shopify store's checkout page. This messaging is essential for compliance with legal requirements.

{% hint style="warning" %}

## Requirements

* Install the **International App** and **Payments App**.
* The privacy notice can be added to your Shopify checkout page at any stage after installing the International App and Payments App.
* The ESW Privacy Notice must be added before go-live.
  {% endhint %}

## Legal Messaging

To add the ESW Privacy Notice to your Shopify checkout page, follow these steps:

{% stepper %}
{% step %}

### Access Checkout Settings

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

* Access **Shopify Admin**.
* From the left panel, navigate to **Settings → Checkout**
  {% endstep %}

{% step %}

### Navigate to Configuration

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

* From the checkout **Configurations** section:
  * Click `Customize`
    {% endstep %}

{% step %}

### Add Block

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

1. In the Checkout **Sidebar**, click **Add block**.
2. Select the block you want to add:

<i class="fa-cubes">:cubes:</i> **`ESW Privacy Policy`**
{% endstep %}

{% step %}

### Save Changes

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

Click **`Save`** at the top of the screen to publish the updated checkout layout.

{% hint style="info" %}
Blocks let you add custom content to your checkout page without editing theme code.
{% endhint %}
{% endstep %}
{% endstepper %}


# Product Pricing

Choose a pricing approach and manage exchange rates per market in Shopify.

{% hint style="danger" %}

#### **Managed Process**

* Product pricing configuration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

Control how product prices display per market. Use Shopify markets for multi-currency pricing. Pick a pricing approach first.

### Pricing approaches

Choose one approach per market.

<table data-card-size="large" data-view="cards"><thead><tr><th>Approach</th><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><h4>ESW Pricing Advisor</h4></td><td><p></p><ul><li>Shows ESW duty and tax inclusive prices.</li><li>Use this for landed cost pricing.</li></ul></td><td data-object-fit="contain"><a href="/files/B0pkY8i9V3PqEfjxT72S">/files/B0pkY8i9V3PqEfjxT72S</a></td></tr><tr><td><h4>Fixed prices in Shopify</h4></td><td><p></p><ul><li>Set fixed product prices per market.</li><li>Use this for strict price control.</li></ul></td><td data-object-fit="contain"><a href="/files/kfPLZeNXDyQsnk75QR4Y">/files/kfPLZeNXDyQsnk75QR4Y</a></td></tr></tbody></table>

### Exchange rates in Shopify

Shopify supports **automatic** and **manual** exchange rates. This impacts how prices convert per market.

{% tabs %}
{% tab title="Automatic exchange rates" %}

* Prices convert using current market rates.
* Converted prices can include fees and rounding.
* Orders convert back to your store base currency.
* Small variances can occur over time.
  {% endtab %}

{% tab title="Manual exchange rates" %}
Manual exchange rates help stabilize pricing. You set a fixed rate for a market.

* You can’t set a manual rate for the primary market.
* Manual rates use your store base currency.
* Manual rates don’t apply to products with fixed prices.
* You can combine manual rates with price adjustments.
  {% endtab %}
  {% endtabs %}

![](/files/c386a471eb7dcb4f5f99a82e0dfdc5db5c835425)

### Set a manual exchange rate

Follow these steps to activate a manual exchange rate.

{% stepper %}
{% step %}

### Access Markets

From your **Shopify Admin**, go to **Settings → Markets**.
{% endstep %}

{% step %}

### Select Market

Open the market you want to update.
{% endstep %}

{% step %}

### Manage Exchange Rate

Go to **Products and Pricing → Manage exchange rate**.
{% endstep %}

{% step %}

### Set Manual Exchange Rate

1. Select **Manual**.
2. Enter the exchange rate.
3. Click **`Save`**.

{% hint style="info" icon="list-dropdown" %}

### Important Note

* Switching to **Automatic** rates deactivates manual rates.
* Changing the **base currency** also deactivates manual rates.
* Deactivation does not delete saved manual rates.
* You can reactivate manual rates later.
  {% endhint %}
  {% endstep %}
  {% endstepper %}


# Languages & Domains

Add storefront languages and assign languages and domains per market in Shopify.

{% hint style="danger" %}

#### **Managed Process**

* Languages and Domains configuration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

Use Shopify **Languages** to add storefront languages. Use **Markets** to assign languages and domains per region.

### Before you start

Adding a language does not translate your full store. Shopify auto-translates only supported theme and checkout content.

For everything else, upload translations or use a translation app. **Translate & Adapt** is the common default.

{% hint style="warning" %}
To manage **languages per market**, you need international domains configured (subfolders, domains, or subdomains). Without international domains, language settings apply across all active markets.
{% endhint %}

### Add a language to your store

{% stepper %}
{% step %}

### Open language settings

From your **Shopify Admin**, go to **Settings → Languages**.
{% endstep %}

{% step %}

### Add the language

1. Click **Add language**.
2. Select the language from the list.
   {% endstep %}

{% step %}

### Choose where it applies

* If you have **one market** or **no international domains**, click **Add**.
* If you have **multiple markets** with international domains:
  1. Click **Next**.
  2. Select the markets to enable the language for.
  3. Click **Done**.
     {% endstep %}

{% step %}

### Add translations

* Import translations with **Translate & Adapt**, or another translation app.
* Confirm key storefront pages look correct before publishing.
  {% endstep %}
  {% endstepper %}

### Publish a language

{% stepper %}
{% step %}

### Open language settings

From your **Shopify Admin**, go to **Settings → Languages**.
{% endstep %}

{% step %}

### Publish

1. Under **Unpublished languages**, open **… (More actions)**.
2. Select **Publish**.
3. Click **Save**.
   {% endstep %}
   {% endstepper %}

{% hint style="info" %}
If you publish without full translations, Shopify will prompt you. Untranslated content will stay in the default language.
{% endhint %}

### Assign languages and domains to a market

You must add the language to your store first. Then assign it to the market.

![](/files/634a74b5b31526eaea13ef7bb5785373318334ce)

{% stepper %}
{% step %}

### Access Markets

From your **Shopify Admin**, go to **Settings → Markets**.
{% endstep %}

{% step %}

### Select the market

Open the market you want to configure.
{% endstep %}

{% step %}

### Open Languages and domains

Click **Languages and domains**.
{% endstep %}

{% step %}

### Add a language

1. Click **Add languages**.
2. Under **Not added to this market**, select the language.
   {% endstep %}

{% step %}

### (Optional) Set domain and default language

Use the same **Languages and domains** screen to:

* Confirm the market domain setup.
* Choose the default language for the market.
  {% endstep %}
  {% endstepper %}

### Related topics

<table data-view="cards"><thead><tr><th>Topic</th><th data-card-target data-type="content-ref">Link</th></tr></thead><tbody><tr><td>Setup Automatic Country and Language Redirection</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/48a36f0a1493d5b196ac6d1f8447bb6f2cfacf75">/spaces/OZrcZKoZhyUFlsuSu228/pages/48a36f0a1493d5b196ac6d1f8447bb6f2cfacf75</a></td></tr><tr><td>Product Pricing</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/c22ad658d9b3a2ccc6a10d8bb9b2403d1b91808b">/spaces/OZrcZKoZhyUFlsuSu228/pages/c22ad658d9b3a2ccc6a10d8bb9b2403d1b91808b</a></td></tr></tbody></table>


# Setup Automatic Country and Language Redirection

Automatically route shoppers to the right market and language using location and browser settings.

{% hint style="danger" %}

#### Managed Process

* Configuration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

Automatic redirection routes shoppers to the best storefront experience. It uses **location** and **browser language**.

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

{% hint style="warning" %}

### Prerequisites

* Your markets are configured in **Settings → Markets**.
* Your languages are added, translated, and published.
* Languages are assigned to the right markets. Refer to  [Languages & Domains](/shopify/shopify-native/configuration/languages-and-domains) for more info.
  {% endhint %}

### Enable country/region redirection

This redirects shoppers to the correct market. It can change domain, subdomain, or subfolder.

{% stepper %}
{% step %}

### Open Preferences

From your **Shopify Admin**, go to **Online Store → Preferences**.
{% endstep %}

{% step %}

### Turn on Country/Region

In **Automatic redirection**, enable **Country/region**.
{% endstep %}

{% step %}

### Save

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

{% hint style="info" %}
Automatic redirection does not replace a manual selector. Add country/language selectors to your theme, or use a selector app.
{% endhint %}

### How country/region redirection behaves

#### Markets using dedicated domains

Dedicated domains include:

* Dedicated domain (example: `example.ca`)
* Subdomain (example: `ca.example.com`)
* Subfolder (example: `example.com/en-ca`)

Shoppers are redirected to the matching market URL. Search engines can index each market URL separately.

#### Markets using a shared domain

Shared domain means multiple markets use the same domain. Shopify adjusts content without changing the domain.

Example:

* US market: `example.com` in `USD`
* Canada market: `example.com` in `CAD`

Search engines won’t index separate market domains.

### EU behavior (ccTLD)

EU legislation restricts some automatic redirects. If a shopper visits a **country-code top-level domain (ccTLD)**, Shopify does not auto-redirect them to a different ccTLD.

Example:

* French shopper visits `example.de`
* They are not redirected to `example.fr`

If you use a non-country domain (like `.com`), automatic redirection can apply.

{% hint style="info" %}
For EU stores, consider a geolocation or recommendation app. Use it to suggest the “right” store and let the shopper choose.
{% endhint %}

<details>

<summary>EU ccTLD list</summary>

Common EU ccTLDs:

`.at`, `.be`, `.bg`, `.hr`, `.cy`, `.cz`, `.dk`, `.ee`, `.fi`, `.fr`, `.de`, `.gr`, `.hu`, `.ie`, `.it`, `.lv`, `.lt`, `.lu`, `.mt`, `.nl`, `.pl`, `.pt`, `.ro`, `.sk`, `.si`, `.es`, `.se`, `.eu`

</details>

### Enable language redirection

Language redirection switches to the best-matching language. It uses the shopper’s browser language.

#### Requirements

* The language is added to your store.
* The language is published.
* The language is assigned to the relevant market.
* Translations exist for the storefront content.

Example:

* Domain: `example.ca`
* Default language: English
* Browser language: French
* Result: shopper lands on `example.ca/fr`

{% stepper %}
{% step %}

### Open Preferences

From your **Shopify Admin**, go to **Online Store → Preferences**.
{% endstep %}

{% step %}

### Turn on Language

In **Automatic redirection**, enable **Language**.
{% endstep %}

{% step %}

### Save

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

### Related topics

<table data-view="cards"><thead><tr><th>Topic</th><th data-card-target data-type="content-ref">Link</th></tr></thead><tbody><tr><td>Languages &#x26; Domains</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/0418d191c245bb5f8df7b834e0d8ae79a29a34b1">/spaces/69bGsllGv04t8wHIHruV/pages/0418d191c245bb5f8df7b834e0d8ae79a29a34b1</a></td></tr><tr><td>Create a New Market</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/a0a2eadad4c5ff61afd8a05174598e97ac510f88">/spaces/69bGsllGv04t8wHIHruV/pages/a0a2eadad4c5ff61afd8a05174598e97ac510f88</a></td></tr></tbody></table>


# Shipping Methods, Rates, EDD for New Markets

Set up fulfillment locations and shipping rates, including transit times for estimated delivery dates (EDD).

{% hint style="danger" %}

#### Managed Process

* Configuration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

Configure shipping for a new market. You’ll typically do two things:

* Set up **fulfillment locations**.
* Configure **shipping rates** and **transit times** (EDD).

### Fulfillment locations

A location is any place (or app) that fulfills orders or holds inventory. Examples include warehouses, retail stores, and dropshippers.

Use multiple locations to:

* Track inventory by site.
* Fulfill from the best location.
* Control fulfillment priority.

### Add a location

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

New locations default to being available for online fulfillment. They also appear at the bottom of your fulfillment priority list.

{% stepper %}
{% step %}

### Access Locations

From your **Shopify Admin**, go to **Settings → Locations**.
{% endstep %}

{% step %}

### Add a New Location

In **All locations**, click **Add location**.
{% endstep %}

{% step %}

### Enter Location Details

In **Location details**, set:

* **Name**
* **Address**
  {% endstep %}

{% step %}

### Inventory Availability (Optional)

To prevent online orders from routing to this location, disable:

**Inventory at this location is available to fulfill online orders**
{% endstep %}

{% step %}

### Save the Location

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

{% hint style="info" %}
If you don’t want products stocked at every location, adjust inventory per location in **Products → Inventory**.
{% endhint %}

### Shipping rates and EDD

Shipping rates control what shoppers see at checkout. Transit times can drive **estimated delivery dates (EDD)** where enabled.

Flat shipping rates let you charge a fixed amount for shipping during checkout.

You can scope rates to a shipping zone. You can also add weight or price conditions.

### Add a shipping rate

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

{% stepper %}
{% step %}

### Access Shipping Settings

From your **Shopify Admin**, go to **Settings → Shipping and delivery**.
{% endstep %}

{% step %}

### Select Shipping Profile

In **Shipping**, open the shipping profile you want to edit.
{% endstep %}

{% step %}

### Add Shipping Rate

Next to the target shipping **zone**, click **Add rate**.

Then choose:

* A **transit time** (for delivery expectations / EDD), or
* **Custom flat rate** (for a named flat price).
  {% endstep %}

{% step %}

### Add Delivery Description (Optional)

If you use **Custom flat rate**, add a short description. Keep it to 25 characters when possible.
{% endstep %}

{% step %}

### Enter Shipping Rate

Enter the shipping price.
{% endstep %}

{% step %}

### (Optional) Add Conditions

Add weight-based or price-based conditions if needed.
{% endstep %}

{% step %}

### Review Checkout Preview

Use the preview to confirm the rate and messaging.
{% endstep %}

{% step %}

### Save Shipping Rate

Click **Done**, then **Save**.
{% endstep %}
{% endstepper %}


# Integration

Connect Shopify and ESW using webhooks and ESW APIs for catalog, pricing, and order lifecycle sync.

{% hint style="danger" icon="hand-holding-box" %}

#### **Managed Process**

* Integration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

<table data-view="cards"><thead><tr><th>Topic</th><th data-hidden data-card-target data-type="content-ref">Link</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td>Integration Overview</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/c51fcf032ce857f3d496ac1a144f97ac63c72779">/spaces/OZrcZKoZhyUFlsuSu228/pages/c51fcf032ce857f3d496ac1a144f97ac63c72779</a></td><td><a href="/files/rLLdWJqjrcS1EayWHFXi">/files/rLLdWJqjrcS1EayWHFXi</a></td><td><a href="/files/IKsGMbeQQmDgTeBCiTeD">/files/IKsGMbeQQmDgTeBCiTeD</a></td><td><a href="/files/IKsGMbeQQmDgTeBCiTeD">/files/IKsGMbeQQmDgTeBCiTeD</a></td></tr><tr><td>Product Catalog Sync</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/95e056cc6dfc121c604f5ea3d9c3b8ac0f214a8d">/spaces/OZrcZKoZhyUFlsuSu228/pages/95e056cc6dfc121c604f5ea3d9c3b8ac0f214a8d</a></td><td><a href="/files/8uBoR4UpqWLFCtycVZoX">/files/8uBoR4UpqWLFCtycVZoX</a></td><td><a href="/files/MOVOzmFm08yF5bliCROB">/files/MOVOzmFm08yF5bliCROB</a></td><td><a href="/files/MOVOzmFm08yF5bliCROB">/files/MOVOzmFm08yF5bliCROB</a></td></tr><tr><td>Pricing Import</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/beb4a39dc642fb7c9ff52bb6402c350bb98ff47c">/spaces/OZrcZKoZhyUFlsuSu228/pages/beb4a39dc642fb7c9ff52bb6402c350bb98ff47c</a></td><td><a href="/files/rwCcrlHMOKFmh0HRIMdt">/files/rwCcrlHMOKFmh0HRIMdt</a></td><td></td><td><a href="/files/h00yxq4iMKnY8UvMX3pG">/files/h00yxq4iMKnY8UvMX3pG</a></td></tr><tr><td>Order Management</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011">/spaces/OZrcZKoZhyUFlsuSu228/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011</a></td><td><a href="/files/l7pL6vchwKVIHlSWnsQZ">/files/l7pL6vchwKVIHlSWnsQZ</a></td><td></td><td><a href="/files/Zn9WWvNhKVBMLfohh8Wa">/files/Zn9WWvNhKVBMLfohh8Wa</a></td></tr><tr><td>Shipping Address Update</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/c2f06d89166f7979ba488c174a09bf8dbc3b2849">/spaces/OZrcZKoZhyUFlsuSu228/pages/c2f06d89166f7979ba488c174a09bf8dbc3b2849</a></td><td><a href="/files/7x1Xs2CtkCjWe5c8uXhS">/files/7x1Xs2CtkCjWe5c8uXhS</a></td><td></td><td><a href="/files/ZevqGZNOpELBKSvQSJNW">/files/ZevqGZNOpELBKSvQSJNW</a></td></tr><tr><td>Order and Item-Level Cancellations</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/465a1bf0f89a80277189e786d587a8c0a0e877cf">/spaces/OZrcZKoZhyUFlsuSu228/pages/465a1bf0f89a80277189e786d587a8c0a0e877cf</a></td><td><a href="/files/6dFzRF5B85EJ1Vb0KdaC">/files/6dFzRF5B85EJ1Vb0KdaC</a></td><td></td><td><a href="/files/Ido7cleFUYVAmgfmlFWP">/files/Ido7cleFUYVAmgfmlFWP</a></td></tr><tr><td>Appeasements</td><td><a href="/spaces/OZrcZKoZhyUFlsuSu228/pages/4ec858a0893c557fff20c3b0b4b7f12acb7da209">/spaces/OZrcZKoZhyUFlsuSu228/pages/4ec858a0893c557fff20c3b0b4b7f12acb7da209</a></td><td><a href="/files/d7XJa1US1IBoAfj6XJMT">/files/d7XJa1US1IBoAfj6XJMT</a></td><td></td><td><a href="/files/ZL04KZjR6xCeHBD20H1Y">/files/ZL04KZjR6xCeHBD20H1Y</a></td></tr></tbody></table>


# Integration Overview

How Shopify checkout, webhooks, and ESW order import fit together.

{% hint style="danger" %}

#### Managed Process

* Integration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}

Shopify’s native checkout for the shopper purchase flow.

After checkout, the app imports Shopify order into ESW as an **offline order**.

ESW then drives the downstream operational flow.

***

* Logistics and shipping orchestration
* Compliance
* Order tracking and post‑purchase workflows

### High-level flow

![](/files/9f379d6e0a1826eecbea2818a5ede4f00a42dca2)

{% stepper %}
{% step %}

### Shopper checks out in Shopify

The shopper completes checkout in Shopify.

Shopify creates the order in your store.
{% endstep %}

{% step %}

### Shopify notifies your integration

Your integration receives order events through Shopify webhooks.

Typical topic: `orders/create`.
{% endstep %}

{% step %}

### Your integration imports the order into ESW

Map Shopify order data to the ESW order model.

Submit it to ESW as an **offline order** (or your ESW-required type).
{% endstep %}

{% step %}

### ESW fulfills and updates flow back to Shopify

ESW handles fulfillment execution.

Shipment, tracking, and status updates should be reflected back in Shopify.
{% endstep %}
{% endstepper %}

### Related topics

<table data-view="cards"><thead><tr><th>Topic</th><th data-card-target data-type="content-ref">Link</th></tr></thead><tbody><tr><td>Order Management</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011">/spaces/69bGsllGv04t8wHIHruV/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011</a></td></tr><tr><td>Product Catalog Sync</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/95e056cc6dfc121c604f5ea3d9c3b8ac0f214a8d">/spaces/69bGsllGv04t8wHIHruV/pages/95e056cc6dfc121c604f5ea3d9c3b8ac0f214a8d</a></td></tr><tr><td>Pricing Import</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/beb4a39dc642fb7c9ff52bb6402c350bb98ff47c">/spaces/69bGsllGv04t8wHIHruV/pages/beb4a39dc642fb7c9ff52bb6402c350bb98ff47c</a></td></tr><tr><td>Shipping Methods, Rates, EDD for New Markets</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/32dd5cfcb789743704bc52d748fd8a08e1a5a130">/spaces/69bGsllGv04t8wHIHruV/pages/32dd5cfcb789743704bc52d748fd8a08e1a5a130</a></td></tr></tbody></table>


# Product Catalog Sync

Sync Shopify product and variant updates to ESW using webhooks and the ESW Catalog API.

Sync product and variant changes from Shopify into ESW.

Use Shopify **product webhooks** to detect changes.

Then upsert the latest catalog data to ESW using the **ESW Catalog API**.

### Prerequisites

* You have an integration service that can receive Shopify webhooks.
* You have ESW Catalog API credentials and the target catalog schema.
* You’ve defined your *source of truth* for pricing.

{% hint style="warning" %}
Shopify webhooks are best-effort delivery.
{% endhint %}

### Webhook-driven sync flow

{% stepper %}
{% step %}

### Subscribe to Shopify product webhooks

Create webhook subscriptions for the product lifecycle events you use.

Common topics:

* `products/create`
* `products/update`
* `products/delete`

#### Shopify docs <i class="fa-webhook" style="color:$primary;">:webhook:</i> [Webhooks](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook)

{% endstep %}

{% step %}

### Receive and validate the webhook

When a webhook fires:

* Verify the request is from Shopify (HMAC validation).
* Parse the product payload.
* Deduplicate events (Shopify can retry deliveries).
  {% endstep %}

{% step %}

### Map Shopify fields to the ESW catalog schema

Transform Shopify product + variant data into the format ESW expects.

Typical fields to align:

* Product and variant identifiers
* SKU (per variant)
* Title, description, and images
* Options (size, color) and availability
* Taxonomy / category mapping (if required by your ESW setup)
  {% endstep %}

{% step %}

### Upsert catalog data in ESW

Call the ESW Catalog API to create or update the product record.

Recommended behaviors:

* Make the upsert idempotent.
* Retry transient failures.
* Log the ESW response for traceability.
  {% endstep %}

{% step %}

### Handle deletes and unpublishing

Decide what a Shopify delete/unpublish means for ESW:

* Remove the item from the ESW catalog, or
* Mark it inactive / not purchasable.
  {% endstep %}
  {% endstepper %}


# Pricing Import

Calculate localized prices with ESW Pricing Advisor and import fixed prices into Shopify markets.

Import localized prices from **ESW Pricing Advisor** into Shopify markets.

Use ESW to calculate market-specific prices.

Then write fixed prices to Shopify using the Admin GraphQL API.

### Prerequisites

* Your Shopify **markets** and **currencies** are set up.
* Your products and variants exist in Shopify.
  * If ESW relies on your Shopify catalog, see [Product Catalog Sync](broken://spaces/69bGsllGv04t8wHIHruV/pages/95e056cc6dfc121c604f5ea3d9c3b8ac0f214a8d).
* You have credentials for:
  * ESW Pricing Advisor API
  * Shopify Admin API (GraphQL)

{% hint style="info" %}
Pricing imports are usually batch jobs.

Run them on a schedule and after major catalog changes.
{% endhint %}

### Pricing import flow

{% stepper %}
{% step %}

### Define your pricing scope

Decide which combinations you price.

Typical dimensions:

* Market (country/region)
* Currency
* Variant (SKU)

Keep a stable mapping between a Shopify market and your ESW pricing inputs.
{% endstep %}

{% step %}

### Fetch pricing inputs from ESW

Call the ESW Pricing Advisor API per market to retrieve the rules needed to price.

Common inputs:

* Exchange rates
* Duties and taxes
* Rounding rules

Fetch the data for every target market and currency pair.
{% endstep %}

{% step %}

### Calculate the final price per variant

For each variant/SKU:

* Apply the ESW rules for the market.
* Produce the price you want shoppers to see.

Store the result with:

* Market
* Currency
* Variant/SKU
* Effective timestamp (optional)
  {% endstep %}

{% step %}

### Upsert fixed prices into Shopify

Write the calculated prices to Shopify as fixed prices.

Implementation notes:

* Use the Admin GraphQL API.
* Batch updates to stay within rate limits.
* Make updates idempotent.

#### Shopify mutation <i class="fa-code" style="color:$primary;">:code:</i> [priceListFixedPricesAdd](https://shopify.dev/docs/api/admin-graphql/latest/mutations/priceListFixedPricesAdd).

{% endstep %}

{% step %}

### Validate and monitor

Spot-check a few products in each market.

Then monitor for:

* Missing SKUs
* Large price deltas
* Failed writes / throttling
  {% endstep %}
  {% endstepper %}

### Shopify reference links <i class="fa-square-info" style="color:$primary;">:square-info:</i>

{% tabs %}
{% tab title="Fixed prices by country/market" %}
[Product prices by country (Shopify Help)](https://help.shopify.com/en/manual/international/pricing/product-prices-by-country#set-fixed-product-prices-using-the-shopify-api)
{% endtab %}

{% tab title="Fixed prices for specific variants" %}
[Set fixed prices for specific variants (Shopify Dev)](https://shopify.dev/docs/apps/build/markets/build-catalog#step-3-set-fixed-prices-for-specific-product-variants)
{% endtab %}
{% endtabs %}

### **How duties and taxes calculated and displayed** <a href="#how-are-duties-and-taxes-calculated-and-displayed" id="how-are-duties-and-taxes-calculated-and-displayed"></a>

Duties and taxes are calculated using a **dedicated ESW-Shopify connector**.

* **Calculation:** When a shopper enters their shipping address, Shopify issues a request to the ESW calculator. If the market is configured for **DDP (Delivery Duties Paid)**, the calculator returns the specific duties and taxes for the delivery.
* **Display:** Checkout displays merchandise, shipping, duties, and taxes as **separate components** to ensure transparency for international shoppers.
* **Treatment:** Duties and taxes are calculated based on the **full merchandise value**, even when gift cards are used, as gift cards are treated as a form of payment rather than a discount.


# Order Management

Sync orders, fulfillment, and cancellations between Shopify and ESW.

Shopify sends order events via webhooks.

Your integration posts orders to ESW.

ESW fulfillment updates flow back to Shopify.

### Prerequisites

* You have an integration service that can receive Shopify webhooks.
* You have access to:
  * Shopify Admin API (REST/GraphQL)
  * ESW Order APIs for order import and updates
* You’ve decided which system “owns” downstream changes:
  * Cancellations
  * Partial cancellations (item-level)
  * Fulfillment and tracking

{% hint style="info" %}
Treat all inbound events as at-least-once delivery.
{% endhint %}

### Webhook-driven order flow

{% stepper %}
{% step %}

### Subscribe to Shopify order webhooks

Create webhook subscriptions for the topics you support.

Common topics:

* `orders/create`
* `orders/updated`
* `orders/cancelled`

#### Shopify <i class="fa-webhook" style="color:$primary;">:webhook:</i> : [Webhooks](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook).

{% endstep %}

{% step %}

### Receive and validate the webhook

When a webhook fires:

* Verify the request is from Shopify (HMAC validation).
* Deduplicate on webhook id / event id.
* Enrich the payload if you need full order detail.
  {% endstep %}

{% step %}

### Import the order into ESW

Map Shopify order data to the ESW order model.

Then submit the order to ESW as an **offline order** (or your ESW-required type).

Typical mapping considerations:

* Order id, timestamps, and customer identifiers
* Line items (variant id / SKU), quantities, discounts
* Shipping method and costs
* Taxes and duty handling (based on your ESW setup)
  {% endstep %}

{% step %}

### Apply ESW fulfillment updates back to Shopify

When ESW creates shipments or updates fulfillment status:

* Capture ESW shipment/tracking events.
* Update the Shopify fulfillment with:
  * Tracking number(s)
  * Carrier
  * Fulfillment status

#### Shopify reference <i class="fa-code" style="color:$primary;">:code:</i> : [fulfillmentCreateV2](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentCreateV2).

{% endstep %}

{% step %}

### Synchronize cancellations and item-level changes

Decide which events you propagate and when.

Typical approaches:

* Shopify cancellation triggers ESW cancellation.
* ESW cancellation triggers Shopify cancellation or adjustments.

#### Shopify <i class="fa-webhook" style="color:$primary;">:webhook:</i>:

* [orders/cancelled webhook](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-cancelled)
* [orders/updated webhook](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-updated)
  {% endstep %}

{% step %}

### Reconcile and monitor

Add a daily job to catch missed events.

Track and alert on:

* Orders not imported to ESW
* Fulfillment updates failing to write to Shopify
* Repeated webhook retries / throttling
  {% endstep %}
  {% endstepper %}


# Shipping Address Update

Capture post-purchase shipping address changes in Shopify and sync them to ESW.

Sync shipping address changes between Shopify and ESW.

Use Shopify order update webhooks to detect changes.

Then push the new address to ESW for the same order.

### Prerequisites

* You have an integration service that can receive Shopify webhooks.
* You can call the Shopify Admin API (REST/GraphQL).
* You can call the ESW order update endpoint for contact details.
* You’ve defined when address changes are allowed.
  * Example: only before fulfillment is created.

{% hint style="info" %}
Treat Shopify webhooks as at-least-once delivery.
{% endhint %}

### Webhook-driven address update flow

{% stepper %}
{% step %}

### Subscribe to `orders/updated`

Use `orders/updated` to catch post-purchase changes.

#### Shopify docs <i class="fa-webhook" style="color:$primary;">:webhook:</i> [orders/updated](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-updated).

{% endstep %}

{% step %}

### Receive and validate the webhook

When the webhook fires:

* Validate the Shopify HMAC signature.
* Deduplicate on webhook id / event id.
* Re-fetch the order if you need full, current data.
  {% endstep %}

{% step %}

### Detect a shipping address change

`orders/updated` fires for many order edits.

Filter for shipping address deltas.

Compare these fields at minimum:

* Name
* Address lines
* City
* Region / state
* Postal code
* Country code
* Phone (if you sync it to ESW)
  {% endstep %}

{% step %}

### Map to ESW contact details

Transform the Shopify shipping address into the ESW format.

Send the order identifier ESW expects.

Keep a stable mapping between:

* Shopify order id / name
* ESW order reference
  {% endstep %}

{% step %}

### Update ESW

Call the ESW **Update Contact Details** API for the order.

Recommended behavior:

* Retry transient failures.
* Stop retrying once the order is no longer editable in ESW.
* Log ESW responses for traceability.
  {% endstep %}

{% step %}

### Monitor and reconcile

Alert on failures and repeated retries.

Add a daily job to reconcile recent orders if needed.
{% endstep %}
{% endstepper %}


# Order and Item-Level Cancellations

Keep cancellation state in sync between Shopify and ESW, including partial (item-level) cancels.

Sync cancellations between Shopify and ESW.

Use Shopify webhooks to capture changes.

Then apply the equivalent cancellation in the other system.

### Prerequisites

* You have an integration service that can receive Shopify webhooks.
* You can call:
  * Shopify Admin API (REST/GraphQL)
  * ESW order update / cancellation endpoints
* You’ve decided which system “owns” cancellations after order import.
  * Shopify-led cancellations (CS ops in Shopify)
  * ESW-led cancellations (warehouse / carrier constraints)

{% hint style="info" %}
Shopify and ESW can both emit retries or duplicate events.
{% endhint %}

### Webhook-driven cancellation flow

{% stepper %}
{% step %}

### Subscribe to Shopify cancellation signals

Use these topics depending on your operating model:

* `orders/cancelled` for full-order cancellations.
* `orders/updated` if you represent partial cancels as edits/adjustments.

#### Shopify docs <i class="fa-webhook" style="color:$primary;">:webhook:</i>:

* [orders/cancelled](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-cancelled)
* [orders/updated](https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-updated)
  {% endstep %}

{% step %}

### Receive, validate, and enrich the event

When a webhook fires:

* Validate the Shopify HMAC signature.
* Deduplicate on webhook id / event id.
* Fetch the latest order state if needed for line-level details.
  {% endstep %}

{% step %}

### Decide what changed (full vs partial)

Normalize Shopify changes into one of these intents:

* **Full cancellation**: the entire order is cancelled.
* **Partial cancellation**: one or more items are cancelled/removed/adjusted.

Document your “partial cancel” representation.

Common patterns:

* ESW line-item cancel, Shopify uses refunds/adjustments.
* Shopify line-item edits, ESW uses item-level cancellation calls.
  {% endstep %}

{% step %}

### Apply Shopify-led cancellations to ESW

If Shopify is the source of truth:

* Map the Shopify order id to the ESW order reference.
* Send the cancellation intent to ESW:
  * Full order cancellation, or
  * Item-level cancellation with quantities and reasons (if supported)

Only cancel what ESW can still cancel.

Stop and alert if ESW has already shipped.
{% endstep %}

{% step %}

### Apply ESW-led cancellations to Shopify

If ESW can cancel post-import:

* Monitor ESW for cancellation events (order or line-item).
* Apply the corresponding update in Shopify using your chosen mechanism.

#### Shopify reference <i class="fa-code" style="color:$primary;">:code:</i> [orderCancel](https://shopify.dev/docs/api/admin-graphql/latest/mutations/orderCancel).

{% endstep %}

{% step %}

### Reconcile and monitor

Track and alert on:

* Cancellation write failures to either system
* Conflicts (already fulfilled, already refunded, already cancelled)
* Repeated retries / throttling

Add a daily reconciliation job for recent orders.
{% endstep %}
{% endstepper %}


# Appeasements

Reflect ESW-initiated appeasements (refunds or compensation) back into Shopify.

Sync appeasements between ESW and Shopify.

ESW can issue refunds or compensation after order import.

Mirror that financial state in Shopify to keep reporting aligned.

### Prerequisites

* You can receive appeasement events from ESW.
  * Webhook, message bus, or scheduled polling.
* You can call the Shopify Admin API (REST/GraphQL).
* You have a stable mapping between:
  * ESW order reference
  * Shopify order id / name
* You’ve defined your Shopify representation of appeasements.
  * Refund against line items.
  * Refund at order level.
  * Non-item compensation (gift card or custom item).

{% hint style="info" %}
Treat ESW events as at-least-once delivery.
{% endhint %}

### ESW-driven appeasement flow

{% stepper %}
{% step %}

### Capture appeasements in ESW

Listen for ESW appeasement activity at:

* Order level
* Item level

Capture these fields at minimum:

* ESW order reference
* Appeasement id (or another unique event id)
* Amount and currency
* Affected items and quantities (if item-level)
* Reason code / notes
* Timestamp
  {% endstep %}

{% step %}

### Normalize and validate the event

Before updating Shopify:

* Confirm the order exists in Shopify.
* Confirm currency matches the Shopify order currency.
* Confirm the appeasement is allowed for the order state.
  * Example: don’t refund beyond captured/paid totals.
* Deduplicate by appeasement id.
  {% endstep %}

{% step %}

### Map the appeasement to a Shopify action

Decide the Shopify primitive you will use:

* **Refund** for money back to the shopper.
* **Adjustment** or custom line for non-item compensation.

Keep the mapping deterministic.

The same ESW appeasement should always produce the same Shopify mutation.
{% endstep %}

{% step %}

### Apply the update in Shopify

Create the corresponding refund or adjustment in Shopify.

#### Shopify reference <i class="fa-code" style="color:$primary;">:code:</i> [refundCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/refundCreate).

Recommended behavior:

* Store the Shopify refund id you created.
* Retry transient failures.
* Stop and alert on validation errors.
  {% endstep %}

{% step %}

### Reconcile and monitor

Track and alert on:

* Shopify updates that fail or time out
* Mismatched totals between ESW and Shopify
* Duplicate events that would trigger double refunds

Add a daily job to reconcile recent appeasements if needed.
{% endstep %}
{% endstepper %}

### Related topics

<table data-view="cards"><thead><tr><th>Topic</th><th data-card-target data-type="content-ref">Link</th></tr></thead><tbody><tr><td>Order Management</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011">/spaces/69bGsllGv04t8wHIHruV/pages/87129aebd2293f4c97a2bd786b43a3faf3aa3011</a></td></tr><tr><td>Order and Item-Level Cancellations</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/465a1bf0f89a80277189e786d587a8c0a0e877cf">/spaces/69bGsllGv04t8wHIHruV/pages/465a1bf0f89a80277189e786d587a8c0a0e877cf</a></td></tr><tr><td>Shipping Address Update</td><td><a href="/spaces/69bGsllGv04t8wHIHruV/pages/c2f06d89166f7979ba488c174a09bf8dbc3b2849">/spaces/69bGsllGv04t8wHIHruV/pages/c2f06d89166f7979ba488c174a09bf8dbc3b2849</a></td></tr></tbody></table>


# Integration Workflow

Overview of the ESW-managed Shopify integration workflow across catalog sync, pricing import, order ingestion, address updates, fulfilment, and cancellations.

{% hint style="danger" %}

#### Managed Process

* Integration is implemented by ESW.
* Contact your ESW onboarding manager.
  {% endhint %}


# Product Catalog Integration

The app syncs Shopify product changes to ESW using Shopify webhooks and the ESW Catalog API.

### 1. Shopify Webhooks

The app subscribes to Shopify product creation and update events.

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><h2><i class="fa-webhook" style="color:$primary;">:webhook:</i></h2><h4>Shopify Webhook</h4></td><td align="center"><code>products/create</code></td><td><a href="/files/d7XJa1US1IBoAfj6XJMT">/files/d7XJa1US1IBoAfj6XJMT</a></td><td><a href="/files/ZL04KZjR6xCeHBD20H1Y">/files/ZL04KZjR6xCeHBD20H1Y</a></td><td><a href="https://shopify.dev/docs/api/admin-rest/latest/resources/webhook#event-topics-products-create">https://shopify.dev/docs/api/admin-rest/latest/resources/webhook#event-topics-products-create</a></td></tr><tr><td align="center"><h2><i class="fa-webhook" style="color:$primary;">:webhook:</i> </h2><h4>Shopify Webhook</h4></td><td align="center"><code>products/update</code></td><td><a href="/files/rLLdWJqjrcS1EayWHFXi">/files/rLLdWJqjrcS1EayWHFXi</a></td><td><a href="/files/IKsGMbeQQmDgTeBCiTeD">/files/IKsGMbeQQmDgTeBCiTeD</a></td><td><a href="https://shopify.dev/docs/api/admin-rest/latest/resources/webhook#event-topics-products-update">https://shopify.dev/docs/api/admin-rest/latest/resources/webhook#event-topics-products-update</a></td></tr></tbody></table>

### 2. API Integration

After receiving the product data, the app calls the ESW Catalog API endpoint

{% hint style="info" %}

#### **ESW API**

Product data from Shopify is posted to ESW using the ESW Catalog API.
{% endhint %}

## POST /api/v2/RetailerCatalog

> Allows a retailer to upload a catalog that will be subject to validation processing.

```json
{"openapi":"3.0.4","info":{"title":"Customs.Catalog.Api","version":"2.0.1447.0"},"servers":[{"url":"https://logistics-customscatalog-api.sandbox.eshopworld.com/"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","description":"Please insert JWT with Bearer into field","name":"Authorization","in":"header"}},"schemas":{"Customs.Catalog.Domain.Pkg.Models.DTO.RetailerCatalogProduct":{"required":["countryOfOrigin","description","material","name","productCode"],"type":"object","properties":{"productCode":{"minLength":1,"type":"string","description":"(Required) The brand's unique master identifier or SKU (Stock Keeping Unit)."},"name":{"minLength":1,"type":"string","description":"(Required) The name of the product."},"description":{"minLength":1,"type":"string","description":"(Required) The short description of the product."},"material":{"minLength":1,"type":"string","description":"(Required) A description of the material that the product is made of."},"countryOfOrigin":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.CountryIso"},"hsCode":{"type":"string","description":"The brand’s HSCode of the product.This should be a minimum of 6 digits.","nullable":true},"hsCodeRegion":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.Region"},"parentProductCode":{"type":"string","description":"SKU for a group of products that come in different versions (variants).","nullable":true},"category":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.Category"},"categoryDesc":{"type":"string","description":"eShopWorld category description for the product.","nullable":true,"readOnly":true},"gender":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.Gender"},"ageGroup":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.AgeGroup"},"size":{"type":"string","description":"(Optional) The size of the product.","nullable":true},"weight":{"type":"number","description":"(Optional*) The weight of the product in the associated WeightUnit.\n*This field is mandatory if you specify a weight unit.","format":"double","nullable":true},"weightUnit":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.WeightUnit"},"url":{"type":"string","description":"(Optional*) The product’s landing page.\n*This field is mandatory when Shipping to Russia and Japan.","nullable":true},"imageUrl":{"type":"string","description":"(Optional) The URL of the product’s main image thumbnail.","nullable":true},"unitPrice":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RetailerPrice"},"dangerousGoods":{"type":"boolean","description":"(Optional) Indicates if the product is classified a DangerousGood or Hazardous Material (HazMat).","nullable":true},"isCustomized":{"type":"boolean","description":"(Optional) Indicates if the product has been customized in any way from its Original Design.","nullable":true},"additionalProductCode":{"type":"string","description":"(Optional) An additional product code, or unique identifier,\nsuch as the manufacturer’s product code or SKU (Stock Keeping Unit),\nthat may be on or attached to the product.","nullable":true},"variantProductCode":{"type":"string","description":"(Optional) Another version of the brand's unique master identifier or SKU (Stock Keeping Unit).","nullable":true},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RestrictionDto"},"description":"(Optional) Identifies when a product should be Restricted from Sale in Certain Countries.","nullable":true},"isRestricted":{"type":"boolean","description":"(Optional) Identifies restriction on a product regardless of what country it's being sold to or any other product attributes.","nullable":true},"mid":{"type":"string","description":"(Optional) Identifies the Manufacturer ID.","nullable":true},"midAddressZip":{"type":"string","description":"(Optional) Identifies the Manufacturer's ZipCode","nullable":true},"additionalInformation":{"type":"string","description":"(Optional) Any other additional information about the product.","nullable":true},"categoryInformation":{"type":"string","description":"(Optional) Any other additional information about the product category.","nullable":true},"isSubscription":{"type":"boolean","description":"(Optional) Identifies if the product is a Subscription based product.","nullable":true},"eccn":{"type":"string","description":"ECCN","nullable":true},"ean":{"pattern":"^\\d{8}$|^\\d{13}$","type":"string","description":"(Optional) EAN","nullable":true},"upc":{"pattern":"^\\d{8}$|^\\d{12}$","type":"string","description":"(Optional) UPC","nullable":true}},"additionalProperties":false,"description":"Retailer Product Object"},"Customs.Catalog.Common.Pkg.Product.CountryIso":{"enum":["AD","AE","AF","AG","AI","AL","AM","AN","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CS","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW","TP"],"type":"string"},"Customs.Catalog.Common.Pkg.Product.Region":{"enum":["AD","AE","AL","AM","AU","AZ","BA","BY","BH","CA","CH","CL","CN","CO","EG","EU","GE","GI","HK","ID","IS","IL","IN","JP","KR","KW","KZ","LI","MA","MD","ME","MK","MX","MY","NO","NZ","PH","PR","QA","RS","RU","SA","SG","SM","TH","TL","TR","TW","UA","US","VN","XROW","ZA","XK","BR","MM","MO","PY","SK","AR","PE","DO","JO","KG","OM","BO","AF","AG","AI","AN","AO","AS","AW","BB","BD","BM","BZ","CR","CS","DZ","EC","ET","IO","IQ","FJ","JM","KE","KH","LA","LK","LR","LS","LY","MF","ML","MN","MQ","MR","MS","MV","MW","MZ","NA","NF","NG","NI","NP","NR","NU","PA","PK","PS","RW","SN","SO","SR","SS","SV","SX","TG","TT","TZ","UG","UY","UZ","VE","VU","WF","WS","YE","ZM","ZW","GB","TP","GW","JE","GT","KY","BN","TC","GP","GF","DM","GD","RE","LC","HN","KN","BF","BJ","BS","BW","CF","CG","CK","CM","CW","DJ","GA","GG","GH","GL","HT","LB","MU","NC","PG","SC","VC","VG","YT","CV","KM","SZ","VI","GY","BG","BI","CI","CU","EE","GM","HR","HU","LT","LV","MG","MT","NE","PL","SB","SI","SL","TD","TJ","TN","TO","CD","GN","VA","FK","MC","ST","AQ","AX","BL","BQ","BT","BV","CC","CX","EH","ER","FM","FO","GQ","GS","GU","HM","IM","IR","KI","KP","MH","MP","PF","PM","PN","PW","SH","SJ","SY","TF","TK","TM","TV","UM","IC"],"type":"string"},"Customs.Catalog.Common.Pkg.Product.Category":{"enum":["AnimalsPetSupplies","ApparelAccessories","ArtsEntertainment","BabyToddler","BusinessIndustrial","CamerasOptics","Electronics","FoodBeveragesTobacco","Furniture","Hardware","HealthBeauty","HomeGarden","LuggageBags","Mature","Media","OfficeSupplies","ReligiousCeremonial","Software","SportingGoods","ToysGames","VehiclesParts","PerfumeryCosmeticToiletPreparations","SoapPolishCandlesEtc","AlbuminoidalSubstances","ExplosivesEtc","PhotographicCinematographicGoods","MiscellaneousChemicalProducts","Plastics","Rubber","RawHidesAndSkins","ArticlesOfLeather","FurskinsAndArtificialFur","Wood","Cork","ManufacturesOfStrawBasketwareAndWickerwork","PulpOfWoodScrapPaperPaperboard","PaperAndPaperboard","PrintedBooksNewspapers","Silk","WoolAndAnimalHair","Cotton","OtherVegetableTextileFibres","ManMadeFilaments","ManMadeStapleFibres","WaddingSpecialYarnsTwine","CarpetsAndFloorCoverings","SpecialWovenFabrics","IndustrialTextileFabricsAndTextileArticles","KnittedCrochetedFabrics","ApparelClothingKnitted","ApparelClothingNotKnitted","OtherMadeupWornTextileArticles","Footwear","Headgear","UmbrellasAndWalkingSticks","FeathersAndDownArticlesAndArtificialFlowers","ArticlesOfStone","CeramicProducts","GlassAndGlassware","PreciousStonesMetalsAndJewelry","IronAndSteel","ArticlesOfIronSteel","CopperAndArticlesThereof","NickelAndArticlesThereof","AluminumAndArticlesThereof","LeadAndArticlesThereof","ZincAndArticlesThereof","TinAndArticlesThereof","OtherBaseMetalsAndArticlesThereof","ToolsImplementsCutlery","MiscellaneousArticlesOfBaseMetal","NuclearReactorsBoilersMachinery","ElectricalMachinerySoundAndTv","RailwayTramwayLocomotivesRollingStock","VehiclesOtherThanRailwayTramwayRollingStock","AircraftSpacecraft","ShipsBoatsAndFloatingStructures","OpticalPhotographicCinematographicMeasuringMedicalInstruments","ClocksAndWatches","MusicalInstruments","ArmsAndAmmunition","FurnitureAndFurnishings","ToysGamesAndSports","MiscellaneousManufacturedArticles","WorksOfArtAndAntiques","CompleteIndustrialPlant","SpecialCombinedNomenclatureCodes","Digital","ReturnsLabels","DigitalGiftCard"],"type":"string"},"Customs.Catalog.Common.Pkg.Product.Gender":{"enum":["Male","Female","Unisex"],"type":"string"},"Customs.Catalog.Common.Pkg.Product.AgeGroup":{"enum":["Newborn","Infant","Toddler","Kids","Adult","OlderKids","Teen"],"type":"string"},"Customs.Catalog.Common.Pkg.Product.WeightUnit":{"enum":["Lb","Kg"],"type":"string"},"Customs.Catalog.Domain.Pkg.Models.DTO.RetailerPrice":{"type":"object","properties":{"amount":{"type":"number","description":"Amount","format":"double","nullable":true},"currency":{"$ref":"#/components/schemas/Customs.Catalog.Common.Pkg.Product.CurrencyIso"}},"additionalProperties":false,"description":"(Optional *) Price of the product.\n*This field is mandatory if you specify a unitPriceCurrencyIso."},"Customs.Catalog.Common.Pkg.Product.CurrencyIso":{"enum":["ARS","AUD","AZN","BHD","BDT","BBD","BYR","BYN","BZD","BMD","BOB","BRL","BGN","KHR","CAD","CLP","CNY","COP","CRC","HRK","CZK","DKK","DOP","EGP","EUR","GIP","GTQ","HNL","HKD","HUF","INR","IDR","ILS","JMD","JPY","JOD","KZT","KWD","LVL","LTL","MYR","MVR","MXN","MDL","TWD","NZD","NIO","NOK","OMR","PKR","PAB","PYG","PEN","PHP","PLN","GBP","QAR","ROL","RON","RUB","SAR","SGD","ZAR","KRW","LKR","SEK","CHF","THB","TRY","UAH","AED","USD","VEF","VND","RSD","DZD","MOP","NGN","KES","MKD","BAM","ISK","AMD","ALL","GEL"],"type":"string"},"Customs.Catalog.Domain.Pkg.Models.DTO.RestrictionDto":{"type":"object","properties":{"type":{"type":"string","description":"Type of restriction.","nullable":true},"criteria":{"type":"string","description":"Criteria.","nullable":true},"countries":{"type":"array","items":{"type":"string"},"description":"List of countries or \"ALL\" marker restriction to be applied. For example: [\"ALL\"], [\"AU\", \"CH\"]","nullable":true}},"additionalProperties":false,"description":"(Optional) Identifies when a product should be Restricted from Sale in Certain Countries."},"Customs.Catalog.Domain.Pkg.Models.DTO.Error":{"type":"object","properties":{"message":{"type":"string","description":"Error message","nullable":true},"code":{"type":"integer","description":"Error code","format":"int32"}},"additionalProperties":false,"description":"Error information."}}},"paths":{"/api/v2/RetailerCatalog":{"post":{"tags":["RetailerCatalog"],"summary":"Allows a retailer to upload a catalog that will be subject to validation processing.","operationId":"api/v2/RetailerCatalog_POST","requestBody":{"description":"","content":{"application/json-patch+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RetailerCatalogProduct"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RetailerCatalogProduct"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RetailerCatalogProduct"}}},"application/*+json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.RetailerCatalogProduct"}}}}},"responses":{"202":{"description":"Accepted"},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.Error"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.Error"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Customs.Catalog.Domain.Pkg.Models.DTO.Error"}}}}}}}}}}
```


# Pricing Import

Fetch pricing rules from ESW Pricing Advisor and write fixed prices to Shopify markets.

### 1. ESW Pricing Advisor API

Call GET `api/4.0/StandardAdvice/{tenantCode}` to fetch FX rates, uplifts, duties, taxes, and rounding rules for each market.

## GET All available pricing advice for a brand.

> This endpoint can be used to retrieve all available pricing advice for a brand.

```json
{"openapi":"3.0.4","info":{"title":"Pricing Advisor API","version":"4.0"},"tags":[{"name":"StandardAdvice","description":"Pricing Advisor Controller V4"}],"servers":[{"url":"https://pricing-advisor-api.sandbox.eshopworld.com"}],"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"http","description":"Please insert JWT with Bearer into field","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"PricingAdviceResponse":{"type":"object","properties":{"id":{"type":"string","description":"Gets the identifier.","nullable":true,"readOnly":true},"version":{"type":"string","description":"Gets the version.","nullable":true,"readOnly":true},"countryIso":{"type":"string","description":"Gets the country iso.","nullable":true,"readOnly":true},"lastUpdated":{"type":"string","description":"The UTC date and time that this piece of pricing advice was last updated.","nullable":true,"readOnly":true},"tenantIdentifier":{"type":"string","description":"Gets the tenant identifier.","nullable":true,"readOnly":true},"fxRates":{"type":"array","items":{"$ref":"#/components/schemas/FxRateResponse"},"description":"Gets the fx rates.","nullable":true,"readOnly":true},"categories":{"type":"array","items":{"$ref":"#/components/schemas/CategoryResponse"},"description":"Gets the categories.","nullable":true,"readOnly":true},"merchandisePricingModel":{"$ref":"#/components/schemas/PricingModelResponse"}},"additionalProperties":false,"description":"Pricing Advice Response"},"FxRateResponse":{"type":"object","properties":{"from":{"type":"string","description":"Gets from.","nullable":true,"readOnly":true},"to":{"type":"string","description":"Gets to.","nullable":true,"readOnly":true},"rate":{"type":"number","description":"Gets the rate.","format":"double","readOnly":true}},"additionalProperties":false,"description":"Class FxRateResponse."},"CategoryResponse":{"type":"object","properties":{"id":{"type":"string","description":"Gets or sets the identifier.","nullable":true,"readOnly":true},"estimatedTax":{"type":"number","description":"Gets or sets the estimated tax.","format":"double","readOnly":true},"estimatedFee":{"type":"number","description":"Gets the estimated fee rate.","format":"double","readOnly":true},"estimatedDuty":{"type":"number","description":"Gets or sets the estimated duty.","format":"double","readOnly":true},"retailerAdjustment":{"type":"number","description":"Gets or sets the retailer adjustment.","format":"double","readOnly":true},"roundingConfigurations":{"type":"array","items":{"$ref":"#/components/schemas/RoundingConfigurationResponse"},"description":"Gets or sets the rounding models.","nullable":true,"readOnly":true},"currencyDisplays":{"type":"array","items":{"$ref":"#/components/schemas/CurrencyDisplayResponse"},"description":"Gets or sets the currency displays.","nullable":true,"readOnly":true}},"additionalProperties":false,"description":"Category"},"RoundingConfigurationResponse":{"type":"object","properties":{"currencyIso":{"type":"string","description":"Gets or sets the currency iso.","nullable":true,"readOnly":true},"currencyExponent":{"type":"integer","description":"Gets or sets the currency exponent.","format":"int32","readOnly":true},"direction":{"type":"string","description":"Gets or sets the rounding direction.","nullable":true,"readOnly":true},"model":{"type":"string","description":"Gets or sets the model.","nullable":true,"readOnly":true}},"additionalProperties":false,"description":"Rounding Model"},"CurrencyDisplayResponse":{"type":"object","properties":{"currencyIso":{"type":"string","description":"Gets or sets the currency iso.","nullable":true,"readOnly":true},"currencySymbol":{"type":"string","description":"Gets or sets the currency symbol.","nullable":true,"readOnly":true},"currencyExponent":{"type":"integer","description":"Gets or sets the currency exponent.","format":"int32","readOnly":true},"decimalSeparator":{"type":"string","description":"Gets or sets the decimal separator.","nullable":true,"readOnly":true},"thousandSeparator":{"type":"string","description":"Gets or sets the thousand separator.","nullable":true,"readOnly":true},"showTrailingZeros":{"type":"boolean","description":"Gets or sets a value indicating whether [show trailing zeros].","readOnly":true},"configurationString":{"type":"string","description":"Gets or sets the configuration string.","nullable":true,"readOnly":true}},"additionalProperties":false,"description":"Currency Display"},"PricingModelResponse":{"type":"object","properties":{"id":{"type":"string","description":"The input models ID.","nullable":true,"readOnly":true},"applicableRates":{"type":"array","items":{"type":"string"},"description":"The list of rates that are applicable to estimated prices based on the currency input model.","nullable":true,"readOnly":true}},"additionalProperties":false,"description":"Represents a pricing model response."},"ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/api/4.0/StandardAdvice/{tenantCode}":{"get":{"tags":["StandardAdvice"],"summary":"GET All available pricing advice for a brand.","description":"This endpoint can be used to retrieve all available pricing advice for a brand.","operationId":"GetAll","parameters":[{"name":"tenantCode","in":"path","description":"The tenant identifier.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PricingAdviceResponse"}}},"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PricingAdviceResponse"}}},"text/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PricingAdviceResponse"}}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}},"text/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

### 2. Shopify Admin API (GraphQL)

Upsert the calculated prices as fixed prices in Shopify.

Use Shopify price lists and the GraphQL mutation:

#### <i class="fa-hexagon-nodes" style="color:$primary;">:hexagon-nodes:</i> [priceListFixedPricesAdd](https://shopify.dev/docs/api/admin-graphql/latest/mutations/priceListFixedPricesAdd)

Implementation notes:

* Batch updates to stay within rate limits.
* Make writes idempotent.
* Log failures with enough data to replay.

### Shopify reference links

{% tabs %}
{% tab title="Fixed prices by country/market" %}
[Product prices by country (Shopify Help)](https://help.shopify.com/en/manual/international/pricing/product-prices-by-country#set-fixed-product-prices-using-the-shopify-api)
{% endtab %}

{% tab title="Fixed prices for specific variants" %}
[Set fixed prices for specific variants (Shopify Dev)](https://shopify.dev/docs/apps/build/markets/build-catalog#step-3-set-fixed-prices-for-specific-product-variants)
{% endtab %}
{% endtabs %}


# Order Ingestion

### 1. Shopify order webhook

Subscribe to Shopify’s order creation webhook.

<table data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><h2><i class="fa-webhook" style="color:$primary;">:webhook:</i></h2></td><td align="center"><code>orders/create</code></td><td><a href="/files/l7pL6vchwKVIHlSWnsQZ">/files/l7pL6vchwKVIHlSWnsQZ</a></td><td><a href="/files/Zn9WWvNhKVBMLfohh8Wa">/files/Zn9WWvNhKVBMLfohh8Wa</a></td><td><a href="https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-create">https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-create</a></td></tr></tbody></table>

### 2. ESW Create Order API

Call ESW `CreateOrder` to register the Shopify order in ESW.

## POST /v2/{tenantCode}/Order

> Creates an order.

```json
{"openapi":"3.0.1","info":{"title":"Order Transaction API","version":"v2"},"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","description":"Please insert JWT with Bearer into field","name":"Authorization","in":"header"}},"schemas":{"OrderCreate":{"required":["actionedBy","brandOrderReference","contactDetails","deliveryCountryIso","deliveryOption","lineItems","orderType","retailerCurrencyIso","shopperCurrencyIso","shopperExperience","transactionDateTime","transactionReference"],"type":"object","properties":{"brandOrderReference":{"minLength":1,"type":"string","description":"The Brand's order number."},"weight":{"$ref":"#/components/schemas/WeightInfo"},"orderType":{"$ref":"#/components/schemas/OrderType"},"parentBrandOrderReference":{"type":"string","description":"The parent order number.","nullable":true},"externalOrderId":{"type":"string","description":"ExternalOrderId.","nullable":true},"transactionReference":{"type":"string","description":"Unique reference number of the transaction","format":"uuid"},"transactionDateTime":{"type":"string","description":"The date/time logged by the retailer for the creation of the order in UTC.","format":"date-time"},"actionedBy":{"$ref":"#/components/schemas/ActionedBy"},"actionedByUser":{"type":"string","description":"Identifier for the person who initiated the action, for example, John Smith or johnsmith@test.com.","nullable":true},"shopperCurrencyIso":{"minLength":1,"type":"string","description":"ISO 4217 format three-letter identifier for the shopper currency."},"retailerCurrencyIso":{"minLength":1,"type":"string","description":"ISO 4217 format three-letter identifier for the retailer's currency."},"deliveryCountryIso":{"minLength":1,"type":"string","description":"ISO 3166 format two-letter country identifier for the delivery country."},"shopperExperience":{"$ref":"#/components/schemas/ShopperExperience"},"contactDetails":{"type":"array","items":{"$ref":"#/components/schemas/ContactDetail"},"description":"Shopper’s delivery or payment contact details. If multiple contactDetails are passed, they will be applied first-to-last."},"lineItems":{"type":"array","items":{"$ref":"#/components/schemas/OrderItemToCreate"},"description":"Attributes that describe the items in the cart. There can be multiple cart items. A minimum of one cart item is required."},"deliveryOption":{"$ref":"#/components/schemas/DeliveryOptionCreate"},"retailerInvoice":{"$ref":"#/components/schemas/RetailerInvoice"},"payment":{"$ref":"#/components/schemas/Payment"},"originDetails":{"$ref":"#/components/schemas/OriginDetails"},"metadataItems":{"type":"array","items":{"$ref":"#/components/schemas/MetadataItem"},"description":"Key-value pairs used for passing additional details. Use of metadataItems must be agreed with eShopWorld. This applies to all metadataItems within this API.","nullable":true},"channelType":{"type":"string","description":"Channel Type","nullable":true}},"additionalProperties":false,"description":"Order create request"},"WeightInfo":{"type":"object","properties":{"weightTotal":{"type":"number","description":"Total weight of the order.","format":"double"},"weightUnit":{"$ref":"#/components/schemas/WeightUnit"}},"additionalProperties":false,"description":"(Required) Attributes that describe the package weight data."},"WeightUnit":{"enum":["KG","LB"],"type":"string","description":"Unit of measurement for the items in the package. 0 indicates KG and 1 indicates LB."},"OrderType":{"enum":["Offline","Checkout","NonCheckoutEcommerce"],"type":"string","description":"OrderType"},"ActionedBy":{"enum":["Retailer","Shopper","EShopWorld","ThirdParty"],"type":"string","description":"To define Who initiated the request"},"ShopperExperience":{"required":["shopperCultureLanguageIso"],"type":"object","properties":{"shopperCultureLanguageIso":{"minLength":1,"type":"string","description":"Preferred language and culture experience for the shopper in the ISO 639-1 and ISO 3166 format."},"registeredProfileId":{"type":"string","description":"Customer profile Id or number","nullable":true}},"additionalProperties":false,"description":"Shopper Experience"},"ContactDetail":{"required":["address1","city","contactDetailsType","country","email","firstName","lastName","telephone"],"type":"object","properties":{"contactDetailsType":{"$ref":"#/components/schemas/ContactDetailsType"},"nickName":{"type":"string","description":"Nickname or identifier for the contact information.","nullable":true},"addressId":{"type":"string","description":"Address Identifier","nullable":true},"firstName":{"minLength":1,"type":"string","description":"First name of the address."},"lastName":{"minLength":1,"type":"string","description":"Last name of the address."},"address1":{"minLength":1,"type":"string","description":"Address line 1 of the address."},"address2":{"type":"string","description":"Address line 2 of the address.","nullable":true},"address3":{"type":"string","description":"Address line 3 of the address.","nullable":true},"city":{"minLength":1,"type":"string","description":"City of the address."},"postalCode":{"type":"string","description":"Postal code or zip code of the address.","nullable":true},"region":{"type":"string","description":"Region, province, state, or county of the address. ISO can be provided, if available.","nullable":true},"country":{"minLength":1,"type":"string","description":"ISO 3166 two-letter country code of the address."},"email":{"minLength":1,"type":"string","description":"Email address."},"telephone":{"minLength":1,"type":"string","description":"Phone number."},"gender":{"$ref":"#/components/schemas/Gender"},"poBox":{"type":"string","description":"Postal order box of the address.","nullable":true}},"additionalProperties":false,"description":"Contact Details"},"ContactDetailsType":{"enum":["IsDelivery","IsPayment","IsDeliveryAndPayment","IsStoreDelivery"],"type":"string","description":"ContactDetailsType"},"Gender":{"enum":["None","Male","Female","Unisex"],"type":"string","description":"Gender"},"OrderItemToCreate":{"required":["lineItemId","product","quantity"],"type":"object","properties":{"lineItemId":{"minLength":1,"type":"string","description":"Item sequence or line item ID."},"quantity":{"type":"integer","description":"Number of product pieces. Matches the length of the articles property","format":"int32"},"estimatedDeliveryDateFromRetailer":{"type":"string","description":"Estimated delivery date of the cart items in the ISO 8601 format. This date is for the first leg of the journey.","format":"date-time","nullable":true},"product":{"$ref":"#/components/schemas/ProductCreate"},"metadataItems":{"type":"array","items":{"$ref":"#/components/schemas/MetadataItem"},"description":"Key-value pairs used for passing additional details. Use of metadataItems must be agreed with eShopWorld. This applies to all metadataItems within this API.","nullable":true}},"additionalProperties":false,"description":"Cart Items"},"ProductCreate":{"required":["description","productCode","productUnitPriceInfo","title"],"type":"object","properties":{"title":{"minLength":1,"type":"string","description":"Localized title of the product. If no title is provided, eShopWorld may use the description from the Product Catalog."},"description":{"minLength":1,"type":"string","description":"Localized description of the product. If no description is provided, eShopWorld may use the description from the Product Catalog."},"customsDescription":{"type":"string","description":"Localized description of the product. If no description is provided, eShopWorld may use the description from the Product Catalog.","nullable":true},"productCode":{"minLength":1,"type":"string","description":"Unique identification code or SKU for the product."},"hsCode":{"type":"string","description":"HsCode.","nullable":true},"countryOfOriginIso":{"type":"string","description":"CountryOfOrigin.","nullable":true},"imageUrl":{"type":"string","description":"Thumbnail image URL of the product. The image size must be less than or equal to 20 KB and the image must be retina-ready.","nullable":true},"color":{"type":"string","description":"Color of the item.","nullable":true},"size":{"type":"string","description":"Size of the item.","nullable":true},"productUnitPriceInfo":{"$ref":"#/components/schemas/PriceInfo"},"wholesalePriceInfo":{"$ref":"#/components/schemas/PriceInfo"},"weightInfo":{"$ref":"#/components/schemas/WeightInfo"},"isReturnProhibited":{"type":"boolean","description":"Indicates whether the item is returnable or not under the regular return policy. The values are True or False.","nullable":true},"isCustomized":{"type":"boolean","description":"Indicates whether the item is customized or not. The values are True or False."}},"additionalProperties":false,"description":"Product"},"PriceInfo":{"type":"object","properties":{"price":{"$ref":"#/components/schemas/Money"}},"additionalProperties":false,"description":"Price Info"},"Money":{"type":"object","properties":{"currency":{"type":"string","description":"Currency three-letter identifier (in the ISO 4217 format).","nullable":true},"amount":{"type":"string","description":"The amount of the currency.","nullable":true}},"additionalProperties":false,"description":"Money"},"MetadataItem":{"type":"object","properties":{"name":{"type":"string","description":"Metadata name/key.","nullable":true},"value":{"type":"string","description":"Metadata value.","nullable":true}},"additionalProperties":false,"description":"Key and value pairs to pass metadata information."},"DeliveryOptionCreate":{"required":["eshopDeliveryOptionCode","priceInfo"],"type":"object","properties":{"priceInfo":{"$ref":"#/components/schemas/PriceInfo"},"eshopDeliveryOptionCode":{"$ref":"#/components/schemas/ServiceLevel"},"estimatedDeliveryDateToShopper":{"type":"string","description":"Estimated delivery date of the items in the cart in the ISO 8601 format for the non-eShopWorld delivery option. This date is the expected final delivery date to the shopper.","format":"date-time","nullable":true},"vatRate":{"type":"number","description":"Vat rate","format":"double"}},"additionalProperties":false,"description":"Delivery Option"},"ServiceLevel":{"enum":["DEFAULT","POST","EXP1","EXP2","RussiaExpress","Standard","PUDO"],"type":"string","description":"Service Levels."},"RetailerInvoice":{"type":"object","properties":{"number":{"type":"string","description":"RetailerInvoice number","nullable":true},"date":{"type":"string","description":"RetailerInvoice Date in the yyyy-MM-dd format","nullable":true}},"additionalProperties":false,"description":"RetailerInvoice details"},"Payment":{"type":"object","properties":{"method":{"type":"string","description":"Payment method used","nullable":true},"last4Digits":{"type":"string","description":"Last 4 digits of the payment card","nullable":true},"paymentAttemptRef":{"type":"string","description":"Payment attempt reference","format":"uuid","nullable":true},"priceInfo":{"$ref":"#/components/schemas/PriceInfo"},"deliveryPriceInfo":{"$ref":"#/components/schemas/PriceInfo"},"retailerPriceInfo":{"$ref":"#/components/schemas/PriceInfo"},"retailerDeliveryPriceInfo":{"$ref":"#/components/schemas/PriceInfo"},"paymentStatus":{"type":"string","description":"Payment Status","nullable":true},"merchantPaymentId":{"type":"string","description":"Merchant Payment Id","nullable":true},"paymentTime":{"type":"string","description":"The time when the payment was taken","format":"date-time"},"preAuthExpiryTime":{"type":"string","description":"The datetime when we can kick off the capture process for the payment","format":"date-time"},"authResult":{"type":"string","description":"Auth result of the payment","nullable":true}},"additionalProperties":false,"description":"Payment details"},"OriginDetails":{"required":["address1","city","country","email","originType"],"type":"object","properties":{"originType":{"$ref":"#/components/schemas/OriginType"},"firstName":{"type":"string","description":"First name of the address.","nullable":true},"lastName":{"type":"string","description":"Last name of the address.","nullable":true},"telephone":{"type":"string","description":"Phone number.","nullable":true},"nickName":{"type":"string","description":"Nickname or identifier for the contact information.","nullable":true},"addressId":{"type":"string","description":"Address Identifier","nullable":true},"address1":{"minLength":1,"type":"string","description":"Address line 1 of the address."},"address2":{"type":"string","description":"Address line 2 of the address.","nullable":true},"address3":{"type":"string","description":"Address line 3 of the address.","nullable":true},"city":{"minLength":1,"type":"string","description":"City of the address."},"postalCode":{"type":"string","description":"Postal code or zip code of the address.","nullable":true},"region":{"type":"string","description":"Region, province, state, or county of the address. ISO can be provided, if available.","nullable":true},"country":{"minLength":1,"type":"string","description":"ISO 3166 two-letter country code of the address."},"email":{"minLength":1,"type":"string","description":"Email address."},"gender":{"$ref":"#/components/schemas/Gender"},"poBox":{"type":"string","description":"Postal order box of the address.","nullable":true}},"additionalProperties":false,"description":"Origin Details"},"OriginType":{"enum":["None","Store"],"type":"string","description":"Payment methods"},"OrderTransactionApiResponse":{"type":"object","properties":{"transactionReference":{"type":"string","description":"Unique reference number of the transaction.\r\nIf the retailer sends this data, eSW will honor it. If the retailer does not send this data, eSW will generate the GUID for the transaction.","format":"uuid"}},"additionalProperties":false,"description":"Response from Order API"},"Error":{"type":"object","properties":{"code":{"type":"integer","description":"Error Identifier code","format":"int32"},"message":{"type":"string","description":"Error Message","nullable":true}},"additionalProperties":false,"description":"Error Response"},"ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/v2/{tenantCode}/Order":{"post":{"tags":["Order"],"summary":"Creates an order.","operationId":"OrderCreate","parameters":[{"name":"tenantCode","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCreate"}}}},"responses":{"202":{"description":"The request is accepted, but not processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderTransactionApiResponse"}}}},"400":{"description":"The request is invalid","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}}},"401":{"description":"The request is unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"The request is forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Internal server error"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}}}
```


# Address Update

Capture post-purchase shipping address changes in Shopify and sync them to ESW.

### 1. Subscribe to the Order Updates Webhook in Shopify <a href="#id-1-subscribe-to-the-order-updates-webhook-in-shopify" id="id-1-subscribe-to-the-order-updates-webhook-in-shopify"></a>

Listen for the `orders/updated` webhook to track shipping address updates made to an order.

<table data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><h2><i class="fa-webhook" style="color:$primary;">:webhook:</i> </h2><p><code>orders/updated</code></p></td><td><a href="/files/8uBoR4UpqWLFCtycVZoX">/files/8uBoR4UpqWLFCtycVZoX</a></td><td><a href="/files/MOVOzmFm08yF5bliCROB">/files/MOVOzmFm08yF5bliCROB</a></td><td><a href="https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-updated">https://shopify.dev/docs/api/admin-rest/2025-04/resources/webhook#event-topics-orders-updated</a></td></tr></tbody></table>

***

### 2. ESW API Call <a href="#id-2-esw-api-call" id="id-2-esw-api-call"></a>

Sync shipping address changes to ESW using the Update Contact Details API.

## Update Order Contact details

> Method to update Order Address info by using brand order reference

```json
{"openapi":"3.0.1","info":{"title":"Order Transaction API","version":"v2"},"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","description":"Please insert JWT with Bearer into field","name":"Authorization","in":"header"}},"schemas":{"UpdateOrderContacts":{"required":["actionedBy","contactDetails","transactionDateTime","transactionReference"],"type":"object","properties":{"transactionReference":{"type":"string","description":"Unique reference number of the transaction","format":"uuid"},"transactionDateTime":{"type":"string","description":"The date/time logged by the retailer for the creation of the order in UTC.","format":"date-time"},"actionedBy":{"$ref":"#/components/schemas/ActionedBy"},"actionedByUser":{"type":"string","description":"Identifier for the person who initiated the action, for example, John Smith or johnsmith@test.com.","nullable":true},"contactDetails":{"$ref":"#/components/schemas/UpdateContactDetail"}},"additionalProperties":false,"description":"Update Contact details like address info."},"ActionedBy":{"enum":["Retailer","Shopper","EShopWorld","ThirdParty"],"type":"string","description":"To define Who initiated the request"},"UpdateContactDetail":{"required":["address1","city","contactDetailsType","email","postalCode","telephone"],"type":"object","properties":{"contactDetailsType":{"$ref":"#/components/schemas/UpdateContactDetailsType"},"address1":{"minLength":1,"type":"string","description":"Address line 1 of the address."},"address2":{"type":"string","description":"Address line 2 of the address.","nullable":true},"address3":{"type":"string","description":"Address line 3 of the address.","nullable":true},"city":{"minLength":1,"type":"string","description":"City of the address."},"postalCode":{"minLength":1,"type":"string","description":"Postal code or zip code of the address."},"region":{"type":"string","description":"Region, province, state, or county of the address. ISO can be provided, if available.","nullable":true},"email":{"minLength":1,"type":"string","description":"Email address."},"telephone":{"minLength":1,"type":"string","description":"Phone number."}},"additionalProperties":false,"description":"Update Contact Details"},"UpdateContactDetailsType":{"enum":["IsDelivery"],"type":"string","description":"ContactDetailsType"},"OrderTransactionApiResponse":{"type":"object","properties":{"transactionReference":{"type":"string","description":"Unique reference number of the transaction.\r\nIf the retailer sends this data, eSW will honor it. If the retailer does not send this data, eSW will generate the GUID for the transaction.","format":"uuid"}},"additionalProperties":false,"description":"Response from Order API"},"Error":{"type":"object","properties":{"code":{"type":"integer","description":"Error Identifier code","format":"int32"},"message":{"type":"string","description":"Error Message","nullable":true}},"additionalProperties":false,"description":"Error Response"},"ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/v2/{tenantCode}/Order/{brandOrderReference}/ContactDetails":{"put":{"tags":["Order"],"summary":"Update Order Contact details","description":"Method to update Order Address info by using brand order reference","operationId":"ContactDetails","parameters":[{"name":"brandOrderReference","in":"path","description":"","required":true,"schema":{"type":"string"}},{"name":"tenantCode","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateOrderContacts"}}}},"responses":{"202":{"description":"The request is accepted, but not processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderTransactionApiResponse"}}}},"400":{"description":"The request is not valid","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Internal server error"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}}}
```


# Fulfilment and Shipping

Sync ESW shipment and tracking updates back into Shopify fulfillments.

ESW drives fulfillment execution.

Use ESW shipping events to create Shopify fulfillments.

### 1. ESW `PackageEvent`

Listen for ESW `PackageEvent` messages.

Use them to capture:

* Tracking number(s)
* Carrier details
* Shipped line items and quantities
* A stable package/event identifier for deduplication

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td align="center"><h2><i class="fa-truck-fast" style="color:$primary;">:truck-fast:</i></h2><h4>ESW event</h4></td><td align="center"><code>PackageEvent</code></td><td><a href="/files/l7pL6vchwKVIHlSWnsQZ">/files/l7pL6vchwKVIHlSWnsQZ</a></td><td><a href="/files/Zn9WWvNhKVBMLfohh8Wa">/files/Zn9WWvNhKVBMLfohh8Wa</a></td></tr></tbody></table>

{% hint style="info" %}
Treat ESW events as at-least-once delivery.

Deduplicate and make Shopify writes idempotent.
{% endhint %}

### 2. Shopify Admin API (GraphQL)

Create the Shopify fulfillment for the items shipped in the package.

#### Shopify reference <i class="fa-code" style="color:$primary;">:code:</i> [fulfillmentCreateV2](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentCreateV2)

Implementation notes:

* Create one Shopify fulfillment per ESW package when possible.
* Create partial fulfillments when the package ships a subset of items.
* Store the Shopify fulfillment id against the ESW package id.
* Update tracking info consistently for replays and retries.


# Cancellations

Keep cancellation state in sync between Shopify and ESW (full and item-level).

### A. Order-Level Cancellations <a href="#a-order-level-cancellations" id="a-order-level-cancellations"></a>

#### 1. Shopify to ESW

When an order is cancelled in Shopify, the cancellation is sent to ESW through the **Cancel Order API**, ensuring both platforms remain synchronized.

## Cancels the entire order, that is, all line items in the order are cancelled.

> Method to cancel an order by brand order reference

```json
{"openapi":"3.0.1","info":{"title":"Order Transaction API","version":"v2"},"security":[{"Bearer":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","description":"Please insert JWT with Bearer into field","name":"Authorization","in":"header"}},"schemas":{"OrderActivityRequest":{"required":["actionedBy","activityStatus","reasonCode","transactionDateTime","transactionReference"],"type":"object","properties":{"activityStatus":{"$ref":"#/components/schemas/ActivityStatus"},"reasonCode":{"$ref":"#/components/schemas/OrderActivityReasonCode"},"settlementReference":{"type":"string","description":"Unique reference number of the settlement transaction. When the Retailer is using “self-billing” Settlement model, this field should be sent.","nullable":true},"transactionReference":{"type":"string","description":"Unique reference number of the transaction","format":"uuid"},"transactionDateTime":{"type":"string","description":"The date/time logged by the retailer for the creation of the order transaction in UTC.","format":"date-time"},"actionedBy":{"$ref":"#/components/schemas/ActionedBy"},"actionedByUser":{"type":"string","description":"Identifier for the person who initiated the action, for example, John Smith or johnsmith@test.com.","nullable":true}},"additionalProperties":false,"description":"OrderActivityRequest"},"ActivityStatus":{"enum":["Cancel","Fulfil"],"type":"string","description":"ActivityStatus"},"OrderActivityReasonCode":{"enum":["ShopperCancel","RetailerCancel","Fraud"],"type":"string","description":"Order Activity Reason Code"},"ActionedBy":{"enum":["Retailer","Shopper","EShopWorld","ThirdParty"],"type":"string","description":"To define Who initiated the request"},"OrderTransactionApiResponse":{"type":"object","properties":{"transactionReference":{"type":"string","description":"Unique reference number of the transaction.\r\nIf the retailer sends this data, eSW will honor it. If the retailer does not send this data, eSW will generate the GUID for the transaction.","format":"uuid"}},"additionalProperties":false,"description":"Response from Order API"},"Error":{"type":"object","properties":{"code":{"type":"integer","description":"Error Identifier code","format":"int32"},"message":{"type":"string","description":"Error Message","nullable":true}},"additionalProperties":false,"description":"Error Response"},"ProblemDetails":{"type":"object","properties":{"type":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"status":{"type":"integer","format":"int32","nullable":true},"detail":{"type":"string","nullable":true},"instance":{"type":"string","nullable":true}},"additionalProperties":{}}}},"paths":{"/v2/{tenantCode}/Order/{brandOrderReference}/OrderActivity":{"post":{"tags":["Order"],"summary":"Cancels the entire order, that is, all line items in the order are cancelled.","description":"Method to cancel an order by brand order reference","operationId":"OrderActivity","parameters":[{"name":"brandOrderReference","in":"path","description":"Retailer's unique reference number for the order","required":true,"schema":{"type":"string"}},{"name":"tenantCode","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Order Activity Details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderActivityRequest"}}}},"responses":{"202":{"description":"The request is accepted, but not processed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderTransactionApiResponse"}}}},"400":{"description":"The request is invalid","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}}},"401":{"description":"The request is unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"403":{"description":"The request is forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"404":{"description":"No order found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}},"500":{"description":"Internal server error"},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemDetails"}}}}}}}}}
```

#### 2. ESW to Shopify

When ESW cancels an order, the update is communicated to Shopify using the GraphQL `orderCancel` mutation, so both systems display the same order status.

### B. Item-Level Cancellations <a href="#b-item-level-cancellations" id="b-item-level-cancellations"></a>

#### 1. Shopify Item Cancellations

Cancelling specific items in Shopify triggers the ESW Item Cancel API, updating ESW.

#### 2. ESW Item Cancellations

When ESW cancels individual items, Shopify is updated using the `refundCreate` API.


# SFCC Integration

Start here for ESW Salesforce Commerce Cloud integration guides, including installation, setup, and onboarding resources

Use the ESW SFCC cartridge to connect Salesforce Commerce Cloud with ESW services.

This integration supports localized pricing, international checkout, order sync, and storefront localization across supported markets.

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

### What this integration includes

Use the SFCC cartridge to add core ESW capabilities to your storefront:

* localized pricing with fixed, calculated, or hybrid models
* checkout routing for ESW-supported and native countries
* order, shipping, catalog, and returns integrations

For example, a shopper in Sweden can see localized pricing in `SEK`, enter ESW Checkout, and have the confirmed order synced back into SFCC.

A shopper in a non-supported market stays on the native SFCC flow with native pricing and checkout.

{% tabs %}
{% tab title="Choose your starting point" %}
Start with the path that matches your implementation stage:

* New implementation — [Get Started](/salesforce-commerce-cloud/salesforce-commerce-cloud/get-started)
* Cartridge install — [Cartridge Installation](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-installation)
* Storefront customization — [Cartridge Setup](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-setup)
  {% endtab %}

{% tab title="Supported storefront architectures" %}
Choose the guide for your storefront architecture:

* [Storefront Reference Architecture](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-installation/storefront-reference-architecture)
* [Composable Storefront](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-installation/composable-storefront)
* [Headless (OCAPI) Architecture](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-installation/headless-ocapi-architecture)

If you use SiteGenesis, follow the [SiteGenesis installation guide](/salesforce-commerce-cloud/salesforce-commerce-cloud/cartridge-installation/sitegenesis).
{% endtab %}

{% tab title="Common implementation areas" %}
Use these sections as your main references during implementation:

* [Pricing](/salesforce-commerce-cloud/salesforce-commerce-cloud/pricing) for localized price construction, price books, FX, and rounding
* [Checkout Integration](/salesforce-commerce-cloud/salesforce-commerce-cloud/checkout-integration) for checkout routing, metadata, payment, and order confirmation
* [Catalog and Product Integration](/salesforce-commerce-cloud/salesforce-commerce-cloud/catalog-and-product-integration) for catalog feeds, restrictions, and localization

Use [Shipping and Fulfilment](/salesforce-commerce-cloud/salesforce-commerce-cloud/shipping-and-fulfilment) for shipping methods, packages, and multi-origin flows.

Use [Order Management](/salesforce-commerce-cloud/salesforce-commerce-cloud/order-management) and [Returns and Refunds](/salesforce-commerce-cloud/salesforce-commerce-cloud/returns-and-refunds) for post-checkout operations.
{% endtab %}
{% endtabs %}

### Sample implementation flow

{% stepper %}
{% step %}

### Install the cartridge

Import metadata, services, and jobs.

Add the cartridge to your active code version.
{% endstep %}

{% step %}

### Configure Business Manager

Set site preferences, services, content slots, and payment methods.

Enable the ESW module and run initial data population jobs.
{% endstep %}

{% step %}

### Apply storefront integration

Implement the setup for your architecture.

Then configure pricing, checkout, shipping, and order flows.
{% endstep %}

{% step %}

### Validate before launch

Recommended validation path. Before launch, review these pages:

* [Testing Guide](/salesforce-commerce-cloud/salesforce-commerce-cloud/testing-and-launch/testing-guide)
* [Go-Live Readiness](/salesforce-commerce-cloud/salesforce-commerce-cloud/testing-and-launch/going-live/go-live-readiness)
* [Checklist](/salesforce-commerce-cloud/salesforce-commerce-cloud/testing-and-launch/going-live/checklist)
  {% endstep %}
  {% endstepper %}


# Get Started

Install and configure the ESW cartridge in Salesforce Commerce Cloud (SFCC), including prerequisites and initial setup steps

This guide provides step-by-step instructions for installing and configuring the **ESW cartridge** in **Salesforce Commerce Cloud (SFCC)**.

The ESW cartridge enables SFCC to integrate with ESW’s services, including:

* Localized pricing
* Checkout integration
* Payment integration

### Prerequisites

{% hint style="warning" %}
SFCC sandbox instances include preconfigured sites—such as **RefArch**, **RefArch Global**, **SiteGenesis**, and **SiteGenesis EU**—in their native configurations. These serve as the foundation for building a custom eCommerce experience. This documentation is based on the **RefArch** architecture.
{% endhint %}

Before you begin the installation, ensure you have the following:

* **Access to an SFCC instance** ( **SIG** or **PIG**) with SFCC Business Manager.
* **API credentials** provided by **ESW**.


# Prerequisites

Installing and configuring the ESW cartridge in Salesforce Commerce Cloud (SFCC)

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

The ESW cartridge enables SFCC to integrate with ESW’s services, including:

* Localized pricing
* Checkout integration
* Payment integration

### Prerequisites

{% hint style="info" icon="salesforce" %}
SFCC sandbox instances include preconfigured sites—such as **RefArch**, **RefArch Global**, **SiteGenesis**, and **SiteGenesis EU**—in their native configurations. These serve as the foundation for building a custom eCommerce experience. This documentation is based on the **RefArch** architecture.
{% endhint %}

Before you begin the installation, ensure you have the following:

* **Access to an SFCC instance** (**SIG** or **PIG**) with SFCC Business Manager.
* **API credentials** provided by **ESW**.


# Download ESW Cartridge

You can download the ESW cartridge package from the AppExchange listing

{% embed url="<https://appexchange.salesforce.com/appxListingDetail?listingId=2d468409-b59d-485a-8b1f-98c2c1ab01e9&other_source=Web>" %}
Download Cartridge
{% endembed %}

### Package contents

The package includes:

* Cartridges for **SFRA**, **SiteGenesis**, **PWA**, and **Headless**
* Metadata files
* Job and service configuration files

### Installation

Copy the relevant cartridge folders into your **local development environment** to begin setup.


# Import Metadata

Import essential metadata files into Salesforce Commerce Cloud (SFCC)

Before using the ESW cartridge functionality, you must import essential metadata files into Salesforce Commerce Cloud (SFCC). These files configure custom objects, services, jobs, and site preferences required for proper cartridge operation.

### ESW Metadata Files

|      Metadata File Name      |                                                               Path                                                              |                 Description                |
| :--------------------------: | :-----------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------: |
|      `customobjects.xml`     |                                                `/link_eshopworld/Metadata/meta/`                                                |             ESW custom objects             |
|    `customobjects_pwa.xml`   |                                                `/link_eshopworld/Metadata/meta/`                                                |    ESW additional custom objects for PWA   |
|      `systemobjects.xml`     |                                                `/link_eshopworld/Metadata/meta/`                                                |        ESW system objects extensions       |
| `systemobjects_headless.xml` |                                                `/link_eshopworld/Metadata/meta/`                                                | ESW additional system objects for Headless |
|    `systemobjects_pwa.xml`   |                                                `/link_eshopworld/Metadata/meta/`                                                |    ESW additional system objects for PWA   |
|        `services.xml`        |                                                   `/link_eshopworld/Metadata/`                                                  |                ESW services                |
|          `jobs.xml`          |                                                   `/link_eshopworld/Metadata/`                                                  |                  ESW jobs                  |
|     `content-assets.xml`     | <p><code>/link\_eshopworld/Metadata/sites/SiteGenesis</code><br>or<br><code>/link\_eshopworld/Metadata/sites/RefArch</code></p> |             ESW content assets             |
|     `payment-methods.xml`    | <p><code>/link\_eshopworld/Metadata/sites/SiteGenesis</code><br>or<br><code>/link\_eshopworld/Metadata/sites/RefArch</code></p> |             ESW payment methods            |
|          `slots.xml`         | <p><code>/link\_eshopworld/Metadata/sites/SiteGenesis</code><br>or<br><code>/link\_eshopworld/Metadata/sites/RefArch</code></p> |                  ESW slots                 |

### Metadata Import Steps

To fully enable ESW cartridge functionality, the following metadata files must be imported into SFCC Business Manager using MERGE mode. This ensures existing configurations are preserved while new ones are added.

{% stepper %}
{% step %}

#### Import customobjects.xml, systemobjects.xml, systemobjects\_headless.xml files

Navigate to **Administration > Site Development > Import & Export**

* Import in **MERGE** mode:
  * `customobjects.xml`
  * `systemobjects.xml`
  * `systemobjects_headless.xml`

![Image](/files/48029d5bb4f482e67d7b80b90cbaf1d92121b488)
{% endstep %}

{% step %}

#### Import services.xml, jobs.xml files

Navigate to **Administration > Site Development > Import & Export**

* Import in **MERGE** mode:
  * `services.xml`
  * `jobs.xml`
    {% endstep %}

{% step %}

#### Import content-assets.xml file

Navigate to **Administration > Site Development > Import & Export**

* Import in **MERGE** mode:
  * `content-assets.xml`
    {% endstep %}

{% step %}

#### Import payment-methods.xml file

Navigate to **Administration > Site Development > Import & Export**

* Import in **MERGE** mode:
  * `payment-methods.xml`
    {% endstep %}

{% step %}

#### Import slots.xml file

Navigate to **Administration > Site Development > Import & Export**

* Import in **MERGE** mode:
  * `slots.xml`
    {% endstep %}
    {% endstepper %}


# Upload metadata XML files

How to import metadata using the Business Manager

### Import Metadata

**Metadata** includes both system and custom objects required to enable the ESW integration.

{% tabs %}
{% tab title="System objects" %}
System objects are core SFCC components that define standard platform functionalities. They include the essential data structures required for the site’s basic operation, such as:

* Countries
* Currencies
* Shipping methods
  {% endtab %}

{% tab title="Custom Objects" %}
Custom objects enable business-specific configurations that extend the capabilities of SFCC. They provide flexibility to support additional capabilities, such as:

* Tenant credentials
* Pricing Advisor settings
  {% endtab %}
  {% endtabs %}

Together, these objects form the **metadata**, which defines the operational framework of SFCC.

### Steps to import metadata files

Follow these steps to import the metadata files included in the ESW package:

{% stepper %}
{% step %}

#### Navigate to Import & Export

Navigate to **Administration → Site Development → Import & Export**
{% endstep %}

{% step %}

#### Upload Metadata Files

Upload the **metadata XML files** included in the **ESW package**.

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


# Import Jobs and Services

How to import job and service configuration files using the Business Manager

**Jobs** and **services** enable automation and real-time communication between SFCC and ESW.

* **Jobs** – Execute scheduled tasks such as price updates or order exports.
* **Services** – Handle API interactions to ensure real-time data exchange between SFCC and ESW.

These components work together to automate processes like order processing, data synchronization, and pricing updates.

### Steps to import

Follow these steps to import the job and service configuration files included in the ESW package:

{% stepper %}
{% step %}

#### Navigate to Import & Export

Navigate to **Administration → Operations → Import & Export**
{% endstep %}

{% step %}

#### Upload ESW Package Files

* From the **ESW package**, upload:
  * **Jobs XML file**
  * **Services XML files**

The jobs file initializes automated tasks that maintain key aspects of the system, such as order processing and data synchronization.

Similarly, services enable SFCC to communicate with external systems in real time.

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


# Configure Content Slots and Payment Methods

How to configure content slots and payment methods

### Configure Content Slots

To enable **payment processing** and **layout customization**, you must import payment methods and content slots.

{% stepper %}
{% step %}

#### Navigate to Import & Export

Navigate to **Merchant Tools → Online Marketing → Import & Export**
{% endstep %}

{% step %}

#### Upload Content Slots File

* Upload the **content slots file** from the `/Sites` directory of the **ESW package**.

**Content slots** define configurable areas in the storefront that can display promotional content, or other dynamic elements.

Importing content slots ensures ESW marketing and UI components are available for storefront customization.

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

### Import Payment Methods

Follow these steps to import the ESW-supported payment methods.

{% stepper %}
{% step %}

#### Navigate to Import & Export

Navigate to **Merchant Tools → Ordering → Import & Export**

<div data-with-frame="true"><img src="/files/9a4555c1f48ce4420fbd3fff03d82bb40ad36e36" alt="Image"></div>
{% endstep %}

{% step %}

#### Import Payment Methods

* Go to **Payment Methods** and click **Import**.
* Upload the **ESW-supported payment methods** file to enable ESW transaction processing.
  {% endstep %}

{% step %}

#### Verify Payment Method Setup

* Upon successful import:
  * A new payment method **`ESW_PAYMENT`** is created.
  * This payment method is associated with the **`BASIC_CREDIT`** processor.

<div data-with-frame="true"><img src="/files/0c669ea5d416b66f161b5e93a5470b4ae46ccb06" alt="Image"></div>

Importing ESW-supported payment methods ensures compatibility with ESW’s checkout and payment processing.
{% endstep %}
{% endstepper %}


# Configure ESW Services

How to configure the ESW services

## ESWOAuthServices

The **EswOAuthService** is required for authentication across all ESW services, including critical endpoints such as the **Checkout** service. Configuration ensures secure and seamless integration between SFCC and ESW.

Follow these steps to configure **ESW Price Feed Service and Configure Checkout Service**

<table data-card-size="large" data-view="cards"><thead><tr><th>Section</th><th data-hidden data-card-target data-type="content-ref">Link</th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Configure ESW Price Feed Service</strong></td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/70060436547c143fb5e0e1537058e400b5a0a6fe#configure-esw-price-feed-service">/spaces/GUPR15ARSjXiz9aZEsDU/pages/70060436547c143fb5e0e1537058e400b5a0a6fe#configure-esw-price-feed-service</a></td><td data-object-fit="contain"><a href="/files/y2WjaH9yHDGIj0rHr2Ts">/files/y2WjaH9yHDGIj0rHr2Ts</a></td></tr><tr><td><strong>Configure Checkout Service</strong></td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/70060436547c143fb5e0e1537058e400b5a0a6fe#configure-checkout-service">/spaces/GUPR15ARSjXiz9aZEsDU/pages/70060436547c143fb5e0e1537058e400b5a0a6fe#configure-checkout-service</a></td><td data-object-fit="contain"><a href="/files/dZyNQDGvjUecv5SzCVl1">/files/dZyNQDGvjUecv5SzCVl1</a></td></tr></tbody></table>

#### Configure ESW Price Feed Service

{% stepper %}
{% step %}

#### Access Services

Navigate to **Administration → Operations → Services**

***

{% endstep %}

{% step %}

#### Configure `EswPriceFeedCredentials`

Configure the `EswPriceFeedCredentials` with the provided API URL, with support for both `V3` and `V4` versions.

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

***

### Configure Checkout Service

{% stepper %}
{% step %}

#### Access Services

Navigate to **Administration → Operations → Services**

***

{% endstep %}

{% step %}

#### Configure Checkout Service

Select `EswCheckoutV3Service.SFRA`

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

### Checkout configuration

Ensure that the following URL settings are set under **ESW URL Expansion Pair** in the ESW Checkout Configuration:

* `ContinueShoppingUrl|Home-Show`
* `BaseUrl|EShopWorld-Home`
* `BackToCartUrl|Cart-Show`


# Add Cartridge to SFCC

How to add the ESW cartridge to SFCC

### Adding the Cartridge to SFCC

Integrate the [downloaded ESW cartridge](/salesforce-commerce-cloud/salesforce-commerce-cloud/get-started/download-esw-cartridge) into your SFCC instance by appending the appropriate cartridge path to the site’s **cartridge path configuration**. The required cartridge path will vary depending on the site’s architecture.

* **SFRA**: `int_eshopworld_sfra:int_eshopworld_eckout:int_eshopworld_core:app_storefront_base:modules`
* **Site Genesis (SG)**: `int_eshopworld_controllers:int_eshopworld_eckout:int_eshopworld_core:SG_core:SG_controllers:modules`
* **Progressive Web App (PWA)**: `int_eshopworld_pwa:int_eshopworld_eckout:int_eshopworld_core`
* **Headless**: `int_eshopworld_headless:int_eshopworld_eckout:int_eshopworld_core`

### Steps to Configure Cartridge Path

{% stepper %}
{% step %}

#### **Access Settings**

Navigate to **Administration → Sites → Manage Sites → Your Site → Settings**
{% endstep %}

{% step %}

#### **Append ESW Cartridge Path**

In the **Cartridges** field, append the following path for **SFRA**:

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


# Enable and Configure ESW Module

How to enable and configure the ESW module in SFCC

### Enable and Configure ESW Module

Navigate to **Merchant Tools → Site Preferences → Custom Preferences → ESW General Configuration** to enable the ESW module.

### Cartridge Setup

Navigate to **Merchant Tools → Site Preferences → Custom Preferences → ESW General Configuration**

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

Within ESW General Configuration, specify:

* **ESW Module Enabled:** This is a mandatory attribute. It enables or disables the ESW Module at the site level.
* **ESW Allowed Languages:** The highlighted values represent languages to be considered as ESW Allowed Languages.
* **ESW Base Currency:** It sets the default/base currency at the site level.
* **Enable Geo Lookup (optional):** This option enables or disables the geo IP lookup. If the geo lookup is enabled, the shopper’s current location is determined when they access the site for the first time. If disabled, the country selectors are preselected with the first options from the selectors.

The below values will be provided by the ESW integration team.

* **ESW Retailer Brand Code (provided by IE):** This preference indicates the brand code of the current site.
* **ESW Client ID for the Authorization Request:** Indicates the client ID.
* **ESW Client Secret for Authorization Request:** Indicates the client secret.
* **ESW Basic Auth Enabled:** This option enables or disables basic authentication.

{% columns %}
{% column %}
{% hint style="info" %}

#### Sandbox Instance

The storefront uses **basic authentication**. If the storefront is protected, provide the **storefront username and password** for authentication.
{% endhint %}
{% endcolumn %}

{% column %}
{% hint style="info" %}

#### Production Instance

The retailer must provide **basic authentication credentials** to ESW. These credentials are used to configure **order confirmation endpoint basic authentication** on the ESW tenant side.
{% endhint %}
{% endcolumn %}
{% endcolumns %}

<div data-with-frame="true"><img src="/files/7c5651d44c3c725209d8ea496972d164db578678" alt="Image"></div>

* **ESW Production Client Secret:** For ESW pricing configuration enter the Client Secret for Price Feed authorization request. Navigate to **Merchant Tools > Site Preferences > Custom Preferences > ESW Pricing Configuration**.

<div data-with-frame="true"><img src="/files/4a5231f1c8be31aec0f861643e7506bc1c610373" alt="Image"></div>


# Run Initial Data Population Jobs

How to run initial data population jobs in SFCC

To finalize the setup, execute the key jobs that initialize essential data within SFCC. You can manually run a job from Business Manager to trigger specific backend processes as needed.

### Execute a job

{% stepper %}
{% step %}

#### Access Jobs

Navigate to Administration → Sites → Operations → Jobs

{% endstep %}

{% step %}

#### Run the Job

* Select the desired **job** from the list.
* Click **Run**.
* If the job is in **edit mode**, click **Run Now** instead.

This step is **not required** for the fixed price model, where Pricing Advisor data is not in use.

<div data-with-frame="true"><img src="/files/78eb8217d0ae3ef807c169baa368d02702f043c7" alt="Image"></div>

{% endstep %}
{% endstepper %}

### Key Jobs

{% tabs %}
{% tab title="Pricing Feed Job" %}

#### Pricing Feed Job (`eswRetailerPricingFeed`)

The `eswRetailerPricingFeed` job makes API calls to the retailer pricing feed and stores the retrieved data in a **custom object**. This data includes:

* FX rates
* Country adjustments
* Duties and taxes per country

{% hint style="info" %}

#### Important behavior

* The API call is **skipped** if the current day matches the day listed in the job’s preference.
* The `ESW_PA_DATA` custom object is updated **only once per day**.
* No further API calls are made for the remainder of that day.
  {% endhint %}
  {% endtab %}

{% tab title="Auto-configurator" %}

#### Retailer Auto-Configured Job (`eswRetailerAutoConfigurator`)

The `eswRetailerAutoConfigurator` job creates **country** and **currency** custom objects based on Pricing Advisor data stored in the `ESW_PA_DATA` custom object.

Prerequisite:

The `eswRetailerPricingFeed` job must run successfully **before** executing this job to ensure that the necessary pricing data is available.

{% hint style="info" %}

#### Recommended schedule

Run **bi-weekly** or **monthly**, or manually after a **country expansion**.
{% endhint %}
{% endtab %}

{% tab title="Verify Results" %}

#### Verifying the Results

After running these jobs:

1. Navigate to **Merchant Tools → Custom Objects → Custom Object Editor**
2. Locate the `ESW_COUNTRIES` object.
3. Select the countries supported by ESW and define the applicable pricing models.

![Image](/files/08bd9824a74558b95b990334355b6d00c1be4dd2)
{% endtab %}
{% endtabs %}

### Scheduling a job

Follow these steps to schedule a job.

{% stepper %}
{% step %}

#### Open Job in Edit Mode

Locate the desired job in **Business Manager** and open it in **edit mode**.
{% endstep %}

{% step %}

#### Set Schedule

* Click the **Schedule and History** tab.
* Configure the scheduling details according to your requirements.

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

### Optional Manual Configuration

Manual updates may be required for the following scenarios:

* Base Currency
* Pricing Model
* Non-supported Countries

{% tabs %}
{% tab title="Base Currency" %}
If the base currency differs from the site’s default, it should be configured accordingly.
{% endtab %}

{% tab title="Pricing Model" %}

* By default, the pricing model is **dynamic/calculated**.
* To switch to a **fixed** pricing model, check **'is Fixed Price Model'** in the country’s custom object.

For more details, see ESW [Pricing Models](/salesforce-commerce-cloud/salesforce-commerce-cloud/pricing/pricing-models).
{% endtab %}

{% tab title="Non-supported Countries" %}
Any country not supported by ESW must be added manually by the retailer.
{% endtab %}
{% endtabs %}


# Shipping Methods Integration

How to integrate shipping methods in SFCC

The shipping methods displayed on the ESW checkout depend on the **ESW Override Shipping** custom preference in the **ESW Checkout Configuration**.

{% tabs %}
{% tab title="When ESW Override Shipping is enabled for a specific country" %}

* ESW shipping methods are **overridden** with standard **SFCC shipping methods**.
* The shipping method overrides are sent to ESW via the **Checkout API**.
* The SFCC shipping methods are displayed during checkout.
  {% endtab %}

{% tab title="When ESW Override Shipping is disabled for a specific country" %}

* Shipping methods are retrieved from the **ESW tenant configuration**.
* These ESW shipping methods are displayed during checkout.
  {% endtab %}
  {% endtabs %}

### Displaying the SFCC Shipping Methods

Standard **SFCC shipping methods** are created with a specific currency. In the **custom site preference**, each shipping method ID is mapped to a specific country.

{% stepper %}
{% step %}

#### Create Shipping Methods

* Navigate to **Merchant Tools → Ordering → Shipping Methods**
* Create shipping methods with:
  * **Shipping names**
  * **Types** for currencies available to shoppers in the storefront
* Ensure each shipping method’s **name** and **type** are supported by **ESW**.

<div data-with-frame="true"><img src="/files/8def7087d75e9c22a8e135aa5158ffb6bfea961a" alt="Image"></div>

#### Example

**Name** and **Type** of each shipping method must be supported by ESW.

* `POST` for standard shipping
* `EXP2` for express shipping

The shipping method names must be either `POST` or `EXP2`. This naming rule is required by ESW. However, the ID can be any value. Configuring POST, EXP2, or any one of these two options for different currencies depends on the retailer’s business requirement.
{% endstep %}

{% step %}

#### Configure Shipping Method IDs for the country

Configure the IDs in a JSON format using the ESW Override Shipping custom site preference in [ESW Checkout Configuration](https://know.esw.com/space/TDR/1234637137/Merchant+Tools#ESW-Checkout-Configuration).

<div data-with-frame="true"><img src="/files/0ccc39b82903ad13da3545c2ed6dbb98edb93a83" alt="Image"></div>
{% endstep %}

{% step %}

#### Display ESW shipping override methods

* To display **ESW shipping override methods** on the cart page:
  * Enable custom preference **ESW Hide Native Shipping** in **ESW Retailer Display Configuration**

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

Once configured, the shipping methods are displayed at the checkout for the country.

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

{% step %}

#### Review the Go-Live Checklist

Final step is to review the [Go-Live Checklist](https://know.esw.com/space/TDR/1234639052/Go-Live+Checklist) to ensure a successful launch.
{% endstep %}

{% step %}

#### Verification on the Storefront

After completing the configuration, verify the following:

#### Currency and Pricing

Ensure currency and pricing display correctly on:

* **Product Display Page (PDP)**
* **Product Listing Page (PLP)**
* **Cart Page**

#### ESW Storefront Components

Confirm that ESW storefront components reflect the new configuration:

* **Header**
* **Footer**
* **Country Selector** widget

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

Once pricing data is converted and supported countries are selected, the storefront is ready for validation.

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

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


# Cartridge Installation

Install the ESW SFCC cartridge. Choose steps for SFRA, Composable, OCAPI, or SiteGenesis

Install the ESW cartridge into your SFCC codebase.

<table data-view="cards" data-full-width="false"><thead><tr><th>Architecture</th><th data-hidden data-card-target data-type="content-ref">Install guide</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td>Storefront Reference Architecture (SFRA)</td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/d4c777687961885f6bb72e48549cfd28fc78a515">/spaces/GUPR15ARSjXiz9aZEsDU/pages/d4c777687961885f6bb72e48549cfd28fc78a515</a></td><td><a href="/files/5GnetdEtwAyOgCnVPOF4">/files/5GnetdEtwAyOgCnVPOF4</a></td><td><a href="/files/4k8QzvXkxJrcF6f1N6Qb">/files/4k8QzvXkxJrcF6f1N6Qb</a></td></tr><tr><td>Composable Storefront</td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/00e2846fd994f7365de4ea5a6478c59754401582">/spaces/GUPR15ARSjXiz9aZEsDU/pages/00e2846fd994f7365de4ea5a6478c59754401582</a></td><td><a href="/files/Xmc6di5koSNJ6dIWC38S">/files/Xmc6di5koSNJ6dIWC38S</a></td><td><a href="/files/N1KWxL1khowPdt7N8puF">/files/N1KWxL1khowPdt7N8puF</a></td></tr><tr><td>Headless (OCAPI)</td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/2bbcf27440d894bdc982714891d277ec92358f80">/spaces/GUPR15ARSjXiz9aZEsDU/pages/2bbcf27440d894bdc982714891d277ec92358f80</a></td><td><a href="/files/7LqmbUyabScyevpqJh7g">/files/7LqmbUyabScyevpqJh7g</a></td><td><a href="/files/msrJH89A0knaIUpmiXFv">/files/msrJH89A0knaIUpmiXFv</a></td></tr><tr><td>SiteGenesis</td><td><a href="/spaces/GUPR15ARSjXiz9aZEsDU/pages/fe54aab1045eb3404b2bf164996a084ca9d07185">/spaces/GUPR15ARSjXiz9aZEsDU/pages/fe54aab1045eb3404b2bf164996a084ca9d07185</a></td><td><a href="/files/Jn0srx2zKmB977aG22C3">/files/Jn0srx2zKmB977aG22C3</a></td><td><a href="/files/5fTD1ThwbcqdPdfPqOS5">/files/5fTD1ThwbcqdPdfPqOS5</a></td></tr></tbody></table>


# SiteGenesis

Install the ESW SFCC cartridge for a SiteGenesis storefront, including cartridge paths and site data import.

Follow the steps below to install the ESW SiteGenesis cartridge for the first time:

{% stepper %}
{% step %}

### Clone the Repository

Clone the cartridge source code to your local machine.
{% endstep %}

{% step %}

### Import the Cartridges

* Import the following cartridges into your workspace:
  * `int_eshopworld_controllers`
  * `int_eshopworld_core`
* Link both cartridges to your SFCC server connection.
  {% endstep %}

{% step %}

### Import Site Data

* Navigate to `Metadata > Sitesdata`.
* Create a ZIP file for the site data folder (e.g., `sitesdata.zip`).
* Import this ZIP file into your SFCC instance.
  {% endstep %}

{% step %}

### Assign Cartridges to the Site

Assign the `int_eshopworld_controllers` and `int_eshopworld_core` cartridges to the site’s cartridge path. The cartridge path sequence should look like this:

```rb
int_eshopworld_controllers:int_eshopworld_core:app_storefront_base:
```

{% endstep %}

{% step %}

### Assign Cartridges to Business Manager

Assign the `int_eshopworld_controllers` and `int_eshopworld_core` cartridges to the business manager organization, for example:

```rb
int_eshopworld_controllers:int_eshopworld_core:bm_custom_plugin
```

{% endstep %}
{% endstepper %}


# Composable Storefront

Install the ESW PWA cartridge for SFCC Composable Storefront (PWA Kit), including site data, cartridge paths, and SCAPI setup.

<table data-card-size="large" data-view="cards"><thead><tr><th align="center"></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td align="center"><h3><img src="/files/PLpqYV2SJI2DNL3jfwZJ" alt="" data-size="line"> SFCC PWA</h3></td><td align="center">The ESW PWA cartridge is developed for use with the SFCC PWA (SFCC Progressive Web-App) Kit. To use this cartridge make sure you already have a working PWA environment</td><td></td></tr><tr><td align="center"><h3><i class="fa-github-alt">:github-alt:</i> Github</h3></td><td align="center">The Salesforce Commerce Cloud PWA Kit provides a modern, headless front-end framework for building Progressive Web App (PWA) storefronts on SFCC.  <i class="fa-up-right-from-square">:up-right-from-square:</i></td><td><a href="https://github.com/SalesforceCommerceCloud/pwa-kit">https://github.com/SalesforceCommerceCloud/pwa-kit</a></td></tr></tbody></table>

## Installing the Cartridge (PWA)

Follow these steps to install the ESW PWA cartridge for the first time:

{% stepper %}
{% step %}

### Clone the Repository

Clone the ESW cartridge repository to your local development environment.
{% endstep %}

{% step %}

### Import the Cartridges

Import the following cartridges into your workspace:

* `int_eshopworld_pwa`
* `int_eshopworld_core`
  {% endstep %}

{% step %}

### Import Site Data

* Navigate to `Metadata > Sitesdata`
* Create a ZIP archive of the `sitesdata` folder (e.g., `sitesdata.zip`).
* Import ZIP file into your SFCC instance via `Business Manager > Administration > Site Development > Import & Export`
  {% endstep %}

{% step %}

### Assign Cartridges to the Site

Assign the `int_eshopworld_pwa` and `int_eshopworld_core` cartridges to the site’s cartridge path. The cartridge path sequence should look like this:

{% code title="cartridge path" %}

```rb
int_eshopworld_pwa: int_eshopworld_core: app_someother_cartridge
```

{% endcode %}
{% endstep %}

{% step %}

### Configure SCAPI

Add or update the SCAPI configuration as required to enable ESW endpoints for PWA storefront communication.
{% endstep %}
{% endstepper %}


# Storefront Reference Architecture

Install the ESW SFCC cartridge for an SFRA storefront, including site data import and site/Business Manager cartridge paths.

Follow the steps below to install the ESW SFRA cartridge for the first time:

{% stepper %}
{% step %}
**Clone the Repository**

Clone the repository to your local machine.
{% endstep %}

{% step %}
**Import the Cartridges**

* Import the following cartridges into your workspace:
  * `int_eshopworld_sfra`
  * `int_eshopworld_core`
* Link both cartridges to the server connection.
  {% endstep %}

{% step %}
**Import Site Data**

* Navigate to `Metadata > Sitesdata` in the project.
* Create a ZIP file of the `sitesdata` folder (e.g., `sitesdata.zip`).
* Import this ZIP file into your SFCC instance.
  {% endstep %}

{% step %}
**Assign Cartridges to the Site**

Assign the `int_eshopworld_sfra` and `int_eshopworld_core` cartridges to the site’s cartridge path. The cartridge path sequence should look like this:

```rb
int_eshopworld_sfra:int_eshopworld_core:app_storefront_base:
```

{% endstep %}

{% step %}
**Assign Cartridges to Business Manager**

Assign the `int_eshopworld_sfra` and `int_eshopworld_core` cartridges to the business manager organization, for example:

```rb
int_eshopworld_sfra:int_eshopworld_core:bm_custom_plugin
```

{% endstep %}
{% endstepper %}




---

[Next Page](/llms-full.txt/1)

