SDK updates: Node.js v5.0.1, PHP v4.0.10, Python v4.0.7
Bug fixes, type corrections, and a deprecation across all three SDKs.
Node.js — @getbrevo/brevo v5.0.1
Fixed
GetCampaignStats:appleMppOpensandopensRateare now typed asnumber | null. The API returnsnullwhen no data is available for the campaign period.Order.products: the full set of product fields is now exposed —price,productId,variantId,quantity, andquantityFloat. Previously onlyquantitywas available.GetAccountResponsePlanVerticalsItem.users: now typed as optional/nullable, matching API behavior on certain plan types.createContact(): no longer throws a JSON parse error on204 No Contentresponses (returned when a contact already exists).
Deprecated
transactionalSms.sendTransacSms()— usetransactionalSms.sendTransacSmsAsync()instead. The synchronous variant adds latency by waiting for carrier acknowledgment.
PHP — getbrevo/brevo-php v4.0.10
Added
- Batch events endpoint:
$client->event->createBatchEvents()to track multiple contact interactions in a single request. getEmailCampaign()accepts a new optionalexcludeHtmlContentflag to omit the HTML body from the response.
Fixed
UpdateContactRequestandCreateContactRequest: boolean values in union-typed attribute maps now serialize correctly. Previously threwJsonException: Cannot serialize value of type boolean.Order::products:OrderProductsItemnow exposes all product fields —price,productId,variantId,quantity,quantityFloat.GetCampaignStats:appleMppOpensandopensRateare now correctly typed as nullable (?int,?float).
Deprecated
sendTransacSms()— usesendAsyncTransactionalSms()instead.
Python — brevo-python v4.0.7
Fixed
GetCampaignStats:apple_mpp_opensandopens_rateare now correctly typed as nullable.Order.products: all product fields are now accessible —price,product_id,variant_id,quantity,quantity_float.create_contact(): correctly handles204 No Contentresponses without raising a deserialization error.
Deprecated
transactional_sms.send_transac_sms()— usetransactional_sms.send_transac_sms_async()instead.
Loyalty API guides
Added a new Loyalty section to the Guides tab with six pages covering the full Loyalty API integration workflow.
- Overview — key concepts, data model, and transaction lifecycle
- Set up a program — create balance definitions, configure tiers, and publish
- Enroll members — subscribe contacts and link to eCommerce orders
- Credit & debit points — full transaction lifecycle including balance orders
- Read member data — fetch balances, tier status, and vouchers
- Best practices — integration patterns, performance tips, and use cases
The existing Loyalty webhooks page has been enriched with a complete event reference table and recommended automations for each event.
Batch event creation
Added POST /events/batch to the Events API. This endpoint allows sending multiple events in a single request, each with its own contact identifiers, event properties, and optional object associations.
The response supports partial success — if some events fail validation, the API returns a 207 status with a breakdown of successful and failed events, including per-event error messages.
Read more in the reference section
Brevo MCP server — security and configuration update
The Brevo MCP server has been updated with improved security, simplified maintenance, and rate limiting.
What changed:
- Authentication method: MCP tokens are no longer passed in the URL. They are now transmitted securely via the HTTP
Authorization: Bearer <token>header. All previous URL patterns containing/{token}are no longer valid. - Auto-generated tools: The 193 MCP tools are now automatically generated from the Brevo OpenAPI specification, eliminating discrepancies between the API and MCP server.
- Rate limiting: Request limits have been added to protect services from abuse.
- New tool support: Integration guides now cover Windsurf, VS Code (GitHub Copilot), and Claude Code CLI in addition to Claude Desktop, Cursor, and Cline.
Action required: Update your MCP configuration to use the new header-based authentication. See the integration guide for updated configuration examples for all supported tools.
Loyalty API: new endpoint and rate limits
New endpoint: DELETE /loyalty/config/programs/{pid}/contact/{cid}
Removes a contact from a loyalty program subscription. See the Loyalty API reference for details.
Rate limits: Loyalty endpoints now have documented rate limits across all account tiers.
See the rate limits documentation for the full breakdown.
PHP SDK v4 release
We’ve released the PHP SDK v4 (getbrevo/brevo-php) with a type-safe client for the Brevo API: unified Brevo client, strongly typed request and response objects with PHPDoc annotations, PSR-18 HTTP client compatibility (Guzzle, Symfony HttpClient), automatic retries with exponential backoff, and structured error handling via BrevoApiException.
You can learn more on the dedicated guide here: https://developers.brevo.com/docs/api-clients/php
Install it using:
Guzzle is recommended as the HTTP client:
Key highlights:
- Unified client via
Brevo(apiKey: "...")— single entry point with namespaced service clients - Strongly typed request and response objects with full PHPDoc annotations
- PSR-18 HTTP client support — use Guzzle, Symfony HttpClient, or any compatible client
- Automatic retries with exponential backoff (configurable per client or per request)
- Structured errors via
BrevoApiExceptionwithgetCode(),getBody(), andgetMessage() - 33 service namespaces covering the entire Brevo API
Resources:
Python SDK v4 beta release
We’ve released a beta version of the Python SDK (v4.0) with significant improvements including native async support via AsyncBrevo, Pydantic-based typed models, automatic retries with exponential backoff, and a custom httpx client support.
You can learn more on the dedicated guide here: https://developers.brevo.com/docs/api-clients/python
Install it using:
Key highlights:
- Unified client via
Brevo(api_key="...")— no more manual configuration objects - Native async support with
AsyncBrevo - Full type annotations for all request and response models
- Raw response access via
with_raw_response - 33 service namespaces covering the entire Brevo API
Resources:
Conversations webhooks documentation update
Updated the Conversations webhooks documentation with new fields and corrections.
Message object — new fields:
rawUnsafeHtml— Raw unsanitized HTML of the messagesubject— Email subject line (present for email-source conversations)isSentViaJsApi—truefor messages sent via the JS APIsourceMessageId— Original message ID from the source platformfrom,to,replyTo,cc,bcc— Email conversation fieldsisForward—trueif the message is a forwarded message
Attachment object — new fields:
mimeType— MIME type of the fileisInline— Whether the attachment is inline (e.g. embedded images in emails)inlineId— Content-ID for inline attachments
Visitor object — new field:
isBanned— Whether the visitor is banned (inconversationTranscriptonly)
Corrections:
imageInfo.previewUrlrenamed toimageInfo.previewLinkin the conversation transcript payload- Image preview URL quality parameter updated from
lightertobetter
Node.js SDK beta release
We’ve released a beta version of the Node.js SDK (v4.0.1) with significant improvements including a promise-based API, enhanced TypeScript types, standardized error handling, and improved retry logic. You can learn more on the dedicated guide here: https://developers.brevo.com/docs/api-clients/node-js
The pre-release is now available on npm. Install it using:
Resources:
Dedicated rate limits for orders and products endpoints
Added dedicated rate limits for the following endpoints:
POST /v3/orders/statusPOST /v3/products
These endpoints now have specific rate limits that differ from the default limits applied to other endpoints. See the rate limits documentation for detailed limits by account tier.
Connect to Cursor guide
Added a new guide explaining how to connect the Brevo API documentation to Cursor via MCP (Model Context Protocol) server. This integration enables Cursor to access Brevo’s API documentation directly within your development environment.
Guide: Connect to Cursor