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

# Brand Page-APIs

## URL-Routing

Wenn ein Benutzer zu einer Brand Page-URL navigiert, extrahiert Ihre Anwendung den `urlSlug` aus dem Pfad und sendet ihn an die Ad-Serving-API.

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

| Segment       | Quelle                                                      | Beispiel           |
| ------------- | ----------------------------------------------------------- | ------------------ |
| `your-domain` | Ihre Website                                                | `www.retailer.com` |
| `prefix`      | Während des Onboardings konfiguriert (z. B. Marken, Seiten) | `brands`           |
| `urlSlug`     | Zur Laufzeit aus dem URL-Pfad extrahiert                    | `adidas`           |

**Beispiel**

Wenn ein Benutzer Folgendes besucht: `<https://www.retailer.com/brands/adidas:>`

1. Ihre Anwendung gleicht die `/brands/*` Route ab.
2. Extrahiert `adidas`als urlSlug.
3. Ruft `POST /ads/v3/brand-pages` auf Ihrem zugewiesenen Ads-Host auf mit `"urlSlug": "adidas"` und Ihrem `catalogId`.
4. Rendert die zurückgegebenen Inhaltsmodule auf der Seite.

### Regeln zur Slug-Validierung

Marken erstellen Slugs unter Einhaltung folgender Einschränkungen:

* **Zeichen:** Kleinbuchstaben (a–z), Zahlen (0–9), Bindestriche (-) und Unterstriche (\_).
* **Länge:** Mindestens 3 Zeichen, maximal 100 Zeichen.
* **Eindeutigkeit:** Muss innerhalb des Katalogs des Händlers eindeutig sein (`catalogId`).

{% hint style="info" %}
Derzeit berücksichtigt die Slug-Eindeutigkeit keine Kampagnen-Datumsbereiche.
{% endhint %}

* **Unveränderlichkeit:** Kann nach dem Start der Brand Page-Kampagne nicht mehr geändert werden.
* **Format:** Keine führenden oder abschließenden Bindestriche (zum Beispiel `-adidas`or `adidas-` sind nicht erlaubt).

## Caching

* Speichern Sie Antworten der Ad-Serving-API nicht im Cache. Senden Sie Anfragen immer direkt an die Epsilon API, um Folgendes sicherzustellen:
  * Die richtige Brand Page-Kampagne wird ausgeliefert (Kampagnen können pausiert, aktualisiert oder ausgetauscht werden).
  * Tracking-URLs enthalten frische Identifier pro Anfrage für eine genaue Zuordnung.
  * Impression-Zählungen bleiben genau und werden nicht durch veraltete Antworten im Cache beeinträchtigt.

**SEO-Überlegung**: Händler können festlegen, dass Brand Pages von Suchmaschinen indiziert werden dürfen. Die Indizierung von Brand Page-Inhalten kann die organische Suchsichtbarkeit verbessern, da der gesamte Text auf der Seite für Suchmaschinen auffindbar ist.

## Reverse Proxy-Einrichtung

### Warum Sie einen Reverse Proxy benötigen

**Das Problem**: Werbeblocker und Datenschutz-Tools blockieren häufig Tracking-Anfragen, die direkt an Werbedomains gesendet werden.

**Die Lösung**: Leiten Sie alle Tracking-Anfragen über Ihre eigene Domain, damit sie als First-Party-Traffic erscheinen.

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

* Ersetzen Sie `[third-party-tracking-domain]` durch den tatsächlichen Epsilon Tracking-Endpunkt, der während des Onboardings bereitgestellt wurde.
* Ersetzen Sie `[custom-path]` durch einen neutralen, eindeutigen Pfad (z. B. `/media-proxy`, `/assets-endpoint`oder einen anderen Begriff, der nicht mit Werbung zusammenhängt).

Ein Reverse Proxy ist für das C2S-Tracking (Browser) erforderlich. Er gilt nicht für S2S-Aufrufe, die direkt an den Epsilon Tracking-Host gesendet werden müssen. [(siehe Tracking – Server-to-Server (S2S)](/retail-media-interface/integration/de/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### Konfiguration

Ihre Website muss einen Reverse Proxy unter einem Pfad wie `https://www.retailer.com/{proxyPath}/`hosten. Browser-Tracking-Anfragen (C2S) an Ihre Domain auf diesem Pfad werden an Ihren regionalen Tracking-Host weitergeleitet ([siehe Ad Serving API](#ad-serving-api)). Server-to-Server-Tracking darf diesen Proxy nicht verwenden.

**Verhalten:**

* Anfragen akzeptieren unter `/epsilon/`
* Weiterleiten an `https://[region]-tracking.rmn.dotomi.com/` (siehe [Ad Serving-API](#ad-serving-api) für `[region]`)
* Suffix des Dateipfads beibehalten
* Erforderliche HTTP-Header weiterleiten
* HTTPS erzwingen (TLS 1.2+)

### Erforderliche Header

| Header                     | Beschreibung                                     |
| -------------------------- | ------------------------------------------------ |
| `RP-Host`                  | Ihr Hostname, der die Tracking-Anfrage empfängt. |
| `X-Forwarded-For`          | Tatsächliche Client-IP-Adresse.                  |
| `X-Forwarded-Request-Path` | Proxy-Präfix-Pfad (z. B. /epsilon).              |
| `Referer`                  | Die Seite, auf der der Pixel ausgelöst wurde.    |

### Apache-Beispiel

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

### NGINX-Beispiel

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

## Ad Serving API

Epsilon stellt Marken-Seiten von RMN-Hosts bereit auf `*.rmn.dotomi.com`. Ersetzen Sie `[region]` durch das Segment, das Epsilon für Ihre Bereitstellung zuweist.

Die Anzeigen-API verwendet `https://[region]-ads.rmn.dotomi.com`; während Tracking-Endpunkte (Impression-Pixel, Klick-Weiterleitungen und S2S-Benachrichtigungs-URLs) `https://[region]-tracking.rmn.dotomi.com` mit demselben `[region]` -Wert verwenden.

In einigen Konfigurationen können die Basis-Hostnamen `ads.rmn.dotomi.com` und `tracking.rmn.dotomi.com` verwendet werden. Epsilon wird die passenden Hostnamen für Ihre Umgebung bestätigen.

### Endpunkt

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

### Nutzlast der Anfrage

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

Die `regs` Werte oben veranschaulichen den Datenverkehr, für den die DSGVO gilt:\
`gdpr` is `1`, und `consent`ist eine **synthetische IAB TCF v2 Consent-Zeichenkette** (nur korrekte Form und Zeichensatz).

In Produktionsumgebungen:

* Legen Sie `gdpr`gemäß Ihren geografischen und rechtlichen Regeln fest.
* Übergeben Sie die **aktuelle TC-Zeichenkette** von Ihrer CMP (zum Beispiel über `_ _tcfapi` `getTCData`→ `tcString`).

Für Anfragen, die nicht unter die DSGVO fallen, verwenden Sie `"gdpr": 0` und lassen Sie `consent`weg oder verwenden Sie `""`

`iabConsentString` bei Tracking-Ereignissen: Jeder ausgefüllte Tracker-Slot (`trackers.impression`, `trackers.click`, `trackers.addToCart`) enthält `params.iabConsentString`. Wenn Sie `regs.consent` in der Anfrage angeben, ist dieser Wert die wörtliche TC-Zeichenkette.

Wenn Sie `regs.consent`weggelassen haben, ist dieser Wert der {TCF}-Makro-Platzhalter – ersetzen Sie diesen vor dem Senden einer Tracking-Anfrage beim Auslösen durch die aktuelle TCF v2-Zeichenkette von Ihrer CMP (zum Beispiel über `__tcfapi getTCData` → `tcString`).

### Felddefinitionen für Anfragen

| Feld                 | Typ     | Erforderlich | Beschreibung                                                                                                                                                                 |
| -------------------- | ------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | string  | Ja           | Eindeutige Anfrage-ID (vom Händler generiert)                                                                                                                                |
| `catalogId`          | string  | Ja           | Produktkatalog-ID des Händlers (bereitgestellt von Epsilon)                                                                                                                  |
| `urlSlug`            | string  | Ja           | URL-Slug der Marken-Seite (z. B. adidas)                                                                                                                                     |
| site                 |         |              |                                                                                                                                                                              |
| `site.domain`        | string  | Ja           | Website-Domain des Händlers                                                                                                                                                  |
| `site.page`          | string  | No           | Vollständige URL, unter der die Marken-Seite gerendert wird                                                                                                                  |
| `site.ref`           | string  | No           | Referrer-URL (von der aus der Benutzer navigiert hat)                                                                                                                        |
| device               |         |              |                                                                                                                                                                              |
| `device.ua`          | string  | Ja           | User-Agent-Zeichenkette                                                                                                                                                      |
| `device.ip`          | string  | No           | Client-IP-Adresse                                                                                                                                                            |
| `device.language`    | string  | No           | Browser-Sprache (z. B. en-US)                                                                                                                                                |
| `device.devicetype`  | integer | No           | 1=Mobile, 2=PC, 4=Phone, 5=Tablet                                                                                                                                            |
| `device.os`          | string  | No           | Betriebssystem                                                                                                                                                               |
| `device.geo.country` | string  | No           | ISO 3166-1 Alpha-3-Ländercode (z. B. USA, GBR)                                                                                                                               |
| `device.geo.region`  | string  | No           | Bundesland oder Region                                                                                                                                                       |
| `device.geo.city`    | string  | No           | Stadt                                                                                                                                                                        |
| `device.geo.zip`     | string  | No           | Postleitzahl                                                                                                                                                                 |
| user                 |         |              |                                                                                                                                                                              |
| `user.sessionId`     | string  | No           | Sitzungs-ID des Händlers (keine PII)                                                                                                                                         |
| `user.customerId`    | string  | No           | Kunden-ID des Händlers (keine PII)                                                                                                                                           |
| `user.dtmId`         | string  | No           | Tracking-ID                                                                                                                                                                  |
| regs                 |         |              |                                                                                                                                                                              |
| `regs.gdpr`          | integer | No           | `0` = DSGVO gilt nicht, `1` = DSGVO gilt (gemäß Signalisierung im OpenRTB-Stil)                                                                                              |
| `regs.consent`       | string  | No           | IAB TCF **v2** Consent-Zeichenkette (`tcString` von der CMP). Verwenden Sie dies nur, wenn `gdpr` is `1` und Sie einen gültigen String haben; andernfalls weglassen oder`""` |

{% hint style="danger" %}
**Wichtig** Das folgende JSON ist ein repräsentatives und weitgehend vollständiges Beispiel. Live-Antworten sind oft spärlicher für `contentData` Module. Generieren Sie keine festen Strukturen, die davon ausgehen, dass jeder hier gezeigte Schlüssel immer für jedes `contentType` oder Markenseite.\
Die `theme` ist anders: Bei einer erfolgreichen Antwort ist es immer vorhanden und verwendet die im Abschnitt „Theme-Objekt“ beschriebene verschachtelte Struktur (`colors`und `buttons` vollständig ausgefüllt – erforderliche Hex6-Strings für jeden Pfad; kein `nulls` innerhalb von `theme`).
{% endhint %}

### Antwort-Payload

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

#### Antwortfeld-Definitionen

| Feld                                      | Typ               | Beschreibung                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ----------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | string            | Eindeutige Anzeigen-ID für diesen Aufruf der Markenseite. Wird in allen Tracking-Template-Pfaden verwendet.                                                                                                                                                                                                                                                                                                                                                                             |
| `brandPageTemplateId`                     | string            | Template-ID, die für diese Markenseite verwendet wird                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `catalogId`                               | string            | Händler-Katalog-ID (aus der Anfrage übernommen)                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `urlSlug`                                 | string            | URL-Slug der Markenseite (aus der Anfrage übernommen)                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `theme`                                   | Objekt            | <p>Bei Erfolg immer vorhanden. Styling der Markenseite auf Seitenebene: verschachteltes <code>colors</code> (Hintergrund + <code>text</code> Rollen) und <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, jeweils mit <code>background</code>und <code>text</code>). Siehe <a href="#theme-object">Theme-Objekt</a> Abschnitt.<br>Der Antwort-Body wird so zurückgegeben, wie er vom Adserver serialisiert wurde (keine Zwischenumformung des <code>theme</code>)</p> |
| `trackers`                                | Objekts           | Tracking-Container auf Seitenebene. `trackers.impression` enthält den Seitenimpressionen-Slot: `type: "impression"` und `params` einschließlich mindestens `ts: "`{TS}`"` und `iabConsentString`.                                                                                                                                                                                                                                                                                       |
| `trackingTypes`                           | Objekts           | Zuordnung von Tracking-Typ zu anwendbaren Template-Schlüsseln. Typen: `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. Jeder Wert ist ein Array von `client.*/` `server.*` Schlüsseln aus `trackingTemplates`. (siehe [So erstellen Sie eine Tracking-URL](/retail-media-interface/integration/de/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)).                                                    |
| `trackingTemplates.client`                | Objekts           | **Relative** URL-Pfade und Query-Strings für Browser-Tracking (C2S) – stellen Sie Ihre Reverse-Proxy-Basis-URL voran (`BASEURL`).                                                                                                                                                                                                                                                                                                                                                       |
| `trackingTemplates.server`                | Objekts           | Absolute\*\* URL-Templates auf dem Epsilon Tracking-Host für S2S.                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `contentData[]`                           | Array             | Geordnetes Array von zu rendernden Inhaltsmodulen                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `contentData[].id`                        | string            | Modul-Instanz-ID                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `contentData[].brandPageModuleTemplateId` | string            | Modul-Template-ID                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `contentData[].contentType`               | string            | Modultyp: HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                                                                                                                                                                 |
| `contentData[].order`                     | integer           | Rendering-Reihenfolge (aufsteigend)                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `contentData[].tags`                      | Array von Strings | Optional. Modul-Tags, die vom Händler im Template festgelegt wurden. Wird vollständig weggelassen, wenn keine Tags festgelegt sind – behandeln Sie das Fehlen als „keine Tags“. Auch in verschachtelten Modulen innerhalb von SPLIT\_LAYOUT vorhanden.                                                                                                                                                                                                                                  |
| `contentData[].trackers`                  | Objekts           | Wenn vorhanden, Tracking-Container pro Knoten. `trackers.click` für Link-/Interaktions-/Produkt-Klick-Ereignisse; `trackers.addToCart` für Produkt-Warenkorb-Hinzufügungen (enthält die Makros {QTY} und {CONVERSION\_VALUE}). Kann weggelassen werden, wenn es nichts zu tracken gibt.                                                                                                                                                                                                 |

### Theme-Objekt

Jede erfolgreiche Brand Page API-Antwort enthält ein `theme` Objekt: Farben und Button-Stile auf Seitenebene, die für die Marke konfiguriert sind. Wenden Sie diese Werte beim Rendering an (ordnen Sie sie beispielsweise CSS Custom Properties oder Ihren Design-Tokens zu). Das JSON wird vom Adserver erzeugt und wie zurückgegeben geliefert – es gibt keinen separaten Schritt, der das `theme`umschreibt.

**Farbformat:** Theme-Farbwerte folgen dem Plattformvertrag von Upstream (Kampagne/Konfiguration): Jeder Wert ist ein `#` gefolgt von sechs Hexadezimalziffern (hex6), zum Beispiel `#ff6600`. Erwarten Sie keine anderen Formate (kurzes hex3, achtstelliges Hex, `rgb()`, `hsl()`oder benannte Farben). Der Adserver revalidiert das Farbformat nicht zum Auslieferungszeitpunkt; Upstream liefert hex6 für jedes Theme-Feld.

#### Struktur und Semantik

* `theme` enthält `colors` und `buttons` – beide sind erforderlich, wann immer `theme` vorhanden ist.
* `colors.background` – Seiten- oder Canvas-Hintergrund (erforderliches hex6).
* `colors.text` – sieben erforderliche Rollen: `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (Linien/Trennlinien). Jeder Wert ist ein Hex6-String.
* `buttons.primary` und `buttons.secondary` – jedes erfordert `background` und `text` (Button-Füll- und Textfarben), jeweils ein Hex6-String.
* Jeder Pfad in der Feldreferenztabelle unten ist erforderlich. Es gibt keine optionalen Farb-Slots und kein `null` Werte darin `theme`. (Sparsamen oder weggelassenen Feldern gelten an anderer Stelle, zum Beispiel in `contentData` Modulen.)
* Die `theme` ist auf Seitenebene – alle Module auf der Brand Page teilen sich dasselbe Theme.

#### Feldreferenz

Alle Pfade in dieser Tabelle sind erforderlich (nicht-null Hex6-Strings).

| Pfad                                 | Beschreibung                               |
| ------------------------------------ | ------------------------------------------ |
| `theme.colors.background`            | Seiten-/Canvas-Hintergrund                 |
| `theme.colors.text.heading`          | Überschriftentext                          |
| `theme.colors.text.subheading`       | Unterüberschriftentext                     |
| `theme.colors.text.body`             | Fließtext/Absatztext                       |
| `theme.colors.text.caption`          | Bildunterschrift/sekundärer Text           |
| `theme.colors.text.link`             | Link-Text                                  |
| `theme.colors.text.tagline`          | Slogan-Text                                |
| `theme.colors.text.lines`            | Linien und Trennlinien                     |
| `theme.buttons.primary.background`   | Füllung der primären CTA-Schaltfläche      |
| `theme.buttons.primary.text`         | Beschriftung der primären CTA-Schaltfläche |
| `theme.buttons.secondary.background` | Füllung der sekundären Schaltfläche        |
| `theme.buttons.secondary.text`       | Beschriftung der sekundären Schaltfläche   |

Beispiel – (`theme`nur Objekt):

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

#### Pro Knoten `params`(typische Schlüssel)

| Param              | Bei Verwendung                                                  | Beschreibung                                                                                                                                                   |
| ------------------ | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `modId`            | Die meisten interaktiven Knoten                                 | Inhaltsmodul- oder Zeilenbezeichner.                                                                                                                           |
| `rurl`             | `link` / `productClick`wenn eine Weiterleitung erforderlich ist | URL-kodiertes Ziel                                                                                                                                             |
| `ts`               | Die meisten Ereignisse                                          | Timestamp zum Verhindern von Caching; ersetzen Sie `"{TS}"`zum Zeitpunkt des Auslösens.                                                                        |
| `iabConsentString` | Alle Tracker-Slots                                              | Literaler TC-String oder {TCF}-Makro, das zum Zeitpunkt des Auslösens ersetzt werden muss                                                                      |
| `productCode`      | `productClick` / `productAddToCart`                             | Produktbezeichner.                                                                                                                                             |
| `sellerId`         | `productClick` / `productAddToCart` (Marktplatz)                | Verkäuferbezeichner.                                                                                                                                           |
| `qty`              | `productAddToCart`                                              | Absolute Menge dieser SKU im Warenkorb zum Zeitpunkt des Auslösens des Ereignisses (keine Differenz). Ersetzen Sie das {QTY}-Makro zum Zeitpunkt des Auslösens |
| `conVal`           | `productAddToCart`                                              | Absoluter Geldwert dieser Artikel: Menge × Einzelpreis abzüglich angewendeter Rabatte. Ersetzen Sie `{CONVERSION_VALUE}` Makro zum Zeitpunkt des Auslösens     |

#### Vorlagenabhängige Felder in `contentData`

Abgesehen von zentralen Diskriminatoren für jedes Modul (`id`, `brandPageModuleTemplateId`, `contentType`, `order`) ist das Vorhandensein von Eigenschaften auf Brand Pages nicht einheitlich. Bevorzugen Sie eine Merkmalserkennung (Feature Detection) – prüfen Sie jede Eigenschaft vor der Verwendung –, anstatt jedes Feld in Beispielen als obligatorisch zu behandeln.

Die API kann „kein Wert“ auf verschiedene Weise darstellen:

| Muster                | Bedeutung                                  | Empfohlene Handhabung                                                                       |
| --------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------- |
| Schlüssel weggelassen | Eigenschaft im JSON-Objekt nicht vorhanden | Als nicht vorhanden behandeln; Optional Chaining/Standardwerte verwenden                    |
| Explizit `null`       | Eigenschaft vorhanden mit `null` Wert      | Gleich wie weggelassen, es sei denn, Ihr Serialisierer unterscheidet dazwischen             |
| Leerer String         | `""` für Text- oder URL-ähnliche Felder    | Diesen Teil der Benutzeroberfläche normalerweise ausblenden oder das Rendering überspringen |

#### Beispiele für gängige Modultypen

**Produktraster:**

Jede Produktzeile enthält ein `product` Objekt (`catalogId`, `productCode`, `sellerId`), an `order` Wert, und `trackers` wenn die Zeile nachverfolgbar ist. Produktzeilen bieten sowohl einen `click` Slot (`type: "productClick"`) und ein `addToCart`Slot (`type: "productAddToCart"`) wenn die SKU zuordenbar ist.

```

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

Überschrift, Unterüberschrift, CTA-Text und -Link, Bild, Overlay und `trackers.click` für den CTA, sofern vorhanden.

```

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

```

**Bildergalerie:**

Ein Array von Bildern, jedes mit einer URL, einem Alt-Text und einer Bildunterschrift. `trackers.click` für ein Bild nur dann, wenn dieses Bild eine Verlinkung enthält.

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

**Text:**

Überschrift und Fließtext, ohne `trackers`es sei denn, in einer Zeile ist ein Link vorhanden.

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

**Bild:**

Enthält eine Bild-URL, eine Bildunterschrift, einen Alt-Text, einen optionalen Link und `trackers.click` Details, wenn das Bild anklickbar ist

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