> For the complete documentation index, see [llms.txt](https://developer.esw.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.esw.com/customs-catalog-api/resources/first-successful-requests.md).

# First Successful Requests

### What you will do

You will call the Customs Catalog sandbox and pull the **complete configuration for a brand.**&#x20;

### Before you begin

| Parameters                                                              | Description                     |
| ----------------------------------------------------------------------- | ------------------------------- |
| `id` <mark style="color:$danger;">`required`</mark>                     | Identifier for your brand       |
| **Sandbox bearer token** <mark style="color:$danger;">`required`</mark> | JWT for the sandbox environment |

{% @code-walkthrough/tutorial-widget src="<https://gist.githubusercontent.com/esw-docs/0e6e7ff2d2d168285339226941f0c80d/raw/0c59909c75019ec789776b13792899d7b957666e/catalogfirstreq.md>" title="Tutorial" stepCount="3" height="medium" %}

***

{% tabs %}
{% tab title="Try it" %}
{% @code-walkthrough/try-it specLoaded="" specEps="" method="GET" path="/api/v2/BrandConfig/{id}" baseUrl="<https://logistics-customscatalog-api.sandbox.eshopworld.com/>" title="Returns a brand config" defaults="{"path":{"id":""},"query":{},"headers":{"Content-Type":"application/json"}}" mode="closed" %}
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Sample Response Walkthrough" %}
{% @code-walkthrough/code-walkthrough title="Brand Config" language="javascript" filename="Sample Response" code="{
"brandCode": "DMO",
"brandName": "Demo Brand Ltd.",
"tenantCode": "DEMO01",
"regions": \["EU", "UK", "US", "APAC"],

// ── Catalogue ingestion defaults ─────────────────────────
"currencyUnitDefault": "EUR",
"weightUnitDefault": "kg",
"delimiter": ",",
"trimProductCodeWhiteSpaces": true,
"processRawCatalogs": true,
"generateMasterFile": true,
"enableCatalogRawMappings": false,
"rawCatalogMappings": null,

// ── Classification behaviour ─────────────────────────────
"classificationProvider": "ESW",
"defaultClassificationId": "01HE3J8K7N5R9X2P4Q6T8V0W1Y",
"digitalDefaultClassificationId": "01HE3J8K7N5R9X2P4Q6T8V0W1Z",
"allowDefaultProducts": true,
"hsCodeLimit": "10",
"defaultClassificationOverrides": \[
{ "regionCode": "US", "classificationId": "01HE..." }
],
"classificationCodeOverride": \[],

// ── Third-party integrations ─────────────────────────────
"avalaraEnabled": false,
"enableMultipleVats": true
}" steps="\[
{"label":"Brand identity","description":"<code>brandCode</code> and <code>brandName</code> identify the brand. <code>tenantCode</code> is the operational slug used in API paths and config lookups. <code>regions</code> lists every market this brand is active in — only regions listed here will have pricing configs and catalogue rules applied.","lines":"2-5"},
{"label":"Catalogue ingestion defaults","description":"<code>currencyUnitDefault</code> and <code>weightUnitDefault</code> are the fallback units applied when a product record omits them. <code>delimiter</code> is the CSV column separator for raw catalogue files. <code>trimProductCodeWhiteSpaces</code> strips accidental spaces from SKUs before matching. <code>processRawCatalogs</code> and <code>generateMasterFile</code> control whether raw feeds are processed and a consolidated master file is produced. <code>enableCatalogRawMappings</code> and <code>rawCatalogMappings</code> are disabled here — enable only when column remapping is needed.","lines":"7-15"},
{"label":"Classification behaviour","description":"<code>classificationProvider: ESW</code> means HS code classification is handled by the platform rather than supplied externally. <code>defaultClassificationId</code> is the fallback classification applied to physical products with no explicit HS code; <code>digitalDefaultClassificationId</code> is the equivalent for digital goods. <code>allowDefaultProducts: true</code> permits products to proceed using the default classification rather than being rejected. <code>hsCodeLimit</code> caps the number of HS code suggestions returned per product. <code>defaultClassificationOverrides</code> lets you pin a different default classification per region — here the US gets its own override. <code>classificationCodeOverride</code> is empty, meaning no product-level code overrides are active.","lines":"17-26"},
{"label":"Third-party integrations","description":"<code>avalaraEnabled: false</code> means tax calculation is handled internally rather than delegated to Avalara. <code>enableMultipleVats: true</code> allows different VAT rates to be applied per region — required for any brand selling across EU, UK, and US simultaneously.","lines":"28-30"}
]" %}
{% endtab %}
{% endtabs %}

<details>

<summary>Identity &#x26; scope</summary>

| Field                     | What it means                                                                                                                   |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `brandCode` / `brandName` | The three-letter code and human-readable name                                                                                   |
| `tenantCode`              | The parent tenant. One tenant can own multiple brands                                                                           |
| `regions`                 | The regions this brand is configured to ship to. **Every product, classification, and price downstream is scoped to this list** |

</details>

<details>

<summary>Catalogue ingestion</summary>

These control how your raw product feeds get parsed.

| Field                                       | What it means                                                                                                                                                                          |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `currencyUnitDefault` / `weightUnitDefault` | What units to assume when your feed doesn't specify them                                                                                                                               |
| `delimiter`                                 | Column separator for CSV-style feeds                                                                                                                                                   |
| `trimProductCodeWhiteSpaces`                | Whether `"SKU-001 "` becomes `"SKU-001"` on ingest. Almost always should be `true` — leading/trailing whitespace in SKUs is the source of an enormous number of "missing product" bugs |
| `processRawCatalogs` / `generateMasterFile` | Pipeline flags — if either is `false`, nothing flows through automatically                                                                                                             |
| `rawCatalogMappings`                        | Field-name remapping for legacy feeds (e.g., `"sku" → "productCode"`)                                                                                                                  |

</details>

<details>

<summary>Classification behavior</summary>

This is where most integration questions get answered.

| Field                            | What it means                                                                                               |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `classificationProvider`         | Who classifies products. `ESW` = eShopWorld's in-house team. Other values delegate to third-party providers |
| `defaultClassificationId`        | The classification used when a product can't be matched to a specific HS code. Acts as a safety net         |
| `digitalDefaultClassificationId` | Same idea, but for digital goods (which have different duty/tax treatment)                                  |
| `allowDefaultProducts`           | If `false`, products that can't be classified are rejected outright instead of falling back to the default  |
| `hsCodeLimit`                    | Maximum HS code length to accept (typically `6`, `8`, or `10` digits)                                       |
| `defaultClassificationOverrides` | Per-region overrides — e.g., the EU default classification differs from the US one                          |

</details>

<details>

<summary>Third-party flags</summary>

| Field                | What it means                                                                                                                                                   |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `avalaraEnabled`     | Whether Avalara handles tax calculation for this brand. If `true`, tax-related responses elsewhere will reflect Avalara's data, not eShopWorld's internal rates |
| `enableMultipleVats` | Whether the brand can apply more than one VAT rate per region (used for goods with mixed tax treatment, e.g., a hamper containing both food and alcohol)        |

</details>


---

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

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developer.esw.com/customs-catalog-api/resources/first-successful-requests.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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

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