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

# 브랜드 페이지 API

## URL 라우팅

사용자가 브랜드 페이지 URL로 이동하면 애플리케이션이 경로에서 `urlSlug` 을(를) 추출하여 광고 서빙 API로 전송합니다.

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

| 세그먼트          | 소스                     | 예시                 |
| ------------- | ---------------------- | ------------------ |
| `your-domain` | 귀하의 사이트                | `www.retailer.com` |
| `prefix`      | 온보딩 시 설정됨(예: 브랜드, 페이지) | `brands`           |
| `urlSlug`     | 런타임 시 URL 경로에서 추출됨     | `adidas`           |

**예시**

사용자가 다음을 방문할 때: `<https://www.retailer.com/brands/adidas:>`

1. 애플리케이션이 다음 라우트와 일치합니다: `/brands/*` 라우트.
2. 추출 항목 `adidas`을(를) urlSlug로 사용합니다.
3. 호출 항목 `POST /ads/v3/brand-pages` 할당된 광고 호스트에서 다음 항목 사용 `"urlSlug": "adidas"` 및 귀하의 `catalogId`.
4. 반환된 콘텐츠 모듈을 페이지에 렌더링합니다.

### 슬러그 유효성 검사 규칙

브랜드는 다음 제약 조건을 따라 슬러그를 생성합니다.

* **문자:** 소문자(a–z), 숫자(0–9), 하이픈(-) 및 언더스코어(\_).
* **길이:** 최소 3자, 최대 100자.
* **유일성:** 리테일러 카탈로그 내에서 유일해야 함 (`catalogId`).

{% hint style="info" %}
현재 슬러그 유일성은 캠페인 날짜 범위를 고려하지 않습니다.
{% endhint %}

* **불변성:** 브랜드 페이지 캠페인이 라이브된 후에는 변경할 수 없습니다.
* **형식:** 시작이나 끝에 하이픈을 사용할 수 없음 (예: `-adidas`or `adidas-` 은(는) 허용되지 않음).

## 캐싱

* 광고 서빙 API의 응답을 캐시하지 마세요. 다음 사항을 보장하기 위해 항상 요청을 Epsilon API로 직접 전송하세요.
  * 올바른 브랜드 페이지 캠페인이 서빙됩니다(캠페인이 일시 중지, 업데이트 또는 교체될 수 있음).
  * 정확한 기여를 위해 추적 URL에 요청별 최신 식별자가 포함됩니다.
  * 노출 수가 오래된 캐시 응답의 영향을 받지 않고 정확하게 유지됩니다.

**SEO 고려 사항**: 리테일러는 브랜드 페이지가 검색 엔진에 의해 인덱싱되도록 허용할 수 있습니다. 페이지의 모든 텍스트를 검색 엔진이 검색할 수 있으므로 브랜드 페이지 콘텐츠를 인덱싱하면 오가닉 검색 노출도를 개선할 수 있습니다.

## 리버스 프록시 설정

### 리버스 프록시가 필요한 이유

**문제점**: 광고 차단기 및 개인정보 보호 도구는 광고 도메인으로 직접 전송되는 추적 요청을 차단하는 경우가 많습니다.

**해결책**: 모든 추적 요청을 자체 도메인을 통해 라우팅하여 자사 트래픽으로 표시되도록 합니다.

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

* 대체 대상 `[third-party-tracking-domain]` 온보딩 중 제공된 실제 Epsilon 추적 엔드포인트 포함.
* 대체 대상 `[custom-path]` 중립적이고 고유한 경로 사용 (예: `/media-proxy`, `/assets-endpoint`또는 비광고 용어).

C2S(브라우저) 추적에는 리버스 프록시가 필요합니다. S2S 호출에는 적용되지 않으며, S2S 호출은 다음으로 직접 전송되어야 합니다. Epsilon 추적 호스트 [(추적 – 서버 간(S2S) 참조](/retail-media-interface/integration/ko/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#tracking--servertoserver-s2s))).

### 구성

사이트는 다음과 같은 경로에서 리버스 프록시를 호스팅해야 합니다. `https://www.retailer.com/{proxyPath}/`. 해당 경로의 도메인에 대한 브라우저(C2S) 추적 요청은 지역 추적 호스트로 전달됩니다 ([광고 서빙 API 참조](#ad-serving-api)). 서버 간 추적은 이 프록시를 사용해서는 안 됩니다.

**동작:**

* 다음 하위의 요청 수락 `/epsilon/`
* 다음으로 전달 `https://[region]-tracking.rmn.dotomi.com/` (참조 [광고 서빙 API](#ad-serving-api) 대상 `[region]`)
* 파일 경로 접미사 유지
* 필수 HTTP 헤더 전달
* HTTPS 적용 (TLS 1.2+)

### 필수 헤더

| 헤더                         | 설명                        |
| -------------------------- | ------------------------- |
| `RP-Host`                  | 추적 요청을 수신하는 호스트 이름입니다.    |
| `X-Forwarded-For`          | 실제 클라이언트 IP 주소입니다.        |
| `X-Forwarded-Request-Path` | 프록시 접두사 경로 (예: /epsilon). |
| `Referer`                  | 픽셀이 실행된 페이지입니다.           |

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

### 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

Epsilon 다음에서 RMN 호스트의 브랜드 페이지를 제공합니다: `*.rmn.dotomi.com`. 다음을 대체하십시오: `[region]` 세그먼트 사용 Epsilon 배포에 대해 할당합니다.

광고 API는 다음을 사용합니다: `https://[region]-ads.rmn.dotomi.com`; 트래킹 엔드포인트(임프레션 픽셀, 클릭 리디렉션 및 S2S 알림 URL)는 다음을 사용합니다: `https://[region]-tracking.rmn.dotomi.com` 동일한 사용 `[region]` 값.

일부 설정에서는 기본 호스트 이름 `ads.rmn.dotomi.com` 및 `tracking.rmn.dotomi.com` 이 사용될 수 있습니다. Epsilon 이 귀하의 환경에 적합한 호스트 이름을 확인해 드립니다.

### 엔드포인트

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

### 요청 페이로드

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

위의 `regs` 값은 GDPR이 적용되는 트래픽을 설명합니다.\
`gdpr` is `1`, 및 `consent`는 **합성 IAB TCF v2 동의 문자열**입니다(올바른 형식 및 문자 집합만 해당).

운영 환경에서:

* 설정 `gdpr`지오 및 법적 규칙에서.
* CMP에서 **라이브 TC 문자열**을 전달합니다(예: 다음을 통해 `_ _tcfapi` `getTCData`→ `tcString`).

비 GDPR 요청의 경우 다음을 사용합니다: `"gdpr": 0` 및 생략 `consent`또는 사용 `""`

`iabConsentString` 트래킹 이벤트에서: 채워진 모든 트래커 슬롯(`trackers.impression`, `trackers.click`, `trackers.addToCart`)에 포함됩니다 `params.iabConsentString`. 제공하는 경우 `regs.consent` 요청 시 이 값은 리터럴 TC 문자열입니다.

생략한 경우 `regs.consent`, 이 값은 {TCF} 매크로 자리 표시자입니다. 트래킹 요청을 보내기 전 실행 시점에 CMP의 현재 TCF v2 문자열을 대체하십시오(예: 다음을 통해 `__tcfapi getTCData` → `tcString`).

### 요청 필드 정의

| 필드                   | 유형  | 필수 여부 | 설명                                                                                                                |
| -------------------- | --- | ----- | ----------------------------------------------------------------------------------------------------------------- |
| `id`                 | 문자열 | 예     | 고유 요청 식별자 (리테일러가 생성함)                                                                                             |
| `catalogId`          | 문자열 | 예     | 리테일러의 상품 카탈로그 ID (다음에서 제공: Epsilon)                                                                               |
| `urlSlug`            | 문자열 | 예     | 브랜드 페이지 URL 슬러그 (예: adidas)                                                                                       |
| site                 |     |       |                                                                                                                   |
| `site.domain`        | 문자열 | 예     | 리테일러 웹사이트 도메인                                                                                                     |
| `site.page`          | 문자열 | No    | 브랜드 페이지가 렌더링되는 전체 URL                                                                                             |
| `site.ref`           | 문자열 | No    | 리퍼러 URL (사용자가 이동해 온 이전 페이지)                                                                                       |
| device               |     |       |                                                                                                                   |
| `device.ua`          | 문자열 | 예     | 사용자 에이전트 문자열                                                                                                      |
| `device.ip`          | 문자열 | No    | 클라이언트 IP 주소                                                                                                       |
| `device.language`    | 문자열 | No    | 브라우저 언어 (예: en-US)                                                                                                |
| `device.devicetype`  | 정수  | No    | 1=모바일, 2=PC, 4=폰, 5=태블릿                                                                                           |
| `device.os`          | 문자열 | No    | 운영 체제                                                                                                             |
| `device.geo.country` | 문자열 | No    | ISO 3166-1 alpha-3 국가 코드 (예: USA, GBR)                                                                            |
| `device.geo.region`  | 문자열 | No    | 주 또는 지역                                                                                                           |
| `device.geo.city`    | 문자열 | No    | 도시                                                                                                                |
| `device.geo.zip`     | 문자열 | No    | 우편 번호                                                                                                             |
| user                 |     |       |                                                                                                                   |
| `user.sessionId`     | 문자열 | No    | 리테일러 세션 식별자 (개인식별정보 아님)                                                                                           |
| `user.customerId`    | 문자열 | No    | 리테일러 고객 식별자 (개인식별정보 아님)                                                                                           |
| `user.dtmId`         | 문자열 | No    | 트래킹 식별자                                                                                                           |
| regs                 |     |       |                                                                                                                   |
| `regs.gdpr`          | 정수  | No    | `0` = GDPR이 적용되지 않음, `1` = GDPR 적용(OpenRTB 스타일 신호 산출 방식 기준)                                                       |
| `regs.consent`       | 문자열 | No    | IAB TCF **v2** 동의 문자열(`tcString` CMP 제공). 다음과 같은 경우에만 사용하십시오: `gdpr` is `1` 그리고 유효한 문자열이 있는 경우. 그렇지 않으면 생략하거나`""` |

{% hint style="danger" %}
**중요** 아래 JSON은 대표적이며 비교적 완전한 예시입니다. 실제 응답은 다음 항목에 대해 더 간소한 경우가 많습니다: `contentData` 모듈. 여기에 표시된 모든 키가 항상 모든 항목에 존재한다고 가정하는 고정 구조를 생성하지 마십시오. `contentType` 또는 브랜드 페이지.\
위의 `theme` 은(는) 다릅니다. 성공적인 응답 시 항상 존재하며 테마 개체 섹션에 설명된 중첩 구조를 사용합니다(`colors`및 `buttons` 완전히 채워짐 - 모든 경로에 필수 hex6 문자열 필요, 없음 `nulls` 내부 `theme`).
{% endhint %}

### 응답 페이로드

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

#### 응답 필드 정의

| 필드                                        | 유형     | 설명                                                                                                                                                                                                                                                                                                                                           |
| ----------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `realizedAdId`                            | 문자열    | 이 브랜드 페이지 서빙에 대한 고유 광고 식별자입니다. 모든 추적 템플릿 경로에 사용됩니다.                                                                                                                                                                                                                                                                                          |
| `brandPageTemplateId`                     | 문자열    | 이 브랜드 페이지에 사용된 템플릿 ID                                                                                                                                                                                                                                                                                                                        |
| `catalogId`                               | 문자열    | 리테일러 카탈로그 ID(요청에서 에코됨)                                                                                                                                                                                                                                                                                                                       |
| `urlSlug`                                 | 문자열    | 브랜드 페이지 URL 슬러그(요청에서 에코됨)                                                                                                                                                                                                                                                                                                                    |
| `theme`                                   | 개체     | <p>성공 시 항상 존재합니다. 브랜드의 페이지 수준 스타일링: 중첩됨 <code>colors</code> (배경 + <code>text</code> 역할) 및 <code>buttons</code>(<code>primary</code>/ <code>secondary</code>, 각각 포함 <code>background</code>및 <code>text</code>). 참조: <a href="#theme-object">테마 개체</a> 섹션.<br>응답 본문은 광고 서버에서 직렬화된 상태로 반환됩니다(다음 항목의 중간 재형성 없음: <code>theme</code>)</p>         |
| `trackers`                                | 개체     | 페이지 수준 추적 컨테이너입니다. `trackers.impression` 페이지 노출 슬롯 보유: `type: "impression"` 및 `params` 최소 다음을 포함: `ts: "`{TS}`"` 및 `iabConsentString`.                                                                                                                                                                                                       |
| `trackingTypes`                           | 개체     | 적용 가능한 템플릿 키에 대한 추적 유형 맵. 유형: `impression`, `productClick`, `productAddToCart`, `link`, `interaction`. 각 값은 다음의 `client.*/` `server.*` 키 배열입니다: `trackingTemplates`. (참조 [추적 URL을 구성하는 방법](/retail-media-interface/integration/ko/brand-pages/brand-page-retailer-integration-guide/tracking-attribution.md#how-to-compose-a-tracking-url)). |
| `trackingTemplates.client`                | 개체     | 브라우저(C2S) 추적을 위한 **상대** URL 경로 및 쿼리 문자열 - 리버스 프록시 기본 URL을 앞에 추가하십시오(`BASEURL`).                                                                                                                                                                                                                                                              |
| `trackingTemplates.server`                | 개체     | 절대\*\* URL 템플릿( Epsilon S2S용 추적 호스트입니다.                                                                                                                                                                                                                                                                                                      |
| `contentData[]`                           | array  | 렌더링할 콘텐츠 모듈의 정렬된 배열                                                                                                                                                                                                                                                                                                                          |
| `contentData[].id`                        | 문자열    | 모듈 인스턴스 ID                                                                                                                                                                                                                                                                                                                                   |
| `contentData[].brandPageModuleTemplateId` | 문자열    | 모듈 템플릿 ID                                                                                                                                                                                                                                                                                                                                    |
| `contentData[].contentType`               | 문자열    | 모듈 유형: HERO, TEXT, FILTER\_MENU, PRODUCT\_GRID, IMAGE, IMAGE\_GALLERY, SPLIT\_LAYOUT                                                                                                                                                                                                                                                         |
| `contentData[].order`                     | 정수     | 렌더링 순서 (오름차순)                                                                                                                                                                                                                                                                                                                                |
| `contentData[].tags`                      | 문자열 배열 | 선택 사항. 템플릿에서 리테일러가 설정한 모듈 태그입니다. 태그가 설정되지 않은 경우 completamente 생략되며, 누락된 경우 "태그 없음"으로 처리됩니다. SPLIT\_LAYOUT 내의 중첩된 모듈에도 존재합니다.                                                                                                                                                                                                                 |
| `contentData[].trackers`                  | 개체     | 있는 경우, 노드별 추적 컨테이너입니다. `trackers.click` 링크/상호작용/상품 클릭 이벤트용; `trackers.addToCart` 상품 장바구니 담기용({QTY} 및 {CONVERSION\_VALUE} 매크로 포함). 추적할 항목이 없는 경우 생략할 수 있습니다.                                                                                                                                                                                  |

### 테마 개체

모든 성공적인 브랜드 페이지 API 응답에는 다음이 포함됩니다. `theme` 개체: 브랜드를 위해 구성된 페이지 수준 색상 및 버튼 스타일입니다. 렌더링할 때 이 값을 적용하세요(예: CSS 사용자 지정 속성 또는 디자인 토큰에 매핑). JSON은 광고 서버에서 생성되어 반환된 대로 전달됩니다. 다음을 재작성하는 별도의 단계는 없습니다. `theme`.

**색상 형식:** 테마 색상 값은 업스트림(캠페인/구성)의 플랫폼 계약을 따릅니다. 각 값은 `#` 뒤에 6개의 16진수 숫자(hex6)가 붙습니다(예: `#ff6600`). 다른 형식(짧은 hex3, 8자리 hex, `rgb()`, `hsl()`또는 이름이 지정된 색상)을 예상하지 마세요. 광고 서버는 게재 시점에 색상 형식을 다시 검증하지 않습니다. 업스트림은 모든 테마 필드에 hex6을 제공합니다.

#### 구조 및 의미론

* `theme` 포함 `colors` 및 `buttons` - 둘 다 다음이 있을 때마다 필수입니다. `theme` 이 존재하는 경우.
* `colors.background` - 페이지 또는 캔버스 배경(필수 hex6).
* `colors.text` - 7개의 필수 역할: `heading`, `subheading`, `body`, `caption`, `link`, `tagline`, `lines` (선/구분선). 각 값은 hex6 문자열입니다.
* `buttons.primary` 및 `buttons.secondary` - 각각에 필요: `background` 및 `text` (버튼 채우기 및 레이블 색상), 각각 hex6 문자열입니다.
* 아래 필드 참조 테이블의 모든 경로는 필수입니다. 선택적 색상 슬롯이 없으며 `null` 내부의 값도 없습니다 `theme`. (희소하거나 생략된 필드는 다른 곳에 적용됩니다. 예: `contentData` 모듈.)
* 위의 `theme` 은 페이지 수준입니다. 브랜드 페이지의 모든 모듈은 동일한 테마를 공유합니다.

#### 필드 참조

이 테이블의 모든 경로는 필수입니다 (null이 아닌 hex6 문자열).

| 경로                                   | 설명            |
| ------------------------------------ | ------------- |
| `theme.colors.background`            | 페이지/캔버스 배경    |
| `theme.colors.text.heading`          | 제목 텍스트        |
| `theme.colors.text.subheading`       | 부제목 텍스트       |
| `theme.colors.text.body`             | 본문/단락 텍스트     |
| `theme.colors.text.caption`          | 캡션/보조 텍스트     |
| `theme.colors.text.link`             | 링크 텍스트        |
| `theme.colors.text.tagline`          | 태그라인 텍스트      |
| `theme.colors.text.lines`            | 선 및 구분선       |
| `theme.buttons.primary.background`   | 기본 CTA 버튼 채우기 |
| `theme.buttons.primary.text`         | 기본 CTA 버튼 레이블 |
| `theme.buttons.secondary.background` | 보조 버튼 채우기     |
| `theme.buttons.secondary.text`       | 보조 버튼 레이블     |

예시 - (`theme`객체 전용):

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

#### 노드별 `params`(일반적인 키)

| 매개변수               | 사용되는 경우                                      | 설명                                                                              |
| ------------------ | -------------------------------------------- | ------------------------------------------------------------------------------- |
| `modId`            | 대부분의 대화형 노드                                  | 콘텐츠 모듈 또는 행 식별자.                                                                |
| `rurl`             | `link` / `productClick`리다이렉트가 필요한 경우         | URL 인코딩된 대상                                                                     |
| `ts`               | 대부분의 이벤트                                     | 캐시 무효화 타임스탬프; 실행 시점에 `"{TS}"`로 대체합니다.                                           |
| `iabConsentString` | 모든 트래커 슬롯                                    | 리터럴 TC 문자열 또는 실행 시점에 대체할 {TCF} 매크로                                              |
| `productCode`      | `productClick` / `productAddToCart`          | 상품 식별자.                                                                         |
| `sellerId`         | `productClick` / `productAddToCart` (마켓플레이스) | 판매자 식별자.                                                                        |
| `qty`              | `productAddToCart`                           | 이벤트가 발생한 시점에 장바구니에 있는 이 SKU의 절대 수량(증감분 아님). 실행 시점에 {QTY} 매크로로 대체                |
| `conVal`           | `productAddToCart`                           | 해당 품목의 절대 통화 가치: 수량 × 단가에서 적용된 할인 금액을 뺀 금액. 실행 시점에 `{CONVERSION_VALUE}` 매크로로 대체 |

#### 내의 템플릿 종속 필드 `contentData`

각 모듈의 핵심 식별자(`id`, `brandPageModuleTemplateId`, `contentType`, `order`) 외에도, 속성의 존재 여부는 브랜드 페이지 전체에서 일정하지 않습니다. 예시의 모든 필드를 필수 항목으로 취급하기보다는 기능 감지를 선호하여 사용 전에 각 속성을 확인하세요.

API는 다음과 같은 여러 방식으로 "값 없음"을 나타낼 수 있습니다.

| 패턴         | 의미                     | 권장 처리 방식                           |
| ---------- | ---------------------- | ---------------------------------- |
| 키 생략됨      | JSON 객체에 속성이 없음        | 없음으로 취급; 옵셔널 체이닝/기본값 사용            |
| 명시적 `null` | 속성이 존재하며 값은 `null` 입니다 | 직렬화 프로그램이 이들을 구분하지 않는 한 생략된 것과 동일함 |
| 빈 문자열      | `""` 텍스트 또는 URL 유사 필드용 | 일반적으로 UI의 해당 부분을 숨기거나 렌더링을 건너뜀     |

#### 공통 모듈 유형에 대한 예시

**Product Grid:**

각 상품 행에는 다음이 포함됩니다. `product` 객체 (`catalogId`, `productCode`, `sellerId`), an `order` 값, 그리고 `trackers` 행을 추적할 수 있는 경우입니다. 상품 행은 다음 두 가지를 모두 제공합니다: `click` 슬롯 (`type: "productClick"`) 및 `addToCart`슬롯 (`type: "productAddToCart"`) SKU를 귀속시킬 수 있는 경우입니다.

```

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

```

**히어로:**

헤드라인, 서브헤드라인, CTA 텍스트 및 링크, 이미지, 오버레이, 그리고 `trackers.click` CTA가 존재하는 경우 해당 CTA용.

```

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

```

**이미지 갤러리:**

각각 URL, 대체 텍스트, 캡션이 포함된 이미지 배열입니다. `trackers.click` 해당 이미지가 외부로 링크되는 경우에만 이미지용.

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

**텍스트:**

다음이 없는 헤드라인 및 본문 텍스트 `trackers`줄에 링크가 존재하는 경우가 아니라면.

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

**이미지:**

이미지 URL, 캡션, 대체 텍스트, 선택적 링크 및 다음을 포함합니다. `trackers.click` 이미지를 클릭할 수 있는 경우 세부 정보

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