Marketing webhooks

Here you will find the list of all the marketing events you can track. Please consider the request schema and parameters for each of them when you decide to build the Notify URL on your side.


Datetime parameters 🕗

The following parameters are present in all events we offer tracking for. Keep this information in mind whenever working with webhook datetime values.

ts_sent, ts_event : UTC Timezone date_sent, date_event : Local Timezone date : CET/CEST Timezone



Marketing email

Marked as Spam

Attribute nameData typeDescription
eventstring”spam”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
reasonstringSpam reason
tsintegerTimestamp in seconds of when event occurred
tagstringInternal tag of campaign
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign ",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "event": "spam",
9 "reason": "undesired",
10 "tag": "",
11 "ts_sent": 1604933619,
12 "ts_event": 1604933737,
13 "ts": 1604937337,
14}

Opened

Attribute nameData typeDescription
eventstring”opened”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
tagstringInternal tag of campaign
tsintegerTimestamp in seconds of when event occurred
segment_idsarray of integersNewly added fields for mails that are sent to a segment
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "event": "opened",
9 "tag": "",
10 "segment_ids": [
11 1,
12 10,
13 ],
14 "ts_sent": 1604933619,
15 "ts_event": 1604933737,
16 "ts": 1604937337
17}

Clicked

Attribute nameData typeDescription
eventstring”click”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
tagstringInternal tag of campaign
tsintegerTimestamp in seconds of when event occurred
URLstringUrl clicked
segment_idsarray of integersNewly added fields for mails that are sent to a segment
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "event": "click",
9 "tag": "",
10 "segment_ids": [
11 1,
12 10,
13 ],
14 "ts_sent": 1604933619,
15 "ts_event": 1604933737,
16 "ts": 1604937337,
17 "URL": "https://myCampaignUrl.net"
18}

Hard Bounced

Attribute nameData typeDescription
eventstring”hard_bounce”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
sending_ipstringIp used to send message
reasonstringHard bounce reason
tsintegerTimestamp in seconds of when event occurred
tagstringInternal tag of campaign
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "reason": "deferred",
9 "event": "hard_bounce",
10 "tag": "",
11 "sending_ip": "xxx.xxx.xxx.xxx",
12 "ts_sent": 1604933619,
13 "ts_event": 1604933737,
14 "ts": 1604937337,
15}

Soft Bounced

Attribute typeData typeDescription
eventstring”soft_bounce”
emailstringRecipient email
id1integerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
reasonstringSoft bounce reason
sending_ipstringIp used to send message
tsintegerTimestamp in seconds of when event occurred
tagstringInternal tag of campaign
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "reason": "deferred",
9 "event": "soft_bounced",
10 "tag": "",
11 "sending_ip": "xxx.xxx.xxx.xxx"
12 "ts_sent": 1604933619,
13 "ts_event": 1604933737,
14 "ts": 1604937337,
15}

Delivered

Attribute nameData typeDescription
eventstring”delivered”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
sending_ipstringIp used to send message
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
tsintegerTimestamp in seconds of when event occurred
tagstringInternal tag of campaign
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "event": "delivered",
9 "tag": "",
10 "sending_ip": "xxx.xxx.xxx.xxx"
11 "ts_sent": 1604933619,
12 "ts_event": 1604933737,
13 "ts": 1604937337,
14}

Unsubscribe

Attribute nameData typeDescription
eventstring”unsubscribe”
emailstringRecipient email
idintegerInternal id of webhook
date_sentstringDate the campaign was sent (year-month-day, hour:minute:second)
date_eventstringDate the event occurred (year-month-day, hour:minute:second)
ts_sentintegerTimestamp in seconds of when campaign was sent
ts_eventintegerTimestamp in seconds of when event occurred
camp_idintegerInternal id of campaign
campaign namestringInternal name of campaign
list_idarray of integersThe internal list id’s the recipient has been unsubscribed from
tsintegerTimestamp in seconds of when event occurred
tagstringInternal tag of campaign
segment_idsarray of integersNewly added fields for mails that are sent to a segment
1{
2 "id": xxxxxx,
3 "camp_id": xx,
4 "email": "example@domain.com",
5 "campaign_name": "My First Campaign",
6 "date_sent": "2020-10-09 00:00:00",
7 "date_event": "2020-10-09 00:00:00",
8 "event": "unsubscribe",
9 "tag": "",
10 "sending_ip": "xxx.xxx.xxx.xxx",
11 "list_id": [
12 3,
13 42
14 ],
15 "segment_ids": [
16 1,
17 10
18 ],
19 "ts_sent": 1604933619,
20 "ts_event": 1604933737,
21 "ts": 1604937337
22}

Contact deleted

Attribute nameData typeDescription
eventstring”contact_deleted”
emailstringEmail address of added recipient
idintegerInternal id of webhook
keystringInternal key
datestringDate the event occurred (year-month-day, hour:minute:second)
tsintegerTimestamp in seconds of when event occurred
1{
2 "id": xxxxxx,
3 "email": "example@domain.com",
4 "event": "contact_deleted",
5 "key": "xxxxxxxxxxxxxxxxxx",
6 "list_id": [
7 35
8 ],
9 "date": "2020-10-09 00:00:00",
10 "ts": 1604937111
11}

Contact updated

Attribute nameData typeDescription
eventstring”contact_updated”
emailstringEmail address of added recipient
idintegerInternal id of webhook
keystringInternal key
datestringDate the event occurred (year-month-day, hour:minute:second)
tsintegerTimestamp in seconds of when event occurred
contentarray of stringsFull contact information with updates
1{
2 "id": xxxxxx,
3 "email": "example@domain.com",
4 "event": "contact_updated",
5 "key": "xxxxxxxxxxxxxxxxxx",
6 "content": [
7 {
8 "name": "John",
9 "lastname" : "Doe",
10 "work_phone": "+506 2220 2307"
11 }
12 ],
13 "date": "2020-10-09 00:00:00",
14 "ts": 1604937111
15}

Contact added to list

Attribute nameData typeDescription
eventstring”list_addition”
emailstringEmail address of added recipient
idintegerInternal id of webhook
keystringInternal key
datestringDate the event occurred (year-month-day, hour:minute:second)
tsintegerTimestamp in seconds of when event occurred
list_idarray of integersArray of lists where the contact is now present.

There is a possibility to transfer multiple emails as adding contacts to the list. Also, this webhook is triggered when a list of multiple contacts is added through the API endpoint.

1{
2 "id":"xxxxxx",
3 "email":"example@domain.com",
4 "event":"list_addition",
5 "key":"xxxxxxxxxxxxxxxxxx",
6 "list_id":[
7 34,
8 12
9 ],
10 "date":"2020-10-09 00:00:00",
11 "ts":1604937111
12}

Proxy Open

Attribute nameData typeDescription
idintegerInternal id of webhook
camp_idintegerCampaign id
emailstringEmail address of added recipient
campaign_namestringName of the marketing campaign
date_sentstringDate of when the campaign was sent
date_eventstringDate of the webhook event occurrence
tagstringInternal tag of campaign
eventstring”proxy_open”
tsintegerTimestamp in seconds of when event occurred
ts_eventintegerTimestamp in seconds of when event occurred
ts_sentintegerTimestamp in seconds of when campaign was sent
1{
2 "id":"xxxxxxx",
3 "camp_id":"xxx",
4 "email":"example@domain.com",
5 "campaign name":"campaign_copy",
6 "date_sent":"2025-04-03 13:20:23",
7 "date_event":"12025-04-03 13:41:24",
8 "tag":"",
9 "event":"proxy _open",
10 "ts":1743667884,
11 "ts_event":1743667884,
12 "ts_sent":1743666623
13}

Marketing SMS

Sent

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
sms_countintegernumber of sms parts sent
credits_usedfloatcredits deducted
remaining_creditfloatremaining balance credit
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
1{
2 "id": 26570,
3 "to": "918076721713",
4 "sms_count": 1,
5 "credits_used": 1.5,
6 "remaining_credit": 11488.845,
7 "msg_status": "sent",
8 "date": "2024-10-11 14:19:59",
9 "type": "marketing",
10 "campaign_id": 220
11}

Delivered

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
statusstringstatus
descriptionstringBounce Reason for Failed to deliver message
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
1{
2 "id": 26527,
3 "status": "OK",
4 "msg_status": "delivered",
5 "description": "delivered",
6 "to": "919102606271",
7 "ts_event": 1728459617,
8 "date": "2024-10-09 13:10:17",
9 "tag": [
10 "tag1name"
11 ],
12 "type": "marketing",
13 "campaign_id": 220
14}

Replied

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
error_codeintegererror code
replystringreply of the sms
1{
2 "id": 26519,
3 "msg_status": "replied",
4 "error_code": 101,
5 "description": "replied",
6 "to": "919368207022",
7 "reply": "Hi",
8 "ts_event": 1728386415,
9 "date": "2024-10-08 16:50:16",
10 "tag": [
11 "tag1name","tag2name"
12 ],
13 "type": "marketing",
14 "campaign_id": 220
15}

Soft bounce

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
error_codeintegererror code
bounce_typestringhard bounce or soft bounce
1{
2 "id": 26519,
3 "msg_status": "soft_bounce",
4 "description": "Failed to deliver message for reasons unknown",
5 "bounce_type": "soft_bounce",
6 "error_code": 7,
7 "to": "916778678623",
8 "ts_event": 1728390422,
9 "date": "2024-10-08 17:57:03",
10 "tag": [
11 "tag1name","tag2name"
12 ],
13 "type": "marketing",
14 "campaign_id": 220
15}

Hard bounce

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
error_codeintegererror code
bounce_typestringhard bounce or soft bounce
1{
2 "id": 26519,
3 "msg_status": "hard_bounce",
4 "description": "Message is undeliverable due to an incorrect / invalid / blacklisted / permanently barred MSISDN for this operator",
5 "bounce_type": "hard_bounce",
6 "error_code": 23,
7 "to": "916778678623",
8 "ts_event": 1728390422,
9 "date": "2024-10-08 17:57:03",
10 "tag": [
11 "tag1name","tag2name"
12 ],
13 "type": "marketing"
14 "campaign_id": 220
15}

Subscribe

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
error_codeintegererror code
replystringreply of the sms
1{
2 "id": 26527,
3 "msg_status": "subscribe",
4 "description": "subscribe",
5 "to": "919102606271",
6 "reply": "START",
7 "ts_event": 1728459617,
8 "error_code": 101,
9 "date": "2024-10-09 13:10:17",
10 "tag": [
11 "tag1name"
12 ],
13 "type": "marketing",
14 "campaign_id": 220
15}

Unsubscribe

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
error_codeintegererror code
replystringreply of the sms
1{
2 "id": 26527,
3 "msg_status": "unsubscribed",
4 "description": "unsubscribed",
5 "to": "919102606271",
6 "ts_event": 1728459617,
7 "error_code": 100,
8 "reply": "STOP",
9 "date": "2024-10-09 13:10:17",
10 "tag": [
11 "tag1name"
12 ],
13 "type": "marketing",
14 "campaign_id": 220
15}

Skip

Attribute nameData typeDescription
idintegerunique id generated for each payload
tostringmobile number
msg_statusstringstatus of the message(sent, delivered, soft_bounce, hard_bounce etc.)
datestringtime at which the event is generated
typestringtype of sms(marketing/transactional)
campaign_idintegercampaign id for campaign sms
descriptionstringBounce Reason for Failed to deliver message, description of the event
ts_eventintegertimestamp in seconds of when event occurred
tagarray of stringsinternal tag of campaign
messageIdintegermessage id for transactional sms
1{
2 "id": 26519,
3 "msg_status": "skip",
4 "description": "skip",
5 "to": "12018577757",
6 "ts_event": 1728390414,
7 "date": "2024-10-08 17:56:54",
8 "messageId": 0,
9 "tag": [
10 "tag1name","tag2name"
11 ],
12 "type": "marketing",
13 "campaign_id": 220
14}

Coupons webhooks

Coupons webhooks notify your endpoint when a unique coupon code is delivered to a contact through any Brevo channel (email, SMS, automation workflow). They allow you to track which specific code was sent to which contact, reconcile your coupon inventory, and sync coupon status into an external CMS, OMS, or loyalty system.

Coupon events are delivered through the same Outbound Webhooks pipeline as other marketing events, with at-least-once delivery semantics. Use event_id to dedupe.

Unique Coupon Sent

Triggered when a unique coupon code is sent to a contact from a coupon collection.

Attribute nameData typeDescription
idintegerUnique webhook delivery ID. Increments per delivery attempt.
event_idUUID (string)Unique identifier of the underlying coupon-sent event. Use this for idempotency / deduplication.
event_namestringAlways unique_coupon_sent for this event.
event_dateISO 8601 stringWhen the coupon was sent (UTC).
sourcestringAlways coupon for this event.
contact_idintegerBrevo contact ID.
contact_propertiesobject | nullReserved for contact attributes. Currently always null.
identifiers.email_idstringContact email address.
identifiers.ext_idstringContact external ID. Only present when the contact has an external ID set.
couponCodestringThe unique coupon code value sent to the contact (e.g. SPRING-TEST-fzm8yj).
couponCollection.idUUID (string)Coupon collection ID.
couponCollection.namestringCoupon collection name.
couponCollection.defaultCouponstringFallback coupon code used when the collection’s unique codes are exhausted.
couponCollection.couponResendDurationDaysintegerNumber of days during which the same code will be resent to a contact who already received one (deduplication window).
couponCollection.remainingCouponsAlertintegerInventory alert threshold — number of remaining unique codes below which an alert is fired on the collection.
couponCollection.remainingDaysAlertintegerDays-based alert threshold configured on the collection.
1{
2 "id": 1969104,
3 "event_id": "1aebf68d-63f7-45c6-9583-da37549d41dd",
4 "event_name": "unique_coupon_sent",
5 "event_date": "2026-04-27T11:51:39.085Z",
6 "source": "coupon",
7 "contact_id": 1,
8 "contact_properties": null,
9 "identifiers": {
10 "email_id": "lea.hugon@brevo.com",
11 "ext_id": "8555183931565"
12 },
13 "couponCode": "SPRING-TEST-fzm8yj",
14 "couponCollection": {
15 "id": "caa90e82-d04b-439f-bc89-d183eb4c329d",
16 "name": "Sprint-Sales-test",
17 "defaultCoupon": "DEFAULT",
18 "couponResendDurationDays": 20,
19 "remainingCouponsAlert": 40,
20 "remainingDaysAlert": 0
21 }
22}
Notes for integrators
  • Naming: Top-level fields use snake_case (Brevo unified events convention); nested couponCollection fields use camelCase.
  • Coupon expiration date is not included in the webhook payload at this time.
  • Delivery is asynchronous and batched. Expect occasional bursts and possible retries on 5xx responses from your endpoint. Use event_id for idempotency.

Use cases

  • Track which specific code was assigned to which contact.
  • Reconcile sent codes per collection with timestamps.
  • Sync coupon code status into an external CMS, OMS, or loyalty system.