# Publish the consent banner

URL: /docs/api/merchant/consent/publish-the-consent-banner

Sends the whole banner. Any change to the wording, categories, links or privacy notice version
publishes a new, immutable version (`201`); an identical banner publishes nothing (`200`, the
current version). Shoppers are asked again only when the banner offers a new category or the
new privacy notice version is marked `notice_purpose_change`.

## PUT /v1/merchant/consent/banner

```http
PUT https://api.elaraone.app/api/v1/merchant/consent/banner
```

Sends the whole banner. Any change to the wording, categories, links or privacy notice version
publishes a new, immutable version (`201`); an identical banner publishes nothing (`200`, the
current version). Shoppers are asked again only when the banner offers a new category or the
new privacy notice version is marked `notice_purpose_change`.

### Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `X-Client-IP` | header | string |  | Optional. IP address of the shopper (one IPv4/IPv6, no port, no list). Honoured only together with a valid X-Tenant-Secret; ignored otherwise. Used for rate limits and recorded with form submissions. |
| `X-Tenant-Secret` | header | string |  | Optional here. Server secret of the store: server-to-server only, never from a browser. Enables X-Client-IP. |

### Request body (`application/json`)

| Field | Type | Required | Description |
|---|---|---|---|
| `privacy_notice_version` | string | yes |  |
| `notice_purpose_change` | boolean |  |  |
| `title` | string | yes |  |
| `body` | string | yes |  |
| `labels` | object | yes |  |
| `links` | object | yes |  |
| `strictly_necessary` | object | yes |  |
| `categories` | object[] | yes |  |
| `reject_all` | any |  |  |
| `show_reject_all` | any |  |  |
| `reject_all_enabled` | any |  |  |

### Responses

- **200**: See the schema.
- **401**: Unauthenticated
- **402**: Payment required. Branch on `error.code`: - `TENANT_PAYMENT_REQUIRED`: this store is on payment hold. Show a "store temporarily unavailable" page; do not retry the request.
- **403**: Authorization error
- **422**: Validation error