> For the complete documentation index, see [llms.txt](https://help.citrusad.com/retail-media-interface/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.citrusad.com/retail-media-interface/integration/pt-br/brand-pages/brand-page-retailer-integration-guide/brand-page-apis.md).

# APIs de página da marca

## Roteamento de URL

Quando um usuário navega para uma URL de página da marca, sua aplicação extrai o `urlSlug` do caminho e o envia para a API de veiculação de anúncios.

Estrutura de URL: `<https://{your-domain}/{prefix}/{urlSlug}>`

| Segmento      | Origem                                                          | Exemplo            |
| ------------- | --------------------------------------------------------------- | ------------------ |
| `your-domain` | Seu site                                                        | `www.retailer.com` |
| `prefix`      | Configurado durante a integração (por exemplo, marcas, páginas) | `brands`           |
| `urlSlug`     | Extraído em tempo de execução a partir do caminho da URL        | `adidas`           |

**Exemplo**

Quando um usuário visita: `<https://www.retailer.com/brands/adidas:>`

1. Sua aplicação corresponde à `/brands/*` rota.
2. Extrai `adidas`como o urlSlug.
3. Chama `POST /ads/v3/brand-pages` no seu host de anúncios atribuído com `"urlSlug": "adidas"` e seu `catalogId`.
4. Renderiza os módulos de conteúdo retornados na página.

### Regras de validação de slug

As marcas criam slugs seguindo estas restrições:

* **Caracteres:** Letras minúsculas (a–z), números (0–9), hífens (-) e sublinhados (\_).
* **Comprimento:** Mínimo de 3 caracteres, máximo de 100 caracteres.
* **Unicidade:** Deve ser único dentro do catálogo do varejista (`catalogId`).

{% hint style="info" %}
Neste momento, a unicidade do slug não considera intervalos de datas de campanha.
{% endhint %}

* **Imutabilidade:** Não pode ser alterado após a campanha da página da marca estar no ar.
* **Formato:** Sem hífens no início ou no final (por exemplo, `-adidas`or `adidas-` não são permitidos).

## Caching

* Não armazene respostas da API de veiculação de anúncios em cache. Sempre envie solicitações diretamente para a Epsilon API para garantir:
  * A campanha correta da página da marca seja veiculada (as campanhas podem ser pausadas, atualizadas ou trocadas).
  * As URLs de rastreamento incluam identificadores recentes por solicitação para uma atribuição precisa.
  * A contagem de impressões permaneça precisa e não seja afetada por respostas em cache desatualizadas.

**Consideração de SEO**: Os varejistas podem optar por permitir que as páginas da marca sejam indexadas pelos mecanismos de busca. A indexação do conteúdo da página da marca pode melhorar a visibilidade na busca orgânica, pois todo o texto na página é identificável pelos mecanismos de busca.

## Configuração de proxy reverso

### Por que você precisa de um proxy reverso

**O problema**: Bloqueadores de anúncios e ferramentas de privacidade geralmente bloqueiam solicitações de rastreamento enviadas diretamente para domínios publicitários.

**A solução**: Roteie todas as solicitações de rastreamento através do seu próprio domínio para que apareçam como tráfego de first-party.

```apache
❌ Blocked: user-browser → [third-party-tracking-domain]
✅ Works:   user-browser → yoursite.com/[custom-path] → [third-party-tracking-domain]
```

* Substitua `[third-party-tracking-domain]` pelo endpoint de rastreamento real Epsilon fornecido durante a integração.
* Substitua `[custom-path]` com um caminho neutro e exclusivo (por exemplo, `/media-proxy`, `/assets-endpoint`, ou qualquer termo não publicitário).

Um proxy reverso é necessário para rastreamento C2S (navegador). Não se aplica a chamadas S2S, que devem ser enviadas diretamente para o Epsilon host de rastreamento [(consulte Rastreamento – Server-to-Server (S2S](/retail-media-interface/integration/pt-br/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### Configuração

Seu site deve hospedar um proxy reverso sob um caminho como `https://www.retailer.com/{proxyPath}/`. As solicitações de rastreamento do navegador (C2S) para o seu domínio nesse caminho são encaminhadas para o seu host de rastreamento regional ([consulte API de veiculação de anúncios](#ad-serving-api)). O rastreamento de servidor para servidor não deve usar este proxy.

**Comportamento:**

* Aceitar solicitações sob `/epsilon/`
* Encaminhar para `https://[region]-tracking.rmn.dotomi.com/` (consulte [API de veiculação de anúncios](#ad-serving-api) para `[region]`)
* Preservar o sufixo do caminho do arquivo
* Encaminhar cabeçalhos HTTP necessários
* Impor HTTPS (TLS 1.2+)

### Cabeçalhos necessários

| Cabeçalho                  | Descrição                                             |
| -------------------------- | ----------------------------------------------------- |
| `RP-Host`                  | Seu hostname recebendo a solicitação de rastreamento. |
| `X-Forwarded-For`          | Endereço IP real do cliente.                          |
| `X-Forwarded-Request-Path` | Caminho do prefixo do proxy (por exemplo, /epsilon).  |
| `Referer`                  | A página onde o pixel foi disparado.                  |

### Exemplo do Apache

```apache
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
SSLProxyEngine on
RequestHeader add "X-Forwarded-Request-Path" "/epsilon"
RequestHeader add "RP-Host" "%{HTTP_HOST}s"
RequestHeader add "Referer" "%{HTTP_REFERER}s"
ProxyPass "/epsilon" "https://[region]-tracking.rmn.dotomi.com"
ProxyPassReverse "/epsilon" "https://[region]-tracking.rmn.dotomi.com/"
```

### Exemplo do NGINX

```apache
server {
    server_name www.retailer.com;
    location /epsilon/ {
        proxy_ssl_server_name on;
        rewrite ^/epsilon/(.*) /$1 break;
        proxy_pass https://[region]-tracking.rmn.dotomi.com;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $server_name;
        proxy_set_header RP-Host $host;
        proxy_set_header X-Forwarded-Request-Path "/epsilon";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Referer $http_referer;
    }
}
```

## API de veiculação de anúncios

Epsilon serve páginas de marcas a partir de hosts da RMN em `*.rmn.dotomi.com`. Substitua `[region]` pelo segmento que a Epsilon atribui para a sua implantação.

A API de anúncios usa `https://[region]-ads.rmn.dotomi.com`; enquanto os endpoints de rastreamento (pixels de impressão, redirecionamentos de clique e URLs de notificação S2S) usam `https://[region]-tracking.rmn.dotomi.com` com o mesmo valor de `[region]` .

Em algumas configurações, os nomes de host base `ads.rmn.dotomi.com` e `tracking.rmn.dotomi.com` podem ser usados. Epsilon confirmará os nomes de host apropriados para o seu ambiente.

### Endpoint

```
POST https://[region]-ads.rmn.dotomi.com/ads/v3/brand-pages
Content-Type: application/json
Authorization: Basic <existing_api_key>
```

### Payload de requisição

```
{
  "id": "req-adidas-12345",
  "catalogId": "test-catalog-adidas",
  "urlSlug": "adidas",
  "site": {
    "domain": "www.retailer.com",
    "page": "https://www.retailer.com/brand/adidas",
    "ref": "https://www.retailer.com/search?q=shoes"
  },
  "device": {
    "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ...",
    "ip": "192.168.1.100",
    "language": "en-US",
    "devicetype": 2,
    "os": "macOS",
    "geo": {
      "country": "USA",
      "region": "CA",
      "city": "San Francisco",
      "zip": "94105"
    }
  },
  "user": {
    "sessionId": "sess-abc123xyz",
    "customerId": "cust-789012",
    "dtmId": "dtm-456def"
  },
  "regs": {
    "gdpr": 1,
    "consent": "COwJqZAOwJqZAOAAAAENAXCAAAAAAAAAAAAAABpoAIAAAEpgAIAAAg1AAAICAIAAAEA"
  }
}
```

Os valores de `regs` acima ilustram o tráfego aplicável ao GDPR:\
`gdpr` is `1`, e `consent`é uma **string de consentimento sintética do IAB TCF v2** (apenas formato e conjunto de caracteres corretos).

Em ambientes de produção:

* Defina `gdpr`a partir das suas regras geográficas e jurídicas.
* Passe a **TC string ativa** do seu CMP (por exemplo, via `_ _tcfapi` `getTCData`→ `tcString`).

Para requisições não sujeitas ao GDPR, use `"gdpr": 0` e omita `consent`ou use `""`

`iabConsentString` em eventos de rastreamento: Cada espaço de rastreador preenchido (`trackers.impression`, `trackers.click`, `trackers.addToCart`) inclui `params.iabConsentString`. Quando você fornece `regs.consent` na requisição, este valor é a TC string literal.

Quando você omitiu `regs.consent`, este valor é o espaço reservado da macro {TCF} - substitua a string TCF v2 atual do seu CMP (por exemplo, via `__tcfapi getTCData` → `tcString`) no momento do disparo antes de enviar qualquer requisição de rastreamento.

### Definições dos campos de requisição

| Campo                | Tipo    | Obrigatório | Descrição                                                                                                                                                |
| -------------------- | ------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | string  | Sim         | Identificador exclusivo da requisição (gerado pelo varejista)                                                                                            |
| `catalogId`          | string  | Sim         | ID do catálogo de produtos do varejista (fornecido pela Epsilon)                                                                                         |
| `urlSlug`            | string  | Sim         | Slug da URL da página da marca (ex.: adidas)                                                                                                             |
| site                 |         |             |                                                                                                                                                          |
| `site.domain`        | string  | Sim         | Domínio do site do varejista                                                                                                                             |
| `site.page`          | string  | No          | URL completa onde a página da marca é renderizada                                                                                                        |
| `site.ref`           | string  | No          | URL de referência (de onde o usuário navegou)                                                                                                            |
| device               |         |             |                                                                                                                                                          |
| `device.ua`          | string  | Sim         | String do agente do usuário                                                                                                                              |
| `device.ip`          | string  | No          | Endereço IP do cliente                                                                                                                                   |
| `device.language`    | string  | No          | Idioma do navegador (ex.: pt-BR)                                                                                                                         |
| `device.devicetype`  | integer | No          | 1=mobile, 2=pc, 4=phone, 5=tablet                                                                                                                        |
| `device.os`          | string  | No          | Sistema operacional                                                                                                                                      |
| `device.geo.country` | string  | No          | Código de país ISO 3166-1 alfa-3 (ex.: USA, GBR)                                                                                                         |
| `device.geo.region`  | string  | No          | Estado ou região                                                                                                                                         |
| `device.geo.city`    | string  | No          | Cidade                                                                                                                                                   |
| `device.geo.zip`     | string  | No          | Código postal/CEP                                                                                                                                        |
| user                 |         |             |                                                                                                                                                          |
| `user.sessionId`     | string  | No          | Identificador de sessão do varejista (sem PII)                                                                                                           |
| `user.customerId`    | string  | No          | Identificador de cliente do varejista (sem PII)                                                                                                          |
| `user.dtmId`         | string  | No          | Identificador de rastreamento                                                                                                                            |
| regs                 |         |             |                                                                                                                                                          |
| `regs.gdpr`          | integer | No          | `0` = GDPR não se aplica, `1` = GDPR se aplica (conforme sinalização no estilo OpenRTB)                                                                  |
| `regs.consent`       | string  | No          | String de consentimento IAB TCF **v2** (`tcString` da CMP). Use apenas quando `gdpr` is `1` e você tiver uma string válida; caso contrário, omita ou`""` |

{% hint style="danger" %}
**Importante** O JSON abaixo é um exemplo representativo e bastante completo. Respostas em tempo real costumam ser mais enxutas para `contentData` módulos. Não gere estruturas fixas que presumam que cada chave mostrada aqui esteja sempre presente para cada `contentType` ou página de marca.\
Os valores de `theme` é diferente: em uma resposta bem-sucedida, ele está sempre presente e usa a estrutura aninhada descrita na seção Objeto Theme (`colors`e `buttons` totalmente preenchido - strings hex6 obrigatórias para cada caminho; sem `nulls` dentro de `theme`).
{% endhint %}

### Payload de resposta

```
{
  "realizedAdId": "brandpage_djogXfHSYGZOZnnkzEKunWvdNYEKABIAGgwIwIPjzAYQ3byasAE=",
  "brandPageTemplateId": "6e9690ef-81d1-4fad-b2ce-749e22cceb10",
  "catalogId": "test-catalog-adidas",
  "urlSlug": "adidas",
  "theme": {
    "colors": {
      "background": "#F5F5F5",
      "text": {
        "heading": "#1a1a1a",
        "subheading": "#333333",
        "body": "#5f6368",
        "caption": "#9aa0a6",
        "link": "#1a73e8",
        "tagline": "#5f6368",
        "lines": "#e0e0e0"
      }
    },
    "buttons": {
      "primary": {
        "background": "#ff6600",
        "text": "#FFFFFF"
      },
      "secondary": {
        "background": "#FFFFFF",
        "text": "#ff6600"
      }
    }
  },
  "trackers": {
    "impression": {
      "type": "impression",
      "params": { "ts": "{TS}", "iabConsentString": "{TCF}" }
    }
  },
  "trackingTypes": {
    "impression":      ["client.impressionPixelUrls", "server.impressionEvent"],
    "productClick":    ["client.clickRedirect", "client.clickEvent", "server.clickEvent"],
    "productAddToCart": ["client.addToCartEvent", "server.addToCartEvent"],
    "link":            ["client.clickRedirect", "client.clickEvent", "server.clickEvent"],
    "interaction":     ["client.clickEvent", "server.clickEvent"]
  },
  "trackingTemplates": {
    "client": {
      "clickRedirect":       "/tracking/v3/click/redirect/brandpage_djog...?catalogId=test-catalog-adidas&...",
      "clickEvent":          "/tracking/v3/event/click/brandpage_djog...?catalogId=test-catalog-adidas&...",
      "addToCartEvent":      "/tracking/v3/event/add-to-cart/brandpage_djog...?catalogId=test-catalog-adidas&...",
      "impressionPixelUrls": [
        "/tracking/v3/impression/pixel/brandpage_djog...?catalogId=test-catalog-adidas&..."
      ]
    },
    "server": {
      "clickEvent":          "https://[region]-tracking.rmn.dotomi.com/tracking/v3/event/click/brandpage_djog...?...",
      "addToCartEvent":      "https://[region]-tracking.rmn.dotomi.com/tracking/v3/event/add-to-cart/brandpage_djog...?...",
      "impressionEvent":     "https://[region]-tracking.rmn.dotomi.com/tracking/v3/event/impression/brandpage_djog...?..."
    }
  },
  "contentData": [
    {
      "id": "hero-1",
      "brandPageModuleTemplateId": "hero-template-1",
      "contentType": "HERO",
      "order": 1,
      "tags": ["header"],
      "mediaUrl": "https://example.com/images/adidas-hero.jpg",
      "headline": "Impossible Is Nothing",
      "subheadline": "Spring Collection",
      "ctaText": "Explore",
      "ctaLink": "https://example.com/adidas/explore",
      "trackers": {
        "click": {
          "type": "link",
          "params": {
            "modId": "hero-1",
            "rurl": "https%3A%2F%2Fexample.com%2Fadidas%2Fexplore",
            "ts": "{TS}",
            "iabConsentString": "{TCF}"
          }
        }
      }
    },
    {
      "id": "text-1",
      "brandPageModuleTemplateId": "text-template-1",
      "contentType": "TEXT",
      "order": 2,
      "text": "Discover the latest Adidas collection featuring innovative designs and sustainable materials."
      // (No trackers for TEXT module, as it has no interactive elements)
    }
  ]
}
```

#### Definições de campos de resposta

| Campo                                     | Tipo             | Descrição                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | string           | Identificador exclusivo de anúncio para esta veiculação de página de marca. Usado em todos os caminhos de modelo de rastreamento.                                                                                                                                                                                                                                                                                                                                                             |
| `brandPageTemplateId`                     | string           | ID do modelo usado para esta página de marca                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `catalogId`                               | string           | ID do catálogo do varejista (ecoado da requisição)                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `urlSlug`                                 | string           | Slug de URL da página de marca (ecoado da requisição)                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `theme`                                   | Objeto           | <p>Sempre presente em caso de sucesso. Estilização em nível de página a partir da marca: aninhado <code>colors</code> (segundo plano + <code>text</code> funções) e <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, cada um com <code>background</code>e <code>text</code>). Veja <a href="#theme-object">Objeto Theme</a> seção.<br>O corpo da resposta é retornado como serializado pelo servidor de anúncios (sem reformatação intermediária do <code>theme</code>)</p> |
| `trackers`                                | objeto           | Contêiner de rastreamento em nível de página. `trackers.impression` contém o espaço de impressão da página: `type: "impression"` e `params` incluindo pelo menos `ts: "`{TS}`"` e `iabConsentString`.                                                                                                                                                                                                                                                                                         |
| `trackingTypes`                           | objeto           | Mapeamento do tipo de rastreamento para as chaves de modelo aplicáveis. Tipos: `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. Cada valor é um array de `client.*/` `server.*` chaves de `trackingTemplates`. (veja [Como compor uma URL de rastreamento](/retail-media-interface/integration/pt-br/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)).                                                       |
| `trackingTemplates.client`                | objeto           | Caminhos de URL **relativos** e strings de consulta para rastreamento de navegador (C2S) - adicione como prefixo sua URL base do proxy reverso (`BASEURL`).                                                                                                                                                                                                                                                                                                                                   |
| `trackingTemplates.server`                | objeto           | Modelos de URL **absolutos** no Epsilon host de rastreamento para S2S.                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `contentData[]`                           | array            | Array ordenado de módulos de conteúdo a serem renderizados                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `contentData[].id`                        | string           | ID da instância do módulo                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `contentData[].brandPageModuleTemplateId` | string           | ID do modelo do módulo                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `contentData[].contentType`               | string           | Tipo de módulo: HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                                                                                                                                                                 |
| `contentData[].order`                     | integer          | Ordem de renderização (ascendente)                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `contentData[].tags`                      | array de strings | Opcional. Tags de módulo definidas pelo varejista no modelo. Omita totalmente quando nenhuma tag for definida - trate a ausência como "sem tags". Também presente em módulos aninhados dentro de SPLIT\_LAYOUT.                                                                                                                                                                                                                                                                               |
| `contentData[].trackers`                  | objeto           | Quando presente, contêiner de rastreamento por nó. `trackers.click` para eventos de clique em link/interação/produto; `trackers.addToCart` para adição de produto ao carrinho (inclui macros {QTY} e {CONVERSION\_VALUE}). Pode ser omitido quando não houver nada para rastrear.                                                                                                                                                                                                             |

### Objeto Theme

Toda resposta bem-sucedida da API de Página de Marca inclui um `theme` objeto: cores em nível de página e estilos de botão configurados para a marca. Aplique estes valores ao renderizar (por exemplo, mapeando-os para propriedades personalizadas de CSS ou para seus tokens de design). O JSON é produzido pelo servidor de anúncios e entregue como retornado - não há etapa separada que reescreva o `theme`.

**Formato de cor:** Os valores de cor do tema seguem o contrato da plataforma do fluxo superior (campanha/configuração): cada valor é um `#` seguido por seis dígitos hexadecimais (hex6), por exemplo, `#ff6600`. Não espere outros formatos (hex3 curto, hex de oito dígitos, `rgb()`, `hsl()`, ou cores nomeadas). O servidor de anúncios não revalida o formato de cor no momento da veiculação; o fluxo superior fornece hex6 para cada campo do tema.

#### Estrutura e semântica

* `theme` contém `colors` e `buttons` - ambos são obrigatórios sempre que `theme` estiver presente.
* `colors.background` - segundo plano da página ou tela (hex6 obrigatório).
* `colors.text` - sete funções obrigatórias: `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (linhas/divisores). Cada valor é uma string hex6.
* `buttons.primary` e `buttons.secondary` - cada um requer `background` e `text` (cores de preenchimento do botão e do rótulo), cada uma uma string hex6.
* Todos os caminhos na tabela de referência de campos abaixo são obrigatórios. Não há espaços de cores opcionais e nenhum `null` valores dentro de `theme`. (Campos esparsos ou omitidos se aplicam a outros lugares, por exemplo em `contentData` módulos.)
* Os valores de `theme` é em nível de página - todos os módulos na Página da Marca compartilham o mesmo tema.

#### Referência de campo

Todos os caminhos nesta tabela são obrigatórios (strings hex6 não nulas).

| Caminho                              | Descrição                               |
| ------------------------------------ | --------------------------------------- |
| `theme.colors.background`            | Plano de fundo da página/tela           |
| `theme.colors.text.heading`          | Texto do título                         |
| `theme.colors.text.subheading`       | Texto do subtítulo                      |
| `theme.colors.text.body`             | Texto do corpo/parágrafo                |
| `theme.colors.text.caption`          | Legenda/texto secundário                |
| `theme.colors.text.link`             | Texto do link                           |
| `theme.colors.text.tagline`          | Texto do slogan                         |
| `theme.colors.text.lines`            | Linhas e divisores                      |
| `theme.buttons.primary.background`   | Preenchimento do botão de CTA principal |
| `theme.buttons.primary.text`         | Rótulo do botão de CTA principal        |
| `theme.buttons.secondary.background` | Preenchimento do botão secundário       |
| `theme.buttons.secondary.text`       | Rótulo do botão secundário              |

Exemplo - (`theme`apenas objeto):

```json
"theme": {
  "colors": {
    "background": "#F5F5F5",
    "text": {
      "heading": "#1a1a1a",
      "subheading": "#333333",
      "body": "#5f6368",
      "caption": "#9aa0a6",
      "link": "#1a73e8",
      "tagline": "#5f6368",
      "lines": "#e0e0e0"
    }
  },
  "buttons": {
    "primary": {
      "background": "#ff6600",
      "text": "#FFFFFF"
    },
    "secondary": {
      "background": "#FFFFFF",
      "text": "#ff6600"
    }
  }
}
```

#### Por nó `params`(chaves típicas)

| Parâmetro          | Quando usado                                                     | Descrição                                                                                                                                                           |
| ------------------ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `modId`            | A maioria dos nós interativos                                    | Identificador do módulo de conteúdo ou da linha.                                                                                                                    |
| `rurl`             | `link` / `productClick`quando um redirecionamento for necessário | Destino codificado em URL                                                                                                                                           |
| `ts`               | A maioria dos eventos                                            | Carimbo de data/hora para desativação de cache; substitua `"{TS}"`no momento do disparo.                                                                            |
| `iabConsentString` | Todos os espaços de rastreador                                   | String TC literal, ou macro {TCF} para substituir no momento do disparo                                                                                             |
| `productCode`      | `productClick` / `productAddToCart`                              | Identificador do produto.                                                                                                                                           |
| `sellerId`         | `productClick` / `productAddToCart` (marketplace)                | Identificador do vendedor.                                                                                                                                          |
| `qty`              | `productAddToCart`                                               | Quantidade absoluta deste SKU no carrinho no momento em que o evento dispara (não um delta). Substitua a macro {QTY} no momento do disparo                          |
| `conVal`           | `productAddToCart`                                               | Valor monetário absoluto desses itens: quantidade × preço unitário, menos quaisquer descontos aplicados. Substitua `{CONVERSION_VALUE}` macro no momento do disparo |

#### Campos dependentes de modelo em `contentData`

Além dos discriminadores principais em cada módulo (`id`, `brandPageModuleTemplateId`, `contentType`, `order`), a presença da propriedade não é uniforme nas Páginas da Marca. Prefira a detecção de recursos - verifique cada propriedade antes do uso - em vez de tratar cada campo nos exemplos como obrigatório.

A API pode representar "nenhum valor" de várias maneiras:

| Padrão           | Significado                                 | Tratamento sugerido                                          |
| ---------------- | ------------------------------------------- | ------------------------------------------------------------ |
| Chave omitida    | Propriedade ausente do objeto JSON          | Trate como ausente; use encadeamento opcional/valores padrão |
| Explícito `null` | Propriedade presente com valor `null` valor | Igual a omitido, a menos que seu serializador os distinga    |
| String vazia     | `""` para campos de texto ou do tipo URL    | Geralmente oculte ou pule a renderização dessa parte da UI   |

#### Exemplos para Tipos de Módulos Comuns

**Grade de Produtos:**

Cada linha de produto inclui um `product` objeto (`catalogId`, `productCode`, `sellerId`), an `order` valor, e `trackers` quando a linha é rastreável. As linhas de produtos fornecem tanto um `click` espaço (`type: "productClick"`) quanto um `addToCart`espaço (`type: "productAddToCart"`) quando o SKU é atribuível.

```

{
  "product": {
    "catalogId": "550e8400-e29b-41d4-a716-446655440001",
    "productCode": "9221200653341",
    "sellerId": "2ae0aab9-44ce-40a0-b2b9-ae61681ad224"
  },
  "order": 1,
  "trackers": {
    "click": {
      "type": "productClick",
      "params": {
        "modId": "grid-1",
        "productCode": "9221200653341",
        "sellerId": "2ae0aab9-44ce-40a0-b2b9-ae61681ad224",
        "rurl": "{RURL}",
        "ts": "{TS}",
        "iabConsentString": "{TCF}"
      }
    },
    "addToCart": {
      "type": "productAddToCart",
      "params": {
        "modId": "grid-1",
        "productCode": "9221200653341",
        "sellerId": "2ae0aab9-44ce-40a0-b2b9-ae61681ad224",
        "rurl": "{RURL}",
        "ts": "{TS}",
        "qty": "{QTY}",
        "conVal": "{CONVERSION_VALUE}",
        "iabConsentString": "{TCF}"
      }
    }
  }
}

```

**Hero:**

Título, subtítulo, texto de CTA e link, imagem, sobreposição e `trackers.click` para a CTA quando presente.

```

{
  "contentType": "HERO",
  "tags": [
    "header"
  ],
  "mediaUrl": "https://example.com/images/adidas-hero.jpg",
  "headline": "Impossible Is Nothing",
  "subheadline": "Spring Collection",
  "ctaText": "Explore",
  "ctaLink": "https://example.com/adidas/explore",
  "trackers": {
    "click": {
      "type": "link",
      "params": {
        "modId": "hero-1",
        "rurl": "https%3A%2F%2Fexample.com%2Fadidas%2Fexplore",
        "ts": "{TS}",
        "iabConsentString": "{TCF}"
      }
    }
  }
}

```

**Galeria de imagens:**

Uma matriz de imagens, cada uma com um URL, texto alt e legenda. `trackers.click` para uma imagem apenas quando essa imagem inclui um link externo.

```
{
  "contentType": "IMAGE_GALLERY",
  "galleryImages": [
    {
      "url": "https://example.com/images/recipe-spaghetti-bolognese.jpg",
      "alt": "Spaghetti Bolognese",
      "caption": "Spaghetti Bolognese",
      "trackers": {
        "click": {
          "type": "link",
          "params": {
            "modId": "gallery-1",
            "rurl": "https%3A%2F%2Fexample.com%2Frecipes%2Fspaghetti",
            "ts": "{TS}",
            "iabConsentString": "{TCF}"
          }
        }
      }
    }
  ]
}
```

**Texto:**

Título e corpo do texto, sem `trackers`a menos que um link esteja presente em uma linha.

```
{
  "contentType": "TEXT",
  "text": "Explore our newest arrivals designed for comfort, style, and performance."
}
```

**Imagem:**

Inclui um URL de imagem, legenda, texto alt, link opcional e `trackers.click` detalhes quando a imagem é clicável

```
{
  "contentType": "IMAGE",
  "imageUrl": "https://example.com/images/model.jpg",
  "caption": "New arrivals now available",
  "alt": "Model wearing summer collection",
  "trackers": { "click": { "type": "link", "params": { "modId": "image-1", "rurl": "https%3A%2F%2Fexample.com%2Fnew-arrivals", "ts": "{TS}", "iabConsentString": "{TCF}"
  }
}
```


---

# 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://help.citrusad.com/retail-media-interface/integration/pt-br/brand-pages/brand-page-retailer-integration-guide/brand-page-apis.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.
