> 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/es/brand-pages/brand-page-retailer-integration-guide/brand-page-apis.md).

# API de páginas de marca

## Enrutamiento de URL

Cuando un usuario navega a la URL de una página de marca, su aplicación extrae el `urlSlug` de la ruta y lo envía a la API de personalización de anuncios.

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

| Segmento      | Origen                                                              | Ejemplo            |
| ------------- | ------------------------------------------------------------------- | ------------------ |
| `your-domain` | Su sitio                                                            | `www.retailer.com` |
| `prefix`      | Configurado durante la incorporación (por ejemplo, marcas, páginas) | `brands`           |
| `urlSlug`     | Extraído en tiempo de ejecución de la ruta URL                      | `adidas`           |

**Ejemplo**

Cuando un usuario visita: `<https://www.retailer.com/brands/adidas:>`

1. Su aplicación coincide con la `/brands/*` ruta.
2. Extrae `adidas`como el urlSlug.
3. Llama a `POST /ads/v3/brand-pages` en su host de anuncios asignado con `"urlSlug": "adidas"` y su `catalogId`.
4. Muestra los módulos de contenido devueltos en la página.

### Reglas de validación de slug

Las marcas crean slugs siguiendo estas restricciones:

* **Caracteres:** Letras minúsculas (a–z), números (0–9), guiones (-) y guiones bajos (\_).
* **Longitud:** Mínimo 3 caracteres, máximo 100 caracteres.
* **Unicidad:** Debe ser único dentro del catálogo del minorista (`catalogId`).

{% hint style="info" %}
En este momento, la unicidad del slug no considera los rangos de fechas de la campaña.
{% endhint %}

* **Inmutabilidad:** No se puede cambiar después de que la campaña de la página de marca esté activa.
* **Formato:** Sin guiones al principio ni al final (por ejemplo, `-adidas`or `adidas-` no están permitidos).

## Almacenamiento en caché

* No almacene en caché las respuestas de la API de personalización de anuncios. Envíe siempre las solicitudes directamente a la Epsilon API para garantizar:
  * Se sirve la campaña de página de marca correcta (las campañas se pueden pausar, actualizar o intercambiar).
  * Las URL de seguimiento incluyen identificadores actualizados por solicitud para una atribución precisa.
  * El recuento de impresiones se mantiene preciso y no se ve afectado por respuestas almacenadas en caché desactualizadas.

**Consideración de SEO**: Los minoristas pueden optar por permitir que los motores de búsqueda indexen las páginas de marca. La indexación del contenido de la página de marca puede mejorar la visibilidad de la búsqueda orgánica, ya que todo el texto de la página es detectable por los motores de búsqueda.

## Configuración de proxy inverso

### Por qué necesita un proxy inverso

**El problema**: Los bloqueadores de anuncios y las herramientas de privacidad a menudo bloquean las solicitudes de seguimiento enviadas directamente a dominios publicitarios.

**La solución**: Enrute todas las solicitudes de seguimiento a través de su propio dominio para que aparezcan como tráfico de primera parte.

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

* Reemplace `[third-party-tracking-domain]` con el extremo de seguimiento real Epsilon proporcionado durante la incorporación.
* Reemplace `[custom-path]` con una ruta neutral y única (por ejemplo, `/media-proxy`, `/assets-endpoint`, o cualquier término que no sea de publicidad).

Se requiere un proxy inverso para el seguimiento C2S (navegador). No se aplica a las llamadas S2S, que deben enviarse directamente al Epsilon host de seguimiento [(consulte Seguimiento – Servidor a servidor (S2S)](/retail-media-interface/integration/es/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### Configuración

Su sitio debe alojar un proxy inverso bajo una ruta como `https://www.retailer.com/{proxyPath}/`. Las solicitudes de seguimiento del navegador (C2S) a su dominio en esa ruta se reenvían a su host de seguimiento regional ([consulte API de servicio de anuncios](#ad-serving-api)). El seguimiento de servidor a servidor no debe utilizar este proxy.

**Comportamiento:**

* Aceptar solicitudes bajo `/epsilon/`
* Reenviar a `https://[region]-tracking.rmn.dotomi.com/` (consulte [API de servicio de anuncios](#ad-serving-api) para `[region]`)
* Conservar el sufijo de la ruta del archivo
* Reenviar los encabezados HTTP requeridos
* Exigir HTTPS (TLS 1.2+)

### Encabezados requeridos

| Encabezado                 | Descripción                                               |
| -------------------------- | --------------------------------------------------------- |
| `RP-Host`                  | Su nombre de host que recibe la solicitud de seguimiento. |
| `X-Forwarded-For`          | Dirección IP real del cliente.                            |
| `X-Forwarded-Request-Path` | Ruta de prefijo del proxy (por ejemplo, /epsilon).        |
| `Referer`                  | La página donde se activó el píxel.                       |

### Ejemplo de 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/"
```

### Ejemplo de 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 personalización de anuncios

Epsilon sirve páginas de marca desde los hosts de RMN en `*.rmn.dotomi.com`. Sustituya `[region]` con el segmento que Epsilon asigna para su despliegue.

La API de anuncios utiliza `https://[region]-ads.rmn.dotomi.com`; mientras que los puntos finales de seguimiento (píxeles de impresión, redirecciones de clics y URL de notificación S2S) utilizan `https://[region]-tracking.rmn.dotomi.com` con el mismo valor de `[region]` .

En algunas configuraciones, los nombres de host base `ads.rmn.dotomi.com` y `tracking.rmn.dotomi.com` pueden ser utilizados. Epsilon confirmará los nombres de host apropiados para su entorno.

### Punto final

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

### Carga útil de la solicitud

```
{
  "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"
  }
}
```

Los valores de `regs` anteriores ilustran el tráfico aplicable al RGPD:\
`gdpr` is `1`, y `consent`es una **cadena de consentimiento sintética IAB TCF v2** (solo forma y conjunto de caracteres correctos).

En entornos de producción:

* Establezca `gdpr`a partir de sus reglas geográficas y legales.
* Pase la **cadena TC en vivo** de su CMP (por ejemplo, a través de `_ _tcfapi` `getTCData`→ `tcString`).

Para solicitudes que no sean del RGPD, utilice `"gdpr": 0` y omita `consent`o utilice `""`

`iabConsentString` en los eventos de seguimiento: Cada espacio de seguimiento poblado (`trackers.impression`, `trackers.click`, `trackers.addToCart`) incluye `params.iabConsentString`. Cuando proporciona `regs.consent` en la solicitud, este valor es la cadena TC literal.

Cuando omitió `regs.consent`, este valor es el marcador de posición de la macro {TCF}: sustituya la cadena TCF v2 actual de su CMP (por ejemplo, a través de `__tcfapi getTCData` → `tcString`) en el momento del disparo antes de enviar cualquier solicitud de seguimiento.

### Definiciones de campos de la solicitud

| Campo                | Tipo   | Requerido | Descripción                                                                                                                                            |
| -------------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`                 | cadena | Sí        | Identificador único de la solicitud (generado por el minorista)                                                                                        |
| `catalogId`          | cadena | Sí        | ID del catálogo de productos del minorista (proporcionado por Epsilon)                                                                                 |
| `urlSlug`            | cadena | Sí        | Slug de la URL de la página de marca (p. ej. adidas)                                                                                                   |
| sitio                |        |           |                                                                                                                                                        |
| `site.domain`        | cadena | Sí        | Dominio del sitio web del minorista                                                                                                                    |
| `site.page`          | cadena | No        | URL completa donde se representa la página de marca                                                                                                    |
| `site.ref`           | cadena | No        | URL de referencia (desde donde navegó el usuario)                                                                                                      |
| dispositivo          |        |           |                                                                                                                                                        |
| `device.ua`          | cadena | Sí        | Cadena del agente de usuario                                                                                                                           |
| `device.ip`          | cadena | No        | Dirección IP del cliente                                                                                                                               |
| `device.language`    | cadena | No        | Idioma del navegador (p. ej. en-US)                                                                                                                    |
| `device.devicetype`  | entero | No        | 1=móvil, 2=pc, 4=teléfono, 5=tableta                                                                                                                   |
| `device.os`          | cadena | No        | Sistema operativo                                                                                                                                      |
| `device.geo.country` | cadena | No        | Código de país ISO 3166-1 alfa-3 (p. ej. USA, GBR)                                                                                                     |
| `device.geo.region`  | cadena | No        | Estado o región                                                                                                                                        |
| `device.geo.city`    | cadena | No        | Ciudad                                                                                                                                                 |
| `device.geo.zip`     | cadena | No        | Código postal                                                                                                                                          |
| usuario              |        |           |                                                                                                                                                        |
| `user.sessionId`     | cadena | No        | Identificador de sesión del minorista (no PII)                                                                                                         |
| `user.customerId`    | cadena | No        | Identificador de cliente del minorista (no PII)                                                                                                        |
| `user.dtmId`         | cadena | No        | Identificador de seguimiento                                                                                                                           |
| regulaciones         |        |           |                                                                                                                                                        |
| `regs.gdpr`          | entero | No        | `0` = El RGPD no se aplica, `1` = El RGPD se aplica (según la señalización de estilo OpenRTB)                                                          |
| `regs.consent`       | cadena | No        | Cadena de consentimiento IAB TCF **v2** (`tcString` del CMP). Usar solo cuando `gdpr` is `1` y tiene una cadena válida; de lo contrario, omítalo o`""` |

{% hint style="danger" %}
**Importante** El siguiente JSON es un ejemplo representativo y bastante completo. Las respuestas en vivo a menudo son más escasas para `contentData` módulos. No genere estructuras fijas que asuman que cada clave mostrada aquí está siempre presente para cada `contentType` o página de marca.\
Los valores de `theme` es diferente: en una respuesta correcta, siempre está presente y utiliza la estructura anidada descrita en la sección Objeto de tema (`colors`y `buttons` completamente completado: cadenas hex6 requeridas para cada ruta; no `nulls` dentro de `theme`).
{% endhint %}

### Carga útil de la respuesta

```
{
  "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)
    }
  ]
}
```

#### Definiciones de campos de la respuesta

| Campo                                     | Tipo               | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | cadena             | Identificador único de anuncio para esta entrega de página de marca. Se utiliza en todas las rutas de plantillas de seguimiento.                                                                                                                                                                                                                                                                                                                                                                |
| `brandPageTemplateId`                     | cadena             | ID de plantilla utilizado para esta página de marca                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `catalogId`                               | cadena             | ID de catálogo del minorista (reflejado desde la solicitud)                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `urlSlug`                                 | cadena             | Slug de URL de la página de marca (reflejado desde la solicitud)                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `theme`                                   | Objeto             | <p>Siempre presente si la operación tiene éxito. Estilo a nivel de página de la marca: anidado <code>colors</code> (fondo + <code>text</code> roles) y <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, cada uno con <code>background</code>y <code>text</code>). Consulte <a href="#theme-object">Objeto de tema</a> sección.<br>El cuerpo de la respuesta se devuelve tal como lo serializa el servidor de anuncios (sin remodelación intermedia de <code>theme</code>)</p> |
| `trackers`                                | objeto             | Contenedor de seguimiento a nivel de página. `trackers.impression` contiene el espacio de impresión de la página: `type: "impression"` y `params` incluyendo al menos `ts: "`{TS}`"` y `iabConsentString`.                                                                                                                                                                                                                                                                                      |
| `trackingTypes`                           | objeto             | Mapa del tipo de seguimiento a las claves de plantilla aplicables. Tipos: `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. Cada valor es un arreglo de `client.*/` `server.*` claves de `trackingTemplates`. (consulte [Cómo componer una URL de seguimiento](/retail-media-interface/integration/es/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)).                                                         |
| `trackingTemplates.client`                | objeto             | Rutas de URL **relativas** y cadenas de consulta para el seguimiento del navegador (C2S): anteponga su URL base de proxy inverso (`BASEURL`).                                                                                                                                                                                                                                                                                                                                                   |
| `trackingTemplates.server`                | objeto             | Plantillas de URL **absolutas** en el Epsilon host de seguimiento para S2S.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `contentData[]`                           | arreglo            | Arreglo ordenado de módulos de contenido para renderizar                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `contentData[].id`                        | cadena             | ID de instancia de módulo                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `contentData[].brandPageModuleTemplateId` | cadena             | ID de plantilla de módulo                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `contentData[].contentType`               | cadena             | Tipo de módulo: HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                                                                                                                                                                   |
| `contentData[].order`                     | entero             | Orden de renderizado (ascendente)                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `contentData[].tags`                      | arreglo de cadenas | Opcional. Etiquetas de módulo establecidas por el minorista en la plantilla. Se omite por completo cuando no hay etiquetas establecidas; trate la ausencia como "sin etiquetas". También está presente en módulos anidados dentro de SPLIT\_LAYOUT.                                                                                                                                                                                                                                             |
| `contentData[].trackers`                  | objeto             | Cuando está presente, contenedor de seguimiento por nodo. `trackers.click` para eventos de clic en enlace/interacción/producto; `trackers.addToCart` para añadir producto al carrito (incluye macros {QTY} y {CONVERSION\_VALUE}). Puede omitirse cuando no hay nada que rastrear.                                                                                                                                                                                                              |

### Objeto de tema

Cada respuesta correcta de la API de página de marca incluye un `theme` objeto: colores a nivel de página y estilos de botones configurados para la marca. Aplique estos valores al renderizar (por ejemplo, mapéelos a propiedades personalizadas de CSS o a sus tokens de diseño). El JSON lo produce el servidor de anuncios y se entrega tal como se devuelve: no hay un paso independiente que reescriba el `theme`.

**Formato de color:** Los valores de color del tema siguen el contrato de la plataforma de origen (campaña/configuración): cada valor es un `#` seguido de seis dígitos hexadecimales (hex6), por ejemplo, `#ff6600`. No espere otros formatos (hex3 corto, hex de ocho dígitos, `rgb()`, `hsl()`o colores con nombre). El servidor de anuncios no revalida el formato de color en el momento de la entrega; el origen proporciona hex6 para cada campo del tema.

#### Estructura y semántica

* `theme` contiene `colors` y `buttons` - ambos son obligatorios siempre que `theme` esté presente.
* `colors.background` - fondo de página o lienzo (hex6 obligatorio).
* `colors.text` - siete roles obligatorios: `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (líneas/divisores). Cada valor es una cadena hex6.
* `buttons.primary` y `buttons.secondary` - cada uno requiere `background` y `text` (colores de relleno de botón y etiqueta), cada uno una cadena hex6.
* Cada ruta en la tabla de referencia de campos a continuación es obligatoria. No hay espacios de color opcionales y no `null` valores dentro de `theme`. (Los campos dispersos u omitidos se aplican en otros lugares, por ejemplo en `contentData` módulos.)
* Los valores de `theme` es a nivel de página -todos los módulos de la Página de marca comparten el mismo tema.

#### Referencia de campos

Todas las rutas de esta tabla son obligatorias (cadenas hex6 no nulas).

| Ruta                                 | Descripción                     |
| ------------------------------------ | ------------------------------- |
| `theme.colors.background`            | Fondo de página/lienzo          |
| `theme.colors.text.heading`          | Texto de encabezado             |
| `theme.colors.text.subheading`       | Texto de subencabezado          |
| `theme.colors.text.body`             | Texto de cuerpo/párrafo         |
| `theme.colors.text.caption`          | Texto de leyenda/secundario     |
| `theme.colors.text.link`             | Texto de enlace                 |
| `theme.colors.text.tagline`          | Texto del lema                  |
| `theme.colors.text.lines`            | Líneas y divisores              |
| `theme.buttons.primary.background`   | Relleno del botón CTA primario  |
| `theme.buttons.primary.text`         | Etiqueta del botón CTA primario |
| `theme.buttons.secondary.background` | Relleno del botón secundario    |
| `theme.buttons.secondary.text`       | Etiqueta del botón secundario   |

Ejemplo - (`theme`objeto solo):

```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 nodo `params`(claves típicas)

| Parámetro          | Cuándo se utiliza                                         | Descripción                                                                                                                                                                |
| ------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `modId`            | La mayoría de los nodos interactivos                      | Identificador de fila o módulo de contenido.                                                                                                                               |
| `rurl`             | `link` / `productClick`cuando se necesita una redirección | Destino codificado en URL                                                                                                                                                  |
| `ts`               | La mayoría de los eventos                                 | Marca de tiempo para romper la caché; sustituir `"{TS}"`en el momento del disparo.                                                                                         |
| `iabConsentString` | Todos los espacios de seguimiento                         | Cadena TC literal, o macro {TCF} para sustituir en el momento del disparo                                                                                                  |
| `productCode`      | `productClick` / `productAddToCart`                       | Identificador de producto.                                                                                                                                                 |
| `sellerId`         | `productClick` / `productAddToCart` (marketplace)         | Identificador de vendedor.                                                                                                                                                 |
| `qty`              | `productAddToCart`                                        | Cantidad absoluta de este SKU en el carrito en el momento en que se dispara el evento (no un delta). Sustituir la macro {QTY} en el momento del disparo                    |
| `conVal`           | `productAddToCart`                                        | Valor monetario absoluto de esos artículos: cantidad × precio unitario, menos cualquier descuento aplicado. Sustituir `{CONVERSION_VALUE}` macro en el momento del disparo |

#### Campos dependientes de la plantilla en `contentData`

Aparte de los discriminadores principales en cada módulo (`id`, `brandPageModuleTemplateId`, `contentType`, `order`), la presencia de propiedades no es uniforme en las Páginas de marca. Prefiera la detección de características -compruebe cada propiedad antes de usarla- en lugar de tratar cada campo de los ejemplos como obligatorio.

La API puede representar "sin valor" de varias maneras:

| Patrón           | Significado                             | Manejo sugerido                                                          |
| ---------------- | --------------------------------------- | ------------------------------------------------------------------------ |
| Clave omitida    | Propiedad ausente del objeto JSON       | Tratar como ausente; usar encadenamiento opcional/valores por defecto    |
| Explicito `null` | Propiedad presente con `null` valor     | Igual que omitido, a menos que su serializador los distinga              |
| Cadena vacía     | `""` para campos de texto o de tipo URL | Por lo general, ocultar u omitir la representación de esa parte de la UI |

#### Ejemplos para tipos de módulos comunes

**Grid de productos:**

Cada fila de productos incluye un `product` objeto (`catalogId`, `productCode`, `sellerId`), an `order` valor, y `trackers` cuando la fila es rastreable. Las filas de productos proporcionan tanto un `click` espacio (`type: "productClick"`) y un `addToCart`espacio (`type: "productAddToCart"`) cuando el SKU es atribuible.

```

{
  "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:**

Titular, subtitular, texto del CTA y enlace, imagen, superposición y `trackers.click` para el CTA cuando esté 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}"
      }
    }
  }
}

```

**Galería de imágenes:**

Una matriz de imágenes, cada una con una URL, texto alternativo y pie de foto. `trackers.click` para una imagen solo cuando esa imagen incluye un enlace 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:**

Titular y cuerpo del texto, sin `trackers`a menos que haya un enlace presente en una línea.

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

**Imagen:**

Incluye una URL de imagen, pie de foto, texto alternativo, enlace opcional y `trackers.click` detalles cuando la imagen sea interactiva

```
{
  "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/es/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.
