PHP SDK Changelog
Release history for the getbrevo/brevo-php SDK.
May 14, 2026 — v5.0.0
Breaking changes
- ⚠️
GetCompaniesRequest::filters— renamed tofiltersAttributesName. Existing code passing'filters' => ...does not throw, but the filter is silently ignored server-side and the response is unfiltered. Event::createBatchEvents— first argument changed fromarrayto aCreateBatchEventsRequestwrapper.Balance::getActiveBalancesApi— return type changed from?BalanceLimitto?GetLoyaltyBalanceProgramsPidActiveBalanceResponse(different shape).Balance::getContactBalances—$requestno longer defaults to empty;balanceDefinitionIdis required.Balance\BeginTransactionRequest::eventTime— type changed from?stringto?DateTime. ISO strings now causeTypeError.Tasks::getAllTaskTypes— return type changed from?GetCrmTasktypesResponse(wrapper) to?array<GetCrmTasktypesResponseItem>.EmailCampaigns\GetEmailCampaignResponse::utmIdActiverenamed toutmId(wire keyutmIDActive→utmID, type?bool→?int). Same change onGetEmailCampaignsResponseCampaignsItem.- Model fields removed:
GetAccountResponse::dateTimePreferences,Webhook::channel,GetProcessResponseInfo::export,GetProcessResponse::error/createdAt/completedAt, and severalExternalFeedsresponse fields. Process\GetProcessResponseInfoImport: count fields changed from?intto?string(now URLs to CSV reports) — affectsinvalidEmails,duplicateContactId,duplicateExtId, etc.Ecommerce\CreateUpdateProductResponse::idandCreateUpdateCategoryResponse::id:?int→?string.- Several
stringdate fields tightened to?DateTime(Program::*,Reward::*,BalanceLimit::createdAt/updatedAt). ConversationsMessageAttachmentsItem:fileName→name,inlineId→link.CustomObjectsassociations union flattened:UpsertrecordsRequestRecordsItemAssociationsItemis now a single class withaction: 'link' | 'unlink'discriminator; 7 old variant classes deleted.
Added
- New optional fields and filters across
contacts->createContact,contacts->updateContact,emailCampaigns->getEmailCampaigns,ecommerce->getProducts, and several other endpoints. - Tier groups support upgrade and downgrade schedule fields.
See the Upgrading from v4.x guide for migration details and a one-line rollback pin.
April 10, 2026 — v4.0.14
Fixed
- Process endpoints —
duplicate_email_idis now typed as a string (URL to a CSV file) instead of an integer. The legacyin_processstatus value is now handled correctly. - Event endpoints —
contact_propertiesandevent_propertiesnow accept boolean values increateEventandcreateBatchEvents. - Contact endpoints —
attributesnow accepts plain integers increateContactandupdateContact. PHP users no longer need to cast integers tofloat.
March 25, 2026 — 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.$client->event->createBatchEvents()— track multiple contact interactions in a single request.PatchCrmAttributesIdRequest— update a CRM attribute’s display label and option labels.CreateUpdateProductRequestand batch product upsert now accept optionalbrandanddescriptionfields.- Balance:
getActiveBalancesApi(),getContactBalances(), andgetSubscriptionBalances()now acceptincludeInternal. - Balance:
getTransactionHistory()now supports filtering bystatusandtransactionType.
Improved
metafield on balance definition requests is now a typed class instead of a generic array.metaInfosize limit for products clarified: maximum 20,000 characters total.usersfield onGetAccountResponsePlanVerticalsItemis now nullable.
Fixed
createContact()no longer throwsBrevoException: Failed to deserialize response: Syntax erroron empty success responses.
March 12, 2026 — 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.
February 27, 2026 — v4.0 release
Released the PHP SDK v4 (getbrevo/brevo-php) with a type-safe client for the Brevo API.
Key highlights
- Unified client via
new 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