Skip to content

Commit 6a5cce6

Browse files
author
bird-release[bot]
committed
Release v0.56.0 (sdk-python/v0.56.0)
1 parent e35c4d1 commit 6a5cce6

3 files changed

Lines changed: 57 additions & 1 deletion

File tree

‎CHANGELOG.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 0.56.0
4+
5+
- Add `broadcast_id` to the per-recipient outbound email events, naming the broadcast a send went out as part of so you can group a broadcast's events without looking each send up. It is null on a send with no broadcast behind it.
6+
37
## 0.55.0
48

59
- Add a read-only list method for the workspace's email templates, so a template can be chosen from the workspace's own list before a send.

‎src/bird/_generated.py‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,10 @@ class AudienceID(RootModel[str]):
811811
root: str
812812

813813

814+
class EmailBroadcastID(RootModel[str]):
815+
root: str
816+
817+
814818
class ContactIdentifierFilter(str, Enum):
815819
email = "email"
816820
phone_number = "phone_number"
@@ -7448,6 +7452,10 @@ class EventEmailAcceptedData(BaseModel):
74487452
metadata: Annotated[Optional[Dict[str, Any]], Field(
74497453
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
74507454
)]
7455+
broadcast_id: Annotated[Optional[str], Field(
7456+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7457+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7458+
)]
74517459

74527460

74537461
class EventEmailAccepted(BaseModel):
@@ -7506,6 +7514,10 @@ class EventEmailBouncedData(BaseModel):
75067514
metadata: Annotated[Optional[Dict[str, Any]], Field(
75077515
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
75087516
)]
7517+
broadcast_id: Annotated[Optional[str], Field(
7518+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7519+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7520+
)]
75097521
bounce_type: Annotated[EmailBounceType, Field(
75107522
description="Bounce classification.\n\n- `hard`: A permanent failure, such as an invalid address or a domain that does not exist.\n- `soft`: A transient failure, such as a full mailbox or a server that is temporarily unavailable.\n- `block`: The receiving mail server refused the sending IP on reputation grounds.\n- `admin`: An administrative refusal, such as relaying denied or a blocklisted domain.\n- `undetermined`: The receiving server's response was ambiguous.",
75117523
)]
@@ -7614,6 +7626,10 @@ class EventEmailClickedData(BaseModel):
76147626
metadata: Annotated[Optional[Dict[str, Any]], Field(
76157627
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
76167628
)]
7629+
broadcast_id: Annotated[Optional[str], Field(
7630+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7631+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7632+
)]
76177633
url: Annotated[str, Field(
76187634
description="The URL the recipient clicked.",
76197635
examples=["https://bird.com/welcome"],
@@ -7677,6 +7693,10 @@ class EventEmailComplainedData(BaseModel):
76777693
metadata: Annotated[Optional[Dict[str, Any]], Field(
76787694
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
76797695
)]
7696+
broadcast_id: Annotated[Optional[str], Field(
7697+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7698+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7699+
)]
76807700
feedback_type: Annotated[Optional[str], Field(
76817701
description="The kind of feedback the mailbox provider reported (such as `abuse` or `fraud`), or null when the provider did not specify one.",
76827702
examples=["abuse"],
@@ -7731,6 +7751,10 @@ class EventEmailDeferredData(BaseModel):
77317751
metadata: Annotated[Optional[Dict[str, Any]], Field(
77327752
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
77337753
)]
7754+
broadcast_id: Annotated[Optional[str], Field(
7755+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7756+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7757+
)]
77347758
bounce_type: Annotated[EmailBounceType, Field(
77357759
description="Bounce classification.\n\n- `hard`: A permanent failure, such as an invalid address or a domain that does not exist.\n- `soft`: A transient failure, such as a full mailbox or a server that is temporarily unavailable.\n- `block`: The receiving mail server refused the sending IP on reputation grounds.\n- `admin`: An administrative refusal, such as relaying denied or a blocklisted domain.\n- `undetermined`: The receiving server's response was ambiguous.",
77367760
)]
@@ -7798,6 +7822,10 @@ class EventEmailDeliveredData(BaseModel):
77987822
metadata: Annotated[Optional[Dict[str, Any]], Field(
77997823
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
78007824
)]
7825+
broadcast_id: Annotated[Optional[str], Field(
7826+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7827+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7828+
)]
78017829

78027830

78037831
class EventEmailDelivered(BaseModel):
@@ -7848,6 +7876,10 @@ class EventEmailListUnsubscribedData(BaseModel):
78487876
metadata: Annotated[Optional[Dict[str, Any]], Field(
78497877
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
78507878
)]
7879+
broadcast_id: Annotated[Optional[str], Field(
7880+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7881+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7882+
)]
78517883

78527884

78537885
class EventEmailListUnsubscribed(BaseModel):
@@ -7898,6 +7930,10 @@ class EventEmailOpenedData(BaseModel):
78987930
metadata: Annotated[Optional[Dict[str, Any]], Field(
78997931
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
79007932
)]
7933+
broadcast_id: Annotated[Optional[str], Field(
7934+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7935+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7936+
)]
79017937
ip_address: Annotated[Optional[str], Field(
79027938
description="IP address of the client that opened the email, or null when it is not known.",
79037939
examples=["203.0.113.9"],
@@ -7956,6 +7992,10 @@ class EventEmailOutOfBandBounceData(BaseModel):
79567992
metadata: Annotated[Optional[Dict[str, Any]], Field(
79577993
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
79587994
)]
7995+
broadcast_id: Annotated[Optional[str], Field(
7996+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
7997+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
7998+
)]
79597999
bounce_type: Annotated[EmailBounceType, Field(
79608000
description="Bounce classification.\n\n- `hard`: A permanent failure, such as an invalid address or a domain that does not exist.\n- `soft`: A transient failure, such as a full mailbox or a server that is temporarily unavailable.\n- `block`: The receiving mail server refused the sending IP on reputation grounds.\n- `admin`: An administrative refusal, such as relaying denied or a blocklisted domain.\n- `undetermined`: The receiving server's response was ambiguous.",
79618001
)]
@@ -8027,6 +8067,10 @@ class EventEmailProcessedData(BaseModel):
80278067
metadata: Annotated[Optional[Dict[str, Any]], Field(
80288068
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
80298069
)]
8070+
broadcast_id: Annotated[Optional[str], Field(
8071+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
8072+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
8073+
)]
80308074

80318075

80328076
class EventEmailProcessed(BaseModel):
@@ -8160,6 +8204,10 @@ class EventEmailRejectedData(BaseModel):
81608204
metadata: Annotated[Optional[Dict[str, Any]], Field(
81618205
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
81628206
)]
8207+
broadcast_id: Annotated[Optional[str], Field(
8208+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
8209+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
8210+
)]
81638211
rejection_reason: Annotated[EmailRejectionReason, Field(
81648212
description="Why an email was rejected before delivery.\n\n- `recipient_suppressed`: The recipient is on the workspace suppression list, so\n delivery was never attempted.\n- `transmission_failed`: The message could not be transmitted for delivery.\n- `generation_failure`: The message could not be built for delivery (template or\n content issue).\n- `policy_rejection`: The message was refused by sending policy.\n- `domain_unverified`: The sending domain was not verified.\n- `quota_exceeded`: The organization's send quota was reached.\n- `recipient_not_allowed`: A recipient was not permitted for this send (for shared\n onboarding-domain sends, recipients must be verified workspace members).",
81658213
)]
@@ -8255,6 +8303,10 @@ class EventEmailUnsubscribedData(BaseModel):
82558303
metadata: Annotated[Optional[Dict[str, Any]], Field(
82568304
description="The metadata object provided on the send request, echoed on every event for the send so you can correlate events with your own records. Null when the send carried no metadata.",
82578305
)]
8306+
broadcast_id: Annotated[Optional[str], Field(
8307+
description="The broadcast this send went out as part of, echoed on every per-recipient event for the send so you can attribute engagement to the broadcast without an extra lookup. Null when the send was not part of a broadcast. On `email.unsubscribed` and `email.list_unsubscribed`, null can also mean the recipient used an unsubscribe link that names no broadcast, so on those two events null does not rule a broadcast out.",
8308+
examples=["eb_01krdgeqcxet5s7t44vh8rt9mg"],
8309+
)]
82588310

82598311

82608312
class EventEmailUnsubscribed(BaseModel):

‎src/bird/_version.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.55.0"
1+
__version__ = "0.56.0"

0 commit comments

Comments
 (0)