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

# SDK updates: Node.js v5.0.3, PHP v4.0.11, Python v4.0.9

New endpoints, new fields, and API improvements across all three SDKs.

## Node.js — [`@getbrevo/brevo` v5.0.3](https://github.com/getbrevo/brevo-node/releases/tag/v5.0.3)

**Added**

* `client.event.getEvents()` — retrieve a paginated list of custom events, filterable by `contact_id`, `event_name`, `object_type`, `startDate`, and `endDate`. Currently only supports custom events.
* `client.event.createBatchEvents()` — send multiple events in a single request. Returns a `BatchAcceptedResponse` with a confirmation message and queued event count.
* `client.companies.deleteAnAttribute()` — delete a CRM attribute by ID.
* `PatchCrmAttributesIdRequest` — update a CRM attribute's display label and selectable option labels, scoped to `companies` or `deals`.
* `GetProductDetails` response now includes `brand` and `description`.
* `CreateUpdateProductRequest` and batch product upsert now accept optional `brand` and `description` fields.
* Balance: `getActiveBalancesApi()`, `getContactBalances()`, and `getSubscriptionBalances()` now accept an optional `includeInternal` parameter.
* Balance: `getTransactionHistory()` now supports filtering by `status` and `transactionType`.

**Improved**

* `meta` field on balance definition requests is now a typed object (`{ isInternal?: boolean }`) instead of a generic `Record<string, unknown>`.
* `metaInfo` size limit for products clarified: maximum **20,000 characters** total.
* `users` field on plan verticals is now nullable (`Item.Users | null`).

## PHP — [`getbrevo/brevo-php` v4.0.11](https://github.com/getbrevo/brevo-php/releases/tag/v4.0.11)

**Added**

* `$client->event->getEvents()` — retrieve a paginated list of custom events with filters for contact, event name, object type, and date range. Currently only supports custom events.
* `$client->event->createBatchEvents()` — track multiple contact interactions in a single request.
* `PatchCrmAttributesIdRequest` — update a CRM attribute's display label and option labels.
* `CreateUpdateProductRequest` and batch product upsert now accept optional `brand` and `description` fields.
* Balance: `getActiveBalancesApi()`, `getContactBalances()`, and `getSubscriptionBalances()` now accept `includeInternal`.
* Balance: `getTransactionHistory()` now supports filtering by `status` and `transactionType`.

**Improved**

* `meta` field on balance definition requests is now a typed class instead of a generic array.
* `metaInfo` size limit for products clarified: maximum **20,000 characters** total.
* `users` field on `GetAccountResponsePlanVerticalsItem` is now nullable.

**Fixed**

* `createContact()` no longer throws `BrevoException: Failed to deserialize response: Syntax error` on empty success responses.

## Python — [`brevo-python` v4.0.9](https://github.com/getbrevo/brevo-python/releases/tag/v4.0.9)

**Added**

* `client.event.get_events()` — retrieve a paginated list of custom events with filters for contact, event name, object type, and date range. Currently only supports custom events.
* `client.event.create_batch_events()` — track multiple contact interactions in a single request.
* `CreateUpdateProductRequest` and batch product upsert now accept optional `brand` and `description` fields.
* `GetProductDetails` response now includes `brand` and `description`.
* Balance: `get_active_balances_api()`, `get_contact_balances()`, and `get_subscription_balances()` now accept `include_internal`.
* Balance: `get_transaction_history()` now supports filtering by `status` and `transaction_type`.

**Improved**

* `meta` field on balance definition requests is now a typed model with an `is_internal` flag.
* `metaInfo` size limit for products clarified: maximum **20,000 characters** total.
* `users` field on plan verticals is now nullable.