Python SDK Changelog
Release history for the brevo-python SDK.
Release history for the brevo-python SDK.
companies.get_companies(filters=...) — the filters keyword is renamed to filters_attributes_name. The old keyword is silently dropped, the request still succeeds, and the server returns an unfiltered list.event.create_batch_events — keyword renamed request= → events=; item types renamed in lockstep (CreateBatchEventsRequestItem → CreateBatchEventsRequestEventsItem and 5 sub-types).balance.get_contact_balances — new required balance_definition_id parameter.balance.get_active_balances_api — response type replaced with GetLoyaltyBalanceProgramsPidActiveBalanceResponse (different shape).balance.begin_transaction.event_time — str → datetime. Runtime-tolerant under skip_validation, but type-checkers will fail.tasks.get_all_task_types — return type changed from GetCrmTasktypesResponse to List[GetCrmTasktypesResponseItem]. Old .id / .title access on the response fails (it’s a list now).webhooks.create_webhook — events argument moved from required to optional. Positional callers break; switch to keyword arguments.webhooks.*.message_id — type changed from int to str on history-fetch endpoints.GetAccountResponse.date_time_preferences, GetWebhook.channel, GetProcessResponseInfo.export.SendTransacSmsTag is now Union[str, List[str]] (was a pydantic model); GetExtendedCampaignStats.links_stats is now Dict[str, int] (was a pydantic class); ConversationsMessageAttachmentsItem: file_name → name, inline_id → link.from brevo import ... — most notably CreateBatchEventsRequestItem* (6 names), GetWebhookChannel, GetAccountResponseDateTimePreferences, GetExtendedCampaignStatsLinksStats, SendTransacSmsTagField, and UpsertrecordsRequestRecordsItemAssociationsItemZero/One* (8 names).contacts.create_contact, contacts.update_contact, email_campaigns.get_email_campaigns, ecommerce.get_products, and several other endpoints.Brevo (sync) and AsyncBrevo are affected symmetrically by every change above.See the Upgrading from v4.x guide for migration details and a one-line rollback pin.
duplicate_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.contact_properties and event_properties now accept boolean values in create_event and create_batch_events.attributes now accepts plain integers in create_contact and update_contact.client.event.get_events() — retrieve a paginated list of custom events with filters for contact, event name, object type, and date range.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.get_active_balances_api(), get_contact_balances(), and get_subscription_balances() now accept include_internal.get_transaction_history() now supports filtering by status and transaction_type.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.GetCampaignStats: apple_mpp_opens and opens_rate are now correctly typed as nullable.Order.products: all product fields are now accessible — price, product_id, variant_id, quantity, quantity_float.create_contact(): correctly handles 204 No Content responses without raising a deserialization error.transactional_sms.send_transac_sms() — use transactional_sms.send_transac_sms_async() instead.Released a beta version of the Python SDK (v4.0) with native async support via AsyncBrevo, Pydantic-based typed models, automatic retries with exponential backoff, and custom httpx client support.
Brevo(api_key="...") — no more manual configuration objectsAsyncBrevowith_raw_response