> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.brevo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server.

# Ecommerce, Events, and Loyalty API updates

## Ecommerce — New product fields

Two new fields are now supported on the `POST /products` and `POST /products/batch` endpoints, as well as the `GET /products/{id}` response:

* **`brand`** — Brand name of the product. String, max 128 characters. Example: `"Adidas"`.
* **`description`** — Description of the product. String, max 3000 characters. Example: `"Shoes for sports"`.

**`metaInfo` limit updated:** The size limit for the `metaInfo` field has changed from 1000 KB to **20,000 characters** (total across all keys and values). The maximum number of keys remains 20.

## Events API — New GET endpoint

A new `GET /events` endpoint is available to retrieve events filtered by contact, name, object type, or date range.

**Query parameters:**

| Parameter               | Description                                                               |
| ----------------------- | ------------------------------------------------------------------------- |
| `contact_id`            | Filter by contact ID (repeatable)                                         |
| `event_name`            | Filter by event name (repeatable)                                         |
| `object_type`           | Filter by object type (repeatable)                                        |
| `startDate` / `endDate` | Date range filter (YYYY-MM-DD or RFC3339). Defaults to the past 6 months. |
| `limit`                 | Max events to return. Default `100`, max `10000`.                         |
| `offset`                | Events to skip for pagination. Default `0`.                               |

The response includes a `count` field for pagination and an `events` array sorted by `event_date` descending.

See [Event endpoints](/docs/event-endpoints) for the full reference.

## Events API — Batch events breaking changes

> **Warning**
>
> These are breaking changes to the `POST /events/batch` endpoint.

**Response code changed: `204` → `202`**

Successful batch requests now return `202 Accepted` instead of `204 No Content`. The response body is no longer empty — it returns a JSON object:

```json
{
  "message": "Batch accepted. Valid events have been added to the processing queue.",
  "count": 7
}
```

Update any client code that checks for `204` on batch event responses.

**Partial success status renamed: `partialSuccess` → `partiallyQueued`**

The `status` field in the `207` partial success response body has been renamed from `partialSuccess` to `partiallyQueued`. Update any client code parsing this field.

## Loyalty — Internal balance definitions and tier groups

Balance definitions and tier groups now support a `meta` object with an `isInternal` flag:

```json
"meta": {
  "isInternal": true
}
```

Internal balance definitions are excluded from member-facing balance reads by default. Pass `includeInternal=true` as a query parameter to include them.

The `includeInternal` query parameter is available on the following endpoints:

* `GET /loyalty/config/programs/{pid}/balance-definitions`
* `GET /loyalty/balance/programs/{pid}/subscriptions/{cid}/balances`
* `GET /loyalty/balance/programs/{pid}/balances`
* `GET /loyalty/config/programs/{pid}/members`

## Loyalty — Transaction list filters

The transaction history endpoint (`GET /loyalty/balance/programs/{pid}/subscriptions/{cid}/transactions`) now supports additional query parameters:

| Parameter         | Description                                                                |
| ----------------- | -------------------------------------------------------------------------- |
| `status`          | Filter by status: `draft`, `completed`, `rejected`, `cancelled`, `expired` |
| `transactionType` | Filter by type: `credit` or `debit`                                        |

The `offset` parameter now represents a **page number** (not a record skip count).