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

# API de page de marque

## Routage d'URL

Lorsqu'un utilisateur navigue vers l'URL d'une page de marque, votre application extrait le `urlSlug` du chemin et l'envoie à l'API de diffusion d'annonces.

Structure d'URL : `<https://{your-domain}/{prefix}/{urlSlug}>`

| Segment       | Source                                                              | Exemple            |
| ------------- | ------------------------------------------------------------------- | ------------------ |
| `your-domain` | Votre site                                                          | `www.retailer.com` |
| `prefix`      | Configuré lors de l'intégration (par ex. marques, pages)            | `brands`           |
| `urlSlug`     | Extrait au moment de l'exécution à partir du chemin d'accès à l'URL | `adidas`           |

**Exemple**

Lorsqu'un utilisateur visite : `<https://www.retailer.com/brands/adidas:>`

1. Votre application correspond à la `/brands/*` route.
2. Extraits `adidas`comme urlSlug.
3. Appels `POST /ads/v3/brand-pages` sur votre hôte d'annonces attribué avec `"urlSlug": "adidas"` et votre `catalogId`.
4. Affiche les modules de contenu retournés sur la page.

### Règles de validation des slugs

Les marques créent des slugs qui respectent ces contraintes :

* **Caractères :** Lettres minuscules (a-z), chiffres (0-9), trait d'union (-) et tiret bas (\_).
* **Longueur :** Minimum 3 caractères, maximum 100 caractères.
* **Unicité :** Doit être unique au sein du catalogue du détaillant (`catalogId`).

{% hint style="info" %}
Pour l'instant, l'unicité du slug ne prend pas en compte les plages de dates des campagnes.
{% endhint %}

* **Immuabilité :** Ne peut pas être modifié après la mise en ligne de la campagne de page de marque.
* **Format :** Pas de traits d'union au début ou à la fin (par exemple, `-adidas`or `adidas-` ne sont pas autorisés).

## Mise en cache

* Ne mettez pas en cache les réponses de l'API de diffusion d'annonces. Envoyez toujours les requêtes directement à l'API Epsilon API pour s'assurer que :
  * La campagne de page de marque correcte est diffusée (les campagnes peuvent être suspendues, mises à jour ou remplacées).
  * Les URL de suivi incluent des identifiants récents par requête pour une attribution précise.
  * Le nombre d'impressions reste précis et n'est pas affecté par des réponses en cache obsolètes.

**Considération SEO** : Les détaillants peuvent choisir d'autoriser l'indexation des pages de marque par les moteurs de recherche. L'indexation du contenu des pages de marque peut améliorer la visibilité de la recherche organique, car tout le texte de la page est découvrable par les moteurs de recherche.

## Configuration d'un Reverse Proxy

### Pourquoi vous avez besoin d'un Reverse Proxy

**Le problème** : Les bloqueurs de publicités et les outils de confidentialité bloquent souvent les requêtes de suivi envoyées directement aux domaines publicitaires.

**La solution** : Acheminez toutes les requêtes de suivi via votre propre domaine pour qu'elles apparaissent comme du trafic de première partie.

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

* Remplacer `[third-party-tracking-domain]` avec le point de terminaison de suivi Epsilon réel fourni lors de l'intégration.
* Remplacer `[custom-path]` avec un chemin neutre et unique (par ex., `/media-proxy`, `/assets-endpoint`, ou tout terme non publicitaire).

Un reverse proxy est requis pour le suivi C2S (navigateur). Il ne s'applique pas aux appels S2S, qui doivent être envoyés directement à l'hôte Epsilon de suivi [(voir Suivi – Serveur à serveur (S2S)](/retail-media-interface/integration/fr/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### Configuration

Votre site doit héberger un reverse proxy sous un chemin tel que `https://www.retailer.com/{proxyPath}/`. Les requêtes de suivi du navigateur (C2S) vers votre domaine sur ce chemin sont transmises à votre hôte de suivi régional ([voir API d'ad serving](#ad-serving-api)). Le suivi de serveur à serveur ne doit pas utiliser ce proxy.

**Comportement :**

* Accepter les requêtes sous `/epsilon/`
* Transférer à `https://[region]-tracking.rmn.dotomi.com/` (voir [API d'ad serving](#ad-serving-api) pour `[region]`)
* Conserver le suffixe du chemin de fichier
* Transférer les en-têtes HTTP requis
* Appliquer HTTPS (TLS 1.2+)

### En-têtes requis

| En-tête                    | Description                                    |
| -------------------------- | ---------------------------------------------- |
| `RP-Host`                  | Votre nom d'hôte recevant la requête de suivi. |
| `X-Forwarded-For`          | Adresse IP réelle du client.                   |
| `X-Forwarded-Request-Path` | Chemin du préfixe du proxy (ex. /epsilon).     |
| `Referer`                  | La page où le pixel s'est déclenché.           |

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

### Exemple 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 diffusion d'annonces

Epsilon dessert les pages de marque depuis les hôtes RMN sur `*.rmn.dotomi.com`. Remplacez `[region]` par le segment Epsilon attribue pour votre déploiement.

L'API d'annonces utilise `https://[region]-ads.rmn.dotomi.com` ; tandis que les points de terminaison de suivi (pixels d'impression, redirections de clics et URL de notification S2S) utilisent `https://[region]-tracking.rmn.dotomi.com` avec la même valeur `[region]` .

Dans certaines configurations, les noms d'hôte de base `ads.rmn.dotomi.com` et `tracking.rmn.dotomi.com` peuvent être utilisés. Epsilon confirmera les noms d'hôte appropriés pour votre environnement.

### Point de terminaison

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

### Charge utile de la requête

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

Les valeurs `regs` ci-dessus illustrent le trafic applicable au RGPD :\
`gdpr` is `1`, et `consent`est une **chaîne de consentement synthétique IAB TCF v2** (forme et jeu de caractères corrects uniquement).

Dans les environnements de production :

* Définissez `gdpr`à partir de vos règles géographiques et juridiques.
* Transmettez la **chaîne TC en direct** depuis votre CMP (par exemple via `_ _tcfapi` `getTCData`→ `tcString`).

Pour les requêtes non soumises au RGPD, utilisez `"gdpr": 0` et omettez `consent`ou utilisez `""`

`iabConsentString` sur les événements de suivi : Chaque emplacement de tracker renseigné (`trackers.impression`, `trackers.click`, `trackers.addToCart`) inclut `params.iabConsentString`. Lorsque vous fournissez `regs.consent` sur la requête, cette valeur est la chaîne TC littérale.

Lorsque vous avez omis `regs.consent`, cette valeur est le remplacement de macro {TCF} - remplacez la chaîne TCF v2 actuelle de votre CMP (par exemple via `__tcfapi getTCData` → `tcString`) au moment du déclenchement avant d'envoyer toute requête de suivi.

### Définitions des champs de la requête

| Champ                | Type                 | Requis | Description                                                                                                                                                             |
| -------------------- | -------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | chaîne de caractères | Oui    | Identifiant unique de la requête (généré par le détaillant)                                                                                                             |
| `catalogId`          | chaîne de caractères | Oui    | ID du catalogue de produits du détaillant (fourni par Epsilon)                                                                                                          |
| `urlSlug`            | chaîne de caractères | Oui    | Lien permanent de l'URL de la page de marque (ex. adidas)                                                                                                               |
| site                 |                      |        |                                                                                                                                                                         |
| `site.domain`        | chaîne de caractères | Oui    | Domaine du site web du détaillant                                                                                                                                       |
| `site.page`          | chaîne de caractères | No     | URL complète où la page de marque est affichée                                                                                                                          |
| `site.ref`           | chaîne de caractères | No     | URL de provenance (d'où l'utilisateur a navigué)                                                                                                                        |
| appareil             |                      |        |                                                                                                                                                                         |
| `device.ua`          | chaîne de caractères | Oui    | Chaîne User Agent                                                                                                                                                       |
| `device.ip`          | chaîne de caractères | No     | Adresse IP du client                                                                                                                                                    |
| `device.language`    | chaîne de caractères | No     | Langue du navigateur (ex. fr-FR)                                                                                                                                        |
| `device.devicetype`  | entier               | No     | 1=mobile, 2=pc, 4=téléphone, 5=tablette                                                                                                                                 |
| `device.os`          | chaîne de caractères | No     | Système d'exploitation                                                                                                                                                  |
| `device.geo.country` | chaîne de caractères | No     | Code pays ISO 3166-1 alpha-3 (ex. USA, GBR)                                                                                                                             |
| `device.geo.region`  | chaîne de caractères | No     | État ou région                                                                                                                                                          |
| `device.geo.city`    | chaîne de caractères | No     | Ville                                                                                                                                                                   |
| `device.geo.zip`     | chaîne de caractères | No     | Code postal                                                                                                                                                             |
| utilisateur          |                      |        |                                                                                                                                                                         |
| `user.sessionId`     | chaîne de caractères | No     | Identifiant de session du détaillant (non PII)                                                                                                                          |
| `user.customerId`    | chaîne de caractères | No     | Identifiant client du détaillant (non PII)                                                                                                                              |
| `user.dtmId`         | chaîne de caractères | No     | Identifiant de suivi                                                                                                                                                    |
| règlements           |                      |        |                                                                                                                                                                         |
| `regs.gdpr`          | entier               | No     | `0` = Le RGPD ne s'applique pas, `1` = Le RGPD s'applique (selon la signalisation de type OpenRTB)                                                                      |
| `regs.consent`       | chaîne de caractères | No     | Chaîne de consentement IAB TCF **v2** (`tcString` du CMP). À utiliser uniquement lorsque `gdpr` is `1` et que vous disposez d'une chaîne valide ; sinon, omettez ou`""` |

{% hint style="danger" %}
**Important** Le JSON ci-dessous est un exemple représentatif et assez complet. Les réponses en direct sont souvent plus succinctes pour `contentData` modules. Ne générez pas de structures fixes qui supposent que chaque clé présentée ici est toujours présente pour chaque `contentType` ou page de marque.\
Les valeurs `theme` est différent : en cas de réponse réussie, il est toujours présent et utilise la structure imbriquée décrite dans la section Objet Theme (`colors`et `buttons` entièrement renseigné - chaînes hex6 requises pour chaque chemin ; pas de `nulls` à l'intérieur de `theme`).
{% endhint %}

### Charge utile de réponse

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

#### Définitions des champs de réponse

| Champ                                     | Type                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | chaîne de caractères | Identifiant publicitaire unique pour cette diffusion de page de marque. Utilisé dans tous les chemins de modèles de suivi.                                                                                                                                                                                                                                                                                                                                                                                |
| `brandPageTemplateId`                     | chaîne de caractères | ID de modèle utilisé pour cette page de marque                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `catalogId`                               | chaîne de caractères | ID de catalogue du distributeur (renvoyé à partir de la requête)                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `urlSlug`                                 | chaîne de caractères | Slug d'URL de la page de marque (renvoyé à partir de la requête)                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `theme`                                   | Objet                | <p>Toujours présent en cas de succès. Style au niveau de la page pour la marque : imbriqué <code>colors</code> (arrière-plan + <code>text</code> rôles) et <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, chacun avec <code>background</code>et <code>text</code>). Voir la <a href="#theme-object">Objet Thème</a> section.<br>Le corps de la réponse est renvoyé tel qu'il a été sérialisé par le serveur publicitaire (pas de remaniement intermédiaire de <code>theme</code>)</p> |
| `trackers`                                | objet                | Conteneur de suivi au niveau de la page. `trackers.impression` contient l'emplacement d'impression de la page : `type: "impression"` et `params` incluant au moins `ts: "`{TS}`"` et `iabConsentString`.                                                                                                                                                                                                                                                                                                  |
| `trackingTypes`                           | objet                | Mappage du type de suivi vers les clés de modèle applicables. Types : `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. Chaque valeur est un tableau de `client.*/` `server.*` clés provenant de `trackingTemplates`. (voir [Comment composer une URL de suivi](/retail-media-interface/integration/fr/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)).                                                                  |
| `trackingTemplates.client`                | objet                | Chemins d'accès URL **relatifs** et chaînes de requête pour le suivi du navigateur (C2S) - prépendez l'URL de base de votre reverse-proxy (`BASEURL`).                                                                                                                                                                                                                                                                                                                                                    |
| `trackingTemplates.server`                | objet                | Modèles d'URL **absolues** sur le Epsilon hôte de suivi pour le S2S.                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `contentData[]`                           | tableau              | Tableau ordonné des modules de contenu à afficher                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `contentData[].id`                        | chaîne de caractères | ID d'instance du module                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `contentData[].brandPageModuleTemplateId` | chaîne de caractères | ID de modèle du module                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `contentData[].contentType`               | chaîne de caractères | Type de module : HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                                                                                                                                                                            |
| `contentData[].order`                     | entier               | Ordre d'affichage (croissant)                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `contentData[].tags`                      | tableau de chaînes   | Optionnel. Balises de module définies par le distributeur dans le modèle. Totalement omis lorsqu'aucune balise n'est définie - considérez l'absence comme "aucune balise". Également présent sur les modules imbriqués dans SPLIT\_LAYOUT.                                                                                                                                                                                                                                                                |
| `contentData[].trackers`                  | objet                | Lorsqu'il est présent, conteneur de suivi par nœud. `trackers.click` pour les événements de clic sur les liens/interactions/produits ; `trackers.addToCart` pour l'ajout au panier d'un produit (inclut les macros {QTY} et {CONVERSION\_VALUE}). Peut être omis lorsqu'il n'y a rien à suivre.                                                                                                                                                                                                           |

### Objet Theme

Chaque réponse réussie de l'API Brand Page inclut un `theme` objet : couleurs au niveau de la page et styles de boutons configurés pour la marque. Appliquez ces valeurs lors de l'affichage (par exemple, mappez-les sur des propriétés personnalisées CSS ou sur vos jetons de conception). Le JSON est produit par le serveur publicitaire et livré tel qu'il est renvoyé - il n'y a pas d'étape séparée qui réécrit le `theme`.

**Format des couleurs :** Les valeurs de couleur du thème suivent le contrat de plateforme en amont (campagne/configuration) : chaque valeur est un `#` suivi de six chiffres hexadécimaux (hex6), par exemple, `#ff6600`. Ne vous attendez pas à d'autres formats (hex3 court, hexadécimal à huit chiffres, `rgb()`, `hsl()`ou couleurs nommées). Le serveur publicitaire ne revalide pas le format de couleur au moment de la diffusion ; l'amont fournit du hex6 pour chaque champ de thème.

#### Structure et sémantique

* `theme` contient `colors` et `buttons` - les deux sont requis chaque fois que `theme` est présent.
* `colors.background` - arrière-plan de la page ou du canvas (hex6 requis).
* `colors.text` - sept rôles requis : `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (lignes/séparateurs). Chaque valeur est une chaîne hex6.
* `buttons.primary` et `buttons.secondary` - chacun nécessite `background` et `text` (remplissage du bouton et couleurs de texte), chacun étant une chaîne hex6.
* Chaque chemin dans le tableau de référence des champs ci-dessous est requis. Il n'y a pas d'emplacements de couleur optionnels et pas de `null` valeurs à l'intérieur `theme`. (Les champs clairsemés ou omis s'appliquent ailleurs, par exemple dans `contentData` modules.)
* Les valeurs `theme` est au niveau de la page - tous les modules de la page marque partagent le même thème.

#### Référence des champs

Tous les chemins de ce tableau sont requis (chaînes hex6 non nulles).

| Chemin                               | Description                         |
| ------------------------------------ | ----------------------------------- |
| `theme.colors.background`            | Arrière-plan de la page/du canevas  |
| `theme.colors.text.heading`          | Texte du titre                      |
| `theme.colors.text.subheading`       | Texte du sous-titre                 |
| `theme.colors.text.body`             | Texte du corps/paragraphe           |
| `theme.colors.text.caption`          | Légende/texte secondaire            |
| `theme.colors.text.link`             | Texte du lien                       |
| `theme.colors.text.tagline`          | Texte du slogan                     |
| `theme.colors.text.lines`            | Lignes et séparateurs               |
| `theme.buttons.primary.background`   | Remplissage du bouton CTA principal |
| `theme.buttons.primary.text`         | Étiquette du bouton CTA principal   |
| `theme.buttons.secondary.background` | Remplissage du bouton secondaire    |
| `theme.buttons.secondary.text`       | Étiquette du bouton secondaire      |

Exemple - (`theme`objet uniquement) :

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

#### Par nœud `params`(clés typiques)

| Paramètre          | Lorsqu'utilisé                                               | Description                                                                                                                                                                   |
| ------------------ | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `modId`            | La plupart des nœuds interactifs                             | Identifiant du module de contenu ou de la ligne.                                                                                                                              |
| `rurl`             | `link` / `productClick`lorsqu'une redirection est nécessaire | Destination encodée en URL                                                                                                                                                    |
| `ts`               | La plupart des événements                                    | Horodatage d'invalidation du cache ; substituez `"{TS}"`au moment du déclenchement.                                                                                           |
| `iabConsentString` | Tous les emplacements de tracker                             | Chaîne TC littérale, ou macro {TCF} à substituer au moment du déclenchement                                                                                                   |
| `productCode`      | `productClick` / `productAddToCart`                          | Identifiant du produit.                                                                                                                                                       |
| `sellerId`         | `productClick` / `productAddToCart` (marketplace)            | Identifiant du vendeur.                                                                                                                                                       |
| `qty`              | `productAddToCart`                                           | Quantité absolue de cet UVC dans le panier au moment du déclenchement de l'événement (pas une variation). Substituez la macro {QTY} au moment du déclenchement                |
| `conVal`           | `productAddToCart`                                           | Valeur monétaire absolue de ces articles : quantité × prix unitaire, moins toutes les remises appliquées. Substituez `{CONVERSION_VALUE}` la macro au moment du déclenchement |

#### Champs dépendant du modèle dans `contentData`

Outre les discriminateurs principaux sur chaque module (`id`, `brandPageModuleTemplateId`, `contentType`, `order`), la présence de propriétés n'est pas uniforme sur l'ensemble des pages marque. Privilégiez la détection des fonctionnalités - vérifiez chaque propriété avant utilisation - plutôt que de traiter chaque champ des exemples comme obligatoire.

L'API peut représenter « aucune valeur » de plusieurs manières :

| Motif            | Signification                                   | Gestion suggérée                                                              |
| ---------------- | ----------------------------------------------- | ----------------------------------------------------------------------------- |
| Clé omise        | Propriété absente de l'objet JSON               | Traiter comme absente ; utiliser le chaînage optionnel/les valeurs par défaut |
| Explicite `null` | Propriété présente avec la valeur `null` valeur | Identique à omis, sauf si votre sérialiseur les distingue                     |
| Chaîne vide      | `""` pour les champs de texte ou de type URL    | Masquer ou ignorer généralement le rendu de cette section de l'IU             |

#### Exemples pour les types de modules courants

**Grille de produits :**

Chaque ligne de produits comprend un `product` objet (`catalogId`, `productCode`, `sellerId`), an `order` valeur, et `trackers` lorsque la ligne est traçable. Les lignes de produits fournissent à la fois un `click` emplacement (`type: "productClick"`) et un `addToCart`emplacement (`type: "productAddToCart"`) lorsque le SKU est attribuable.

```

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

Titre, sous-titre, texte et lien du CTA, image, superposition et `trackers.click` pour le CTA lorsqu'il est présent.

```

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

```

**Galerie d'images :**

Un tableau d'images, chacune avec une URL, un texte alternatif et une légende. `trackers.click` pour une image uniquement lorsque cette image contient un lien externe.

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

**Texte :**

Titre et corps du texte, sans `trackers`sauf si un lien est présent sur une ligne.

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

**Image :**

Comprend une URL d'image, une légende, un texte alternatif, un lien optionnel et `trackers.click` des détails lorsque l'image est cliquable

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