PHP SDK Changelog

Release history for the getbrevo/brevo-php SDK.

May 14, 2026 — v5.0.0

Breaking changes

  • ⚠️ GetCompaniesRequest::filters — renamed to filtersAttributesName. 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 from array to a CreateBatchEventsRequest wrapper.
  • Balance::getActiveBalancesApi — return type changed from ?BalanceLimit to ?GetLoyaltyBalanceProgramsPidActiveBalanceResponse (different shape).
  • Balance::getContactBalances$request no longer defaults to empty; balanceDefinitionId is required.
  • Balance\BeginTransactionRequest::eventTime — type changed from ?string to ?DateTime. ISO strings now cause TypeError.
  • Tasks::getAllTaskTypes — return type changed from ?GetCrmTasktypesResponse (wrapper) to ?array<GetCrmTasktypesResponseItem>.
  • EmailCampaigns\GetEmailCampaignResponse::utmIdActive renamed to utmId (wire key utmIDActiveutmID, type ?bool?int). Same change on GetEmailCampaignsResponseCampaignsItem.
  • Model fields removed: GetAccountResponse::dateTimePreferences, Webhook::channel, GetProcessResponseInfo::export, GetProcessResponse::error/createdAt/completedAt, and several ExternalFeeds response fields.
  • Process\GetProcessResponseInfoImport: count fields changed from ?int to ?string (now URLs to CSV reports) — affects invalidEmails, duplicateContactId, duplicateExtId, etc.
  • Ecommerce\CreateUpdateProductResponse::id and CreateUpdateCategoryResponse::id: ?int?string.
  • Several string date fields tightened to ?DateTime (Program::*, Reward::*, BalanceLimit::createdAt/updatedAt).
  • ConversationsMessageAttachmentsItem: fileNamename, inlineIdlink.
  • CustomObjects associations union flattened: UpsertrecordsRequestRecordsItemAssociationsItem is now a single class with action: '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 endpointsduplicate_email_id is now typed as a string (URL to a CSV file) instead of an integer. The legacy in_process status value is now handled correctly.
  • Event endpointscontact_properties and event_properties now accept boolean values in createEvent and createBatchEvents.
  • Contact endpointsattributes now accepts plain integers in createContact and updateContact. PHP users no longer need to cast integers to float.

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

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 optional excludeHtmlContent flag to omit the HTML body from the response.

Fixed

  • UpdateContactRequest and CreateContactRequest: boolean values in union-typed attribute maps now serialize correctly. Previously threw JsonException: Cannot serialize value of type boolean.
  • Order::products: OrderProductsItem now exposes all product fields — price, productId, variantId, quantity, quantityFloat.
  • GetCampaignStats: appleMppOpens and opensRate are now correctly typed as nullable (?int, ?float).

Deprecated

  • sendTransacSms() — use sendAsyncTransactionalSms() instead.

February 27, 2026 — v4.0 release

Released the PHP SDK v4 (getbrevo/brevo-php) with a type-safe client for the Brevo API.

$composer require getbrevo/brevo-php guzzlehttp/guzzle

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 BrevoApiException with getCode(), getBody(), and getMessage()
  • 33 service namespaces covering the entire Brevo API