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

# API per le pagine del brand

## Routing dell'URL

Quando un utente naviga verso l'URL di una pagina del brand, la tua applicazione estrae il `urlSlug` dal percorso e lo invia all'API ad‑serving.

Struttura dell'URL: `<https://{your-domain}/{prefix}/{urlSlug}>`

| Segmento      | Origine                                                 | Esempio            |
| ------------- | ------------------------------------------------------- | ------------------ |
| `your-domain` | Il tuo sito                                             | `www.retailer.com` |
| `prefix`      | Configurato durante l'onboarding (ad es. brand, pagine) | `brands`           |
| `urlSlug`     | Estratto al runtime dal percorso dell'URL               | `adidas`           |

**Esempio**

Quando un utente visita: `<https://www.retailer.com/brands/adidas:>`

1. La tua applicazione individua la corrispondenza per l'itinerario `/brands/*` .
2. Estrae `adidas`come urlSlug.
3. Chiama `POST /ads/v3/brand-pages` sul tuo host di annunci assegnato con `"urlSlug": "adidas"` e il tuo `catalogId`.
4. Esegue il rendering nella pagina dei moduli di contenuto restituiti.

### Regole di convalida dello slug

I brand creano gli slug nel rispetto dei seguenti vincoli:

* **Caratteri:** Lettere minuscole (a–z), numeri (0–9), trattini (-) e trattini bassi (\_).
* **Lunghezza:** Minimo 3 caratteri, massimo 100 caratteri.
* **Univocità:** Deve essere univoco all'interno del catalogo del retailer (`catalogId`).

{% hint style="info" %}
Al momento, l'univocità dello slug non prende in considerazione gli intervalli di date della campagna.
{% endhint %}

* **Immutabilità:** Non può essere modificato dopo che la campagna della pagina del brand è online.
* **Formato:** Nessun trattino iniziale o finale (ad esempio, `-adidas`or `adidas-` non sono consentiti).

## Caching

* Non memorizzare in cache le risposte dell'API ad‑serving. Invia sempre le richieste direttamente all'API Epsilon per garantire che:
  * Venga erogata la campagna della pagina del brand corretta (le campagne possono essere messe in pausa, aggiornate o sostituite).
  * Gli URL di tracciamento includano identificatori aggiornati e specifici per singola richiesta per un'attribuzione accurata.
  * I conteggi delle impression rimangano accurati e non siano influenzati da risposte obsolete in cache.

**Considerazione SEO**: I retailer possono scegliere di consentire l'indicizzazione delle Pagine del brand da parte dei motori di ricerca. L'indicizzazione dei contenuti della pagina del brand può migliorare la visibilità nella ricerca organica, poiché tutto il testo presente sulla pagina diventa individuabile dai motori di ricerca.

## Configurazione del Reverse Proxy

### Perché è necessario un Reverse Proxy

**Il problema**: Gli ad blocker e gli strumenti di tutela della privacy spesso bloccano le richieste di tracciamento inviate direttamente ai domini pubblicitari.

**La soluzione**: Inoltra tutte le richieste di tracciamento attraverso il tuo dominio in modo che appaiano come traffico di prima parte.

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

* Sostituisci `[third-party-tracking-domain]` con l'effettivo Epsilon endpoint di tracciamento fornito durante l'onboarding.
* Sostituisci `[custom-path]` con un percorso neutro e univoco (ad es., `/media-proxy`, `/assets-endpoint`, o qualsiasi termine non legato alla pubblicità).

È necessario un reverse proxy per il tracciamento C2S (browser). Non si applica alle chiamate S2S, che devono essere inviate direttamente all' Epsilon host di tracciamento [(vedi Tracciamento – Server-to-Server (S2S](/retail-media-interface/integration/it/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### Configurazione

Il tuo sito deve ospitare un reverse proxy sotto un percorso come `https://www.retailer.com/{proxyPath}/`. Le richieste di tracciamento del browser (C2S) al tuo dominio su quel percorso vengono inoltrate al tuo host di tracciamento regionale ([vedi Ad Serving API](#ad-serving-api)). Il tracciamento server-to-server non deve utilizzare questo proxy.

**Comportamento:**

* Accetta richieste in `/epsilon/`
* Inoltra a `https://[region]-tracking.rmn.dotomi.com/` (vedi [API Ad Serving](#ad-serving-api) per `[region]`)
* Conserva il suffisso del percorso del file
* Inoltra gli intestazioni HTTP richieste
* Imponi HTTPS (TLS 1.2+)

### Intestazioni richieste

| Intestazione               | Descrizione                                               |
| -------------------------- | --------------------------------------------------------- |
| `RP-Host`                  | Il tuo nome host che riceve la richiesta di tracciamento. |
| `X-Forwarded-For`          | Indirizzo IP effettivo del client.                        |
| `X-Forwarded-Request-Path` | Percorso del prefisso del proxy (ad es. /epsilon).        |
| `Referer`                  | La pagina in cui si è attivato il pixel.                  |

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

### Esempio 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 Ad Serving

Epsilon eroga le pagine del brand dagli host RMN su `*.rmn.dotomi.com`. Sostituisci `[region]` con il segmento Epsilon assegna per il tuo deployment.

L'API degli annunci utilizza `https://[region]-ads.rmn.dotomi.com`; mentre gli endpoint di tracciamento (pixel di impression, reindirizzamenti dei clic e URL di notifica S2S) utilizzano `https://[region]-tracking.rmn.dotomi.com` con lo stesso valore `[region]` .

In alcune configurazioni, gli hostname di base `ads.rmn.dotomi.com` e `tracking.rmn.dotomi.com` possono essere utilizzati. Epsilon confermerà gli hostname appropriati per il tuo ambiente.

### Endpoint

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

### Payload della richiesta

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

I valori `regs` sopra illustrano il traffico soggetto al GDPR:\
`gdpr` is `1`, e `consent`è una **stringa di consenso sintetica IAB TCF v2** (solo forma e set di caratteri corretti).

Negli ambienti di produzione:

* Imposta `gdpr`dalle tue regole geografiche e legali.
* Passa la **stringa TC effettiva** dalla tua CMP (ad esempio tramite `_ _tcfapi` `getTCData`→ `tcString`).

Per le richieste non soggette al GDPR, utilizza `"gdpr": 0` e ometti `consent`oppure utilizza `""`

`iabConsentString` sugli eventi di tracciamento: ogni slot di tracciamento popolato (`trackers.impression`, `trackers.click`, `trackers.addToCart`) include `params.iabConsentString`. Quando fornisci `regs.consent` nella richiesta, questo valore è la stringa TC letterale.

Quando hai omesso `regs.consent`, questo valore è il segnaposto della macro {TCF} - sostituisci la stringa TCF v2 corrente dalla tua CMP (ad esempio tramite `__tcfapi getTCData` → `tcString`) al momento dell'invio prima di inviare qualsiasi richiesta di tracciamento.

### Definizioni dei campi della richiesta

| Campo                | Tipo    | Obbligatorio | Descrizione                                                                                                                                   |
| -------------------- | ------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | string  | Sì           | Identificatore univoco della richiesta (generato dal retailer)                                                                                |
| `catalogId`          | string  | Sì           | ID catalogo prodotti del retailer (fornito da Epsilon)                                                                                        |
| `urlSlug`            | string  | Sì           | Slug dell'URL della pagina del brand (ad es. adidas)                                                                                          |
| site                 |         |              |                                                                                                                                               |
| `site.domain`        | string  | Sì           | Dominio del sito web del retailer                                                                                                             |
| `site.page`          | string  | No           | URL completo in cui viene visualizzata la pagina del brand                                                                                    |
| `site.ref`           | string  | No           | URL referrer (da dove è navigato l'utente)                                                                                                    |
| device               |         |              |                                                                                                                                               |
| `device.ua`          | string  | Sì           | Stringa user agent                                                                                                                            |
| `device.ip`          | string  | No           | Indirizzo IP del client                                                                                                                       |
| `device.language`    | string  | No           | Lingua del browser (ad es. en-US)                                                                                                             |
| `device.devicetype`  | integer | No           | 1=mobile, 2=pc, 4=phone, 5=tablet                                                                                                             |
| `device.os`          | string  | No           | Sistema operativo                                                                                                                             |
| `device.geo.country` | string  | No           | Codice paese ISO 3166-1 alpha-3 (ad es. USA, GBR)                                                                                             |
| `device.geo.region`  | string  | No           | Stato o regione                                                                                                                               |
| `device.geo.city`    | string  | No           | Città                                                                                                                                         |
| `device.geo.zip`     | string  | No           | Codice postale/ZIP                                                                                                                            |
| user                 |         |              |                                                                                                                                               |
| `user.sessionId`     | string  | No           | Identificatore di sessione del retailer (non-PII)                                                                                             |
| `user.customerId`    | string  | No           | Identificatore cliente del retailer (non-PII)                                                                                                 |
| `user.dtmId`         | string  | No           | Identificatore di tracciamento                                                                                                                |
| regs                 |         |              |                                                                                                                                               |
| `regs.gdpr`          | integer | No           | `0` = Il GDPR non si applica, `1` = Il GDPR si applica (secondo la segnalazione in stile OpenRTB)                                             |
| `regs.consent`       | string  | No           | Stringa di consenso IAB TCF **v2** (`tcString` dal CMP). Utilizza solo quando `gdpr` is `1` e hai una stringa valida; altrimenti ometti o`""` |

{% hint style="danger" %}
**Importante** Il JSON seguente è un esempio rappresentativo e abbastanza completo. Le risposte live sono spesso più essenziali per `contentData` moduli. Non generare strutture fisse che presuppongono che ogni chiave mostrata qui sia sempre presente per ogni `contentType` o pagina del brand.\
I valori `theme` è diverso: su una risposta con esito positivo, è sempre presente e utilizza la struttura annidata descritta nella sezione Oggetto tema (`colors`e `buttons` completamente popolato - stringhe hex6 obbligatorie per ogni percorso; nessun `nulls` all'interno di `theme`).
{% endhint %}

### Payload di risposta

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

#### Definizioni dei campi di risposta

| Campo                                     | Tipo              | Descrizione                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ----------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | string            | Identificatore di annuncio univoco per questo serve della pagina del brand. Utilizzato in tutti i percorsi dei modelli di tracciamento.                                                                                                                                                                                                                                                                                                                                           |
| `brandPageTemplateId`                     | string            | ID modello utilizzato per questa pagina del brand                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `catalogId`                               | string            | ID catalogo del retailer (riportato dalla richiesta)                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `urlSlug`                                 | string            | Slug URL della pagina del brand (riportato dalla richiesta)                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `theme`                                   | Oggetto           | <p>Sempre presente in caso di successo. Stile a livello di pagina dal brand: annidato <code>colors</code> (sfondo + <code>text</code> ruoli) e <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, ciascuno con <code>background</code>e <code>text</code>). Vedi <a href="#theme-object">Oggetto Theme</a> sezione.<br>Il corpo della risposta viene restituito così come serializzato dall'ad server (nessun riadattamento intermedio di <code>theme</code>)</p> |
| `trackers`                                | oggetto           | Contenitore di tracciamento a livello di pagina. `trackers.impression` contiene lo slot di impression della pagina: `type: "impression"` e `params` incluso almeno `ts: "`{TS}`"` e `iabConsentString`.                                                                                                                                                                                                                                                                           |
| `trackingTypes`                           | oggetto           | Mappa del tipo di tracciamento per le chiavi modello applicabili. Tipi: `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. Ciascun valore è un array di `client.*/` `server.*` chiavi da `trackingTemplates`. (vedi [Come comporre un URL di tracciamento](/retail-media-interface/integration/it/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)).                                                |
| `trackingTemplates.client`                | oggetto           | Percorsi URL **relativi** e stringhe di query per il tracciamento del browser (C2S) - anteponi l'URL di base del tuo reverse-proxy (`BASEURL`).                                                                                                                                                                                                                                                                                                                                   |
| `trackingTemplates.server`                | oggetto           | Modelli URL **assoluti** sul Epsilon host di tracciamento per S2S.                                                                                                                                                                                                                                                                                                                                                                                                                |
| `contentData[]`                           | array             | Array ordinato di moduli di contenuto da renderizzare                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `contentData[].id`                        | string            | ID istanza del modulo                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `contentData[].brandPageModuleTemplateId` | string            | ID modello del modulo                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `contentData[].contentType`               | string            | Tipo di modulo: HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                                                                                                                                                     |
| `contentData[].order`                     | integer           | Ordine di rendering (crescente)                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `contentData[].tags`                      | array di stringhe | Opzionale. Tag di modulo impostati dal retailer nel modello. Omessi completamente quando non è impostato alcun tag - considera la mancanza come "nessun tag". Presenti anche sui moduli annidati all'interno di SPLIT\_LAYOUT.                                                                                                                                                                                                                                                    |
| `contentData[].trackers`                  | oggetto           | Quando presente, contenitore di tracciamento per nodo. `trackers.click` per eventi di click su link/interazione/prodotto; `trackers.addToCart` per aggiunta al carrello del prodotto (include le macro {QTY} e {CONVERSION\_VALUE}). Può essere omesso quando non c'è nulla da tracciare.                                                                                                                                                                                         |

### Oggetto tema

Ogni risposta API della pagina del brand con esito positivo include un `theme` oggetto: colori a livello di pagina e stili dei pulsanti configurati per il brand. Applica questi valori durante il rendering (ad esempio, mappali su proprietà CSS personalizzate o sui tuoi token di design). Il JSON viene prodotto dall'ad server e fornito così come restituito - non c'è un passaggio separato che riscrive il `theme`.

**Formato colore:** I valori di colore del tema seguono il contratto della piattaforma a monte (campagna/configurazione): ciascun valore è un `#` seguito da sei cifre esadecimali (hex6), ad esempio, `#ff6600`. Non aspettarti altri formati (hex3 breve, hex a otto cifre, `rgb()`, `hsl()`o colori con nome). L'ad server non riconvalida il formato del colore al momento del serve; a monte viene fornito l'hex6 per ogni campo del tema.

#### Struttura e semantica

* `theme` contiene `colors` e `buttons` - entrambi sono obbligatori ogni volta che `theme` è presente.
* `colors.background` - sfondo della pagina o della canvas (hex6 obbligatorio).
* `colors.text` - sette ruoli obbligatori: `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (linee/divisori). Ciascun valore è una stringa hex6.
* `buttons.primary` e `buttons.secondary` - ciascuno richiede `background` e `text` (colori di riempimento ed etichetta del pulsante), ciascuno una stringa hex6.
* Ogni percorso nella tabella di riferimento dei campi seguente è obbligatorio. Non ci sono slot di colore opzionali e nessun `null` valori all'interno `theme`. (I campi sparsi o omessi si applicano altrove, ad esempio nei `contentData` moduli.)
* I valori `theme` è a livello di pagina - tutti i moduli nella Pagina Brand condividono lo stesso tema.

#### Riferimento campo

Tutti i percorsi in questa tabella sono obbligatori (stringhe hex6 non nulle).

| Percorso                             | Descrizione                       |
| ------------------------------------ | --------------------------------- |
| `theme.colors.background`            | Sfondo pagina/canvas              |
| `theme.colors.text.heading`          | Testo del titolo                  |
| `theme.colors.text.subheading`       | Testo del sottotitolo             |
| `theme.colors.text.body`             | Testo del corpo/paragrafo         |
| `theme.colors.text.caption`          | Didascalia/testo secondario       |
| `theme.colors.text.link`             | Testo del link                    |
| `theme.colors.text.tagline`          | Testo dello slogan                |
| `theme.colors.text.lines`            | Linee e divisori                  |
| `theme.buttons.primary.background`   | Riempimento pulsante CTA primario |
| `theme.buttons.primary.text`         | Etichetta pulsante CTA primario   |
| `theme.buttons.secondary.background` | Riempimento pulsante secondario   |
| `theme.buttons.secondary.text`       | Etichetta pulsante secondario     |

Esempio - (`theme`solo \*\*oggetto):

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

#### Per singolo nodo `params`(chiavi tipiche)

| Parametro          | Quando utilizzato                                              | Descrizione                                                                                                                                                                |
| ------------------ | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `modId`            | La maggior parte dei nodi interattivi                          | Identificatore del modulo di contenuto o della riga.                                                                                                                       |
| `rurl`             | `link` / `productClick`quando è necessario un reindirizzamento | Destinazione codificata in URL                                                                                                                                             |
| `ts`               | La maggior parte degli eventi                                  | Timestamp di superamento della cache; sostituire `"{TS}"`al momento dell'attivazione.                                                                                      |
| `iabConsentString` | Tutti gli slot del tracker                                     | Stringa TC letterale, o macro {TCF} da sostituire al momento dell'attivazione                                                                                              |
| `productCode`      | `productClick` / `productAddToCart`                            | Identificatore prodotto.                                                                                                                                                   |
| `sellerId`         | `productClick` / `productAddToCart` (marketplace)              | Identificatore venditore.                                                                                                                                                  |
| `qty`              | `productAddToCart`                                             | Quantità assoluta di questo SKU nel carrello al momento dell'attivazione dell'evento (non un delta). Sostituire la macro {QTY} al momento dell'attivazione                 |
| `conVal`           | `productAddToCart`                                             | Valore monetario assoluto di tali articoli: quantità × prezzo unitario, meno eventuali sconti applicati. Sostituire `{CONVERSION_VALUE}` macro al momento dell'attivazione |

#### Campi dipendenti dal modello in `contentData`

A parte i discriminatori principali su ciascun modulo (`id`, `brandPageModuleTemplateId`, `contentType`, `order`), la presenza delle proprietà non è uniforme nelle Pagine Brand. È preferibile il rilevamento delle funzionalità - verificare ciascuna proprietà prima dell'uso - anziché trattare ogni campo negli esempi come obbligatorio.

L'API può rappresentare "nessun valore" in diversi modi:

| Modello          | Significato                            | Gestione suggerita                                                     |
| ---------------- | -------------------------------------- | ---------------------------------------------------------------------- |
| Chiave omessa    | Proprietà assente dall'oggetto JSON    | Trattare come assente; utilizzare optional chaining/valori predefiniti |
| Esplicito `null` | Proprietà presente con `null` valore   | Uguale a omesso, a meno che il serializzatore non li distingua         |
| Stringa vuota    | `""` per campi di testo o simili a URL | Di solito nasconde o salta il rendering di quella porzione di UI       |

#### Esempi per tipi di modulo comuni

**Griglia prodotti:**

Ogni riga di prodotto include un `product` oggetto (`catalogId`, `productCode`, `sellerId`), an `order` valore, e `trackers` quando la riga è tracciabile. Le righe di prodotto forniscono sia uno `click` slot (`type: "productClick"`) e un `addToCart`slot (`type: "productAddToCart"`) quando lo SKU è attribuibile.

```

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

Titolo, sottotitolo, testo e link della CTA, immagine, sovrapposizione e `trackers.click` per la 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}"
      }
    }
  }
}

```

**Galleria immagini:**

Un array di immagini, ciascuna con URL, testo alternativo e dicitura. `trackers.click` solo per un'immagine quando tale immagine contiene un link esterno.

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

**Testo:**

Titolo e corpo del testo, senza `trackers`a meno che non sia presente un link su una riga.

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

**Immagine:**

Include un URL dell'immagine, dicitura, testo alternativo, link opzionale e `trackers.click` dettagli quando l'immagine è cliccabile

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