linq-python 0.41.2__py3-none-any.whl → 0.42.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
linq/_client.py CHANGED
@@ -1067,6 +1067,12 @@ class LinqAPIV3(SyncAPIClient):
1067
1067
 
1068
1068
  return WebhookSubscriptionsResource(self)
1069
1069
 
1070
+ @cached_property
1071
+ def webhooks(self) -> WebhooksResource:
1072
+ from .resources.webhooks import WebhooksResource
1073
+
1074
+ return WebhooksResource(self)
1075
+
1070
1076
  @cached_property
1071
1077
  def capability(self) -> CapabilityResource:
1072
1078
  """
@@ -1076,12 +1082,6 @@ class LinqAPIV3(SyncAPIClient):
1076
1082
 
1077
1083
  return CapabilityResource(self)
1078
1084
 
1079
- @cached_property
1080
- def webhooks(self) -> WebhooksResource:
1081
- from .resources.webhooks import WebhooksResource
1082
-
1083
- return WebhooksResource(self)
1084
-
1085
1085
  @cached_property
1086
1086
  def contact_card(self) -> ContactCardResource:
1087
1087
  """
@@ -2202,6 +2202,12 @@ class AsyncLinqAPIV3(AsyncAPIClient):
2202
2202
 
2203
2203
  return AsyncWebhookSubscriptionsResource(self)
2204
2204
 
2205
+ @cached_property
2206
+ def webhooks(self) -> AsyncWebhooksResource:
2207
+ from .resources.webhooks import AsyncWebhooksResource
2208
+
2209
+ return AsyncWebhooksResource(self)
2210
+
2205
2211
  @cached_property
2206
2212
  def capability(self) -> AsyncCapabilityResource:
2207
2213
  """
@@ -2211,12 +2217,6 @@ class AsyncLinqAPIV3(AsyncAPIClient):
2211
2217
 
2212
2218
  return AsyncCapabilityResource(self)
2213
2219
 
2214
- @cached_property
2215
- def webhooks(self) -> AsyncWebhooksResource:
2216
- from .resources.webhooks import AsyncWebhooksResource
2217
-
2218
- return AsyncWebhooksResource(self)
2219
-
2220
2220
  @cached_property
2221
2221
  def contact_card(self) -> AsyncContactCardResource:
2222
2222
  """
linq/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "linq"
4
- __version__ = "0.41.2" # x-release-please-version
4
+ __version__ = "0.42.0" # x-release-please-version
@@ -215,14 +215,14 @@ __all__ = [
215
215
  "AsyncWebhookSubscriptionsResourceWithRawResponse",
216
216
  "WebhookSubscriptionsResourceWithStreamingResponse",
217
217
  "AsyncWebhookSubscriptionsResourceWithStreamingResponse",
218
+ "WebhooksResource",
219
+ "AsyncWebhooksResource",
218
220
  "CapabilityResource",
219
221
  "AsyncCapabilityResource",
220
222
  "CapabilityResourceWithRawResponse",
221
223
  "AsyncCapabilityResourceWithRawResponse",
222
224
  "CapabilityResourceWithStreamingResponse",
223
225
  "AsyncCapabilityResourceWithStreamingResponse",
224
- "WebhooksResource",
225
- "AsyncWebhooksResource",
226
226
  "ContactCardResource",
227
227
  "AsyncContactCardResource",
228
228
  "ContactCardResourceWithRawResponse",
linq/types/__init__.py CHANGED
@@ -94,19 +94,26 @@ from .reaction_added_webhook_event import ReactionAddedWebhookEvent as ReactionA
94
94
  from .blocked_handle_block_response import BlockedHandleBlockResponse as BlockedHandleBlockResponse
95
95
  from .blocked_handle_unblock_params import BlockedHandleUnblockParams as BlockedHandleUnblockParams
96
96
  from .message_add_reaction_response import MessageAddReactionResponse as MessageAddReactionResponse
97
+ from .payment_expired_webhook_event import PaymentExpiredWebhookEvent as PaymentExpiredWebhookEvent
97
98
  from .payment_request_create_params import PaymentRequestCreateParams as PaymentRequestCreateParams
98
99
  from .payment_request_list_response import PaymentRequestListResponse as PaymentRequestListResponse
99
100
  from .poll_vote_added_webhook_event import PollVoteAddedWebhookEvent as PollVoteAddedWebhookEvent
100
101
  from .contact_card_retrieve_response import ContactCardRetrieveResponse as ContactCardRetrieveResponse
101
102
  from .message_received_webhook_event import MessageReceivedWebhookEvent as MessageReceivedWebhookEvent
102
103
  from .message_update_app_card_params import MessageUpdateAppCardParams as MessageUpdateAppCardParams
104
+ from .payment_canceled_webhook_event import PaymentCanceledWebhookEvent as PaymentCanceledWebhookEvent
105
+ from .payment_declined_webhook_event import PaymentDeclinedWebhookEvent as PaymentDeclinedWebhookEvent
103
106
  from .reaction_removed_webhook_event import ReactionRemovedWebhookEvent as ReactionRemovedWebhookEvent
104
107
  from .message_delivered_webhook_event import MessageDeliveredWebhookEvent as MessageDeliveredWebhookEvent
105
108
  from .participant_added_webhook_event import ParticipantAddedWebhookEvent as ParticipantAddedWebhookEvent
106
109
  from .payment_provider_connect_params import PaymentProviderConnectParams as PaymentProviderConnectParams
110
+ from .payment_succeeded_webhook_event import PaymentSucceededWebhookEvent as PaymentSucceededWebhookEvent
107
111
  from .poll_vote_removed_webhook_event import PollVoteRemovedWebhookEvent as PollVoteRemovedWebhookEvent
108
112
  from .available_number_retrieve_params import AvailableNumberRetrieveParams as AvailableNumberRetrieveParams
113
+ from .connection_created_webhook_event import ConnectionCreatedWebhookEvent as ConnectionCreatedWebhookEvent
114
+ from .connection_revoked_webhook_event import ConnectionRevokedWebhookEvent as ConnectionRevokedWebhookEvent
109
115
  from .message_update_app_card_response import MessageUpdateAppCardResponse as MessageUpdateAppCardResponse
116
+ from .payment_authorized_webhook_event import PaymentAuthorizedWebhookEvent as PaymentAuthorizedWebhookEvent
110
117
  from .capability_check_i_message_params import CapabilityCheckIMessageParams as CapabilityCheckIMessageParams
111
118
  from .participant_removed_webhook_event import ParticipantRemovedWebhookEvent as ParticipantRemovedWebhookEvent
112
119
  from .payment_provider_connect_response import PaymentProviderConnectResponse as PaymentProviderConnectResponse
@@ -123,6 +130,12 @@ from .chat_background_updated_webhook_event import (
123
130
  )
124
131
  from .chat_group_icon_updated_webhook_event import ChatGroupIconUpdatedWebhookEvent as ChatGroupIconUpdatedWebhookEvent
125
132
  from .chat_group_name_updated_webhook_event import ChatGroupNameUpdatedWebhookEvent as ChatGroupNameUpdatedWebhookEvent
133
+ from .location_sharing_started_webhook_event import (
134
+ LocationSharingStartedWebhookEvent as LocationSharingStartedWebhookEvent,
135
+ )
136
+ from .location_sharing_stopped_webhook_event import (
137
+ LocationSharingStoppedWebhookEvent as LocationSharingStoppedWebhookEvent,
138
+ )
126
139
  from .phone_number_status_updated_webhook_event import (
127
140
  PhoneNumberStatusUpdatedWebhookEvent as PhoneNumberStatusUpdatedWebhookEvent,
128
141
  )
@@ -0,0 +1,212 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Dict, Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal
6
+
7
+ from .._models import BaseModel
8
+
9
+ __all__ = ["ConnectionCreatedWebhookEvent", "Data", "DataDiscount", "DataNatural", "DataStripe"]
10
+
11
+
12
+ class DataDiscount(BaseModel):
13
+ """Subscription mode — the discount Stripe applied, read back
14
+ from the coupon.
15
+
16
+ Absent when none was applied.
17
+ """
18
+
19
+ coupon: Optional[str] = None
20
+
21
+ label: Optional[str] = None
22
+ """Name of the coupon/promo code displayed to customers."""
23
+
24
+ promotion_code: Optional[str] = None
25
+
26
+
27
+ class DataNatural(BaseModel):
28
+ """Natural-rail join keys, present when `rail: natural`."""
29
+
30
+ payment_request_id: Optional[str] = None
31
+ """The Natural payment request (`prq_...`)."""
32
+
33
+ transaction_id: Optional[str] = None
34
+ """The settled transaction (`txn_...`)."""
35
+
36
+
37
+ class DataStripe(BaseModel):
38
+ """
39
+ Ids of the Stripe objects on your connected account — join
40
+ keys into your own Stripe Dashboard/API. Manage a
41
+ subscription's post-checkout lifecycle with `subscription_id`.
42
+ """
43
+
44
+ customer_id: Optional[str] = None
45
+ """
46
+ The Customer the request is attached to (`cus_...`). Always set in subscription
47
+ mode; set in payment mode only when the request was created with a
48
+ `customer_id`.
49
+ """
50
+
51
+ payment_intent_id: Optional[str] = None
52
+ """The PaymentIntent collected at checkout (`pi_...`)."""
53
+
54
+ subscription_id: Optional[str] = None
55
+ """Subscription mode — the Subscription (`sub_...`)."""
56
+
57
+
58
+ class Data(BaseModel):
59
+ """
60
+ The payment request, as returned by
61
+ `GET /v3/payment_requests/{paymentRequestId}`.
62
+ """
63
+
64
+ id: str
65
+ """The payment request id."""
66
+
67
+ amount: int
68
+ """What was charged at checkout, in the currency's minor units.
69
+
70
+ In `subscription` mode this is the first invoice's total — all items after any
71
+ discounts are applied.
72
+ """
73
+
74
+ checkout_url: str
75
+ """
76
+ URL the recipient opens to pay
77
+ (`https://zero.linqapp.com/pay/{slug}?session=...`).
78
+ """
79
+
80
+ created_at: datetime
81
+
82
+ currency: str
83
+
84
+ object: str
85
+
86
+ status: Literal["succeeded", "failed", "canceled", "expired"]
87
+
88
+ description: Optional[str] = None
89
+
90
+ discount: Optional[DataDiscount] = None
91
+ """Subscription mode — the discount Stripe applied, read back from the coupon.
92
+
93
+ Absent when none was applied.
94
+ """
95
+
96
+ interval: Optional[Literal["day", "week", "month", "year"]] = None
97
+ """Subscription mode — how often the subscription renews."""
98
+
99
+ interval_count: Optional[int] = None
100
+ """Subscription mode — intervals per renewal."""
101
+
102
+ metadata: Optional[Dict[str, str]] = None
103
+
104
+ mode: Optional[Literal["payment", "subscription"]] = None
105
+ """Whether the request collected a one-time charge or started a subscription."""
106
+
107
+ natural: Optional[DataNatural] = None
108
+ """Natural-rail join keys, present when `rail: natural`."""
109
+
110
+ price_id: Optional[str] = None
111
+ """Subscription mode — the recurring price subscribed to."""
112
+
113
+ quantity: Optional[int] = None
114
+ """Subscription mode — units of the price subscribed to."""
115
+
116
+ rail: Optional[Literal["stripe", "natural"]] = None
117
+ """The rail this request settled on."""
118
+
119
+ stripe: Optional[DataStripe] = None
120
+ """
121
+ Ids of the Stripe objects on your connected account — join keys into your own
122
+ Stripe Dashboard/API. Manage a subscription's post-checkout lifecycle with
123
+ `subscription_id`.
124
+ """
125
+
126
+ trial_end: Optional[datetime] = None
127
+ """Subscription mode — when the free trial ends and the first charge happens.
128
+
129
+ On a trial request, `payment.succeeded` means the payment method was collected
130
+ ($0 moved).
131
+ """
132
+
133
+ updated_at: Optional[datetime] = None
134
+
135
+
136
+ class ConnectionCreatedWebhookEvent(BaseModel):
137
+ api_version: str
138
+ """API version for the webhook payload format"""
139
+
140
+ created_at: datetime
141
+ """When the event was created"""
142
+
143
+ data: Data
144
+ """
145
+ The payment request, as returned by
146
+ `GET /v3/payment_requests/{paymentRequestId}`.
147
+ """
148
+
149
+ event_id: str
150
+ """Unique identifier for this event (for deduplication)"""
151
+
152
+ event_type: Literal[
153
+ "payment.succeeded",
154
+ "payment.canceled",
155
+ "payment.expired",
156
+ "message.sent",
157
+ "message.received",
158
+ "message.read",
159
+ "message.delivered",
160
+ "message.failed",
161
+ "message.edited",
162
+ "reaction.added",
163
+ "reaction.removed",
164
+ "poll.received",
165
+ "poll.failed",
166
+ "poll.sent",
167
+ "poll.delivered",
168
+ "poll.read",
169
+ "poll.updated",
170
+ "poll.vote.added",
171
+ "poll.vote.removed",
172
+ "poll.reaction.added",
173
+ "participant.added",
174
+ "participant.removed",
175
+ "chat.created",
176
+ "chat.group_name_updated",
177
+ "chat.group_icon_updated",
178
+ "chat.group_name_update_failed",
179
+ "chat.group_icon_update_failed",
180
+ "chat.background_updated",
181
+ "chat.background_update_failed",
182
+ "chat.typing_indicator.started",
183
+ "chat.typing_indicator.stopped",
184
+ "phone_number.status_updated",
185
+ "contact_card.received",
186
+ "call.initiated",
187
+ "call.ringing",
188
+ "call.answered",
189
+ "call.ended",
190
+ "call.failed",
191
+ "call.declined",
192
+ "call.no_answer",
193
+ "location.sharing.started",
194
+ "location.sharing.stopped",
195
+ "payment.declined",
196
+ "payment.authorized",
197
+ "connection.created",
198
+ "connection.revoked",
199
+ ]
200
+
201
+ partner_id: str
202
+ """Partner identifier. Present on all webhooks for cross-referencing."""
203
+
204
+ trace_id: str
205
+ """Trace ID for debugging and correlation across systems."""
206
+
207
+ webhook_version: str
208
+ """
209
+ Date-based webhook payload version. Determined by the `?version=` query
210
+ parameter in your webhook subscription URL. If no version parameter is
211
+ specified, defaults based on subscription creation date.
212
+ """
@@ -0,0 +1,212 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Dict, Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal
6
+
7
+ from .._models import BaseModel
8
+
9
+ __all__ = ["ConnectionRevokedWebhookEvent", "Data", "DataDiscount", "DataNatural", "DataStripe"]
10
+
11
+
12
+ class DataDiscount(BaseModel):
13
+ """Subscription mode — the discount Stripe applied, read back
14
+ from the coupon.
15
+
16
+ Absent when none was applied.
17
+ """
18
+
19
+ coupon: Optional[str] = None
20
+
21
+ label: Optional[str] = None
22
+ """Name of the coupon/promo code displayed to customers."""
23
+
24
+ promotion_code: Optional[str] = None
25
+
26
+
27
+ class DataNatural(BaseModel):
28
+ """Natural-rail join keys, present when `rail: natural`."""
29
+
30
+ payment_request_id: Optional[str] = None
31
+ """The Natural payment request (`prq_...`)."""
32
+
33
+ transaction_id: Optional[str] = None
34
+ """The settled transaction (`txn_...`)."""
35
+
36
+
37
+ class DataStripe(BaseModel):
38
+ """
39
+ Ids of the Stripe objects on your connected account — join
40
+ keys into your own Stripe Dashboard/API. Manage a
41
+ subscription's post-checkout lifecycle with `subscription_id`.
42
+ """
43
+
44
+ customer_id: Optional[str] = None
45
+ """
46
+ The Customer the request is attached to (`cus_...`). Always set in subscription
47
+ mode; set in payment mode only when the request was created with a
48
+ `customer_id`.
49
+ """
50
+
51
+ payment_intent_id: Optional[str] = None
52
+ """The PaymentIntent collected at checkout (`pi_...`)."""
53
+
54
+ subscription_id: Optional[str] = None
55
+ """Subscription mode — the Subscription (`sub_...`)."""
56
+
57
+
58
+ class Data(BaseModel):
59
+ """
60
+ The payment request, as returned by
61
+ `GET /v3/payment_requests/{paymentRequestId}`.
62
+ """
63
+
64
+ id: str
65
+ """The payment request id."""
66
+
67
+ amount: int
68
+ """What was charged at checkout, in the currency's minor units.
69
+
70
+ In `subscription` mode this is the first invoice's total — all items after any
71
+ discounts are applied.
72
+ """
73
+
74
+ checkout_url: str
75
+ """
76
+ URL the recipient opens to pay
77
+ (`https://zero.linqapp.com/pay/{slug}?session=...`).
78
+ """
79
+
80
+ created_at: datetime
81
+
82
+ currency: str
83
+
84
+ object: str
85
+
86
+ status: Literal["succeeded", "failed", "canceled", "expired"]
87
+
88
+ description: Optional[str] = None
89
+
90
+ discount: Optional[DataDiscount] = None
91
+ """Subscription mode — the discount Stripe applied, read back from the coupon.
92
+
93
+ Absent when none was applied.
94
+ """
95
+
96
+ interval: Optional[Literal["day", "week", "month", "year"]] = None
97
+ """Subscription mode — how often the subscription renews."""
98
+
99
+ interval_count: Optional[int] = None
100
+ """Subscription mode — intervals per renewal."""
101
+
102
+ metadata: Optional[Dict[str, str]] = None
103
+
104
+ mode: Optional[Literal["payment", "subscription"]] = None
105
+ """Whether the request collected a one-time charge or started a subscription."""
106
+
107
+ natural: Optional[DataNatural] = None
108
+ """Natural-rail join keys, present when `rail: natural`."""
109
+
110
+ price_id: Optional[str] = None
111
+ """Subscription mode — the recurring price subscribed to."""
112
+
113
+ quantity: Optional[int] = None
114
+ """Subscription mode — units of the price subscribed to."""
115
+
116
+ rail: Optional[Literal["stripe", "natural"]] = None
117
+ """The rail this request settled on."""
118
+
119
+ stripe: Optional[DataStripe] = None
120
+ """
121
+ Ids of the Stripe objects on your connected account — join keys into your own
122
+ Stripe Dashboard/API. Manage a subscription's post-checkout lifecycle with
123
+ `subscription_id`.
124
+ """
125
+
126
+ trial_end: Optional[datetime] = None
127
+ """Subscription mode — when the free trial ends and the first charge happens.
128
+
129
+ On a trial request, `payment.succeeded` means the payment method was collected
130
+ ($0 moved).
131
+ """
132
+
133
+ updated_at: Optional[datetime] = None
134
+
135
+
136
+ class ConnectionRevokedWebhookEvent(BaseModel):
137
+ api_version: str
138
+ """API version for the webhook payload format"""
139
+
140
+ created_at: datetime
141
+ """When the event was created"""
142
+
143
+ data: Data
144
+ """
145
+ The payment request, as returned by
146
+ `GET /v3/payment_requests/{paymentRequestId}`.
147
+ """
148
+
149
+ event_id: str
150
+ """Unique identifier for this event (for deduplication)"""
151
+
152
+ event_type: Literal[
153
+ "payment.succeeded",
154
+ "payment.canceled",
155
+ "payment.expired",
156
+ "message.sent",
157
+ "message.received",
158
+ "message.read",
159
+ "message.delivered",
160
+ "message.failed",
161
+ "message.edited",
162
+ "reaction.added",
163
+ "reaction.removed",
164
+ "poll.received",
165
+ "poll.failed",
166
+ "poll.sent",
167
+ "poll.delivered",
168
+ "poll.read",
169
+ "poll.updated",
170
+ "poll.vote.added",
171
+ "poll.vote.removed",
172
+ "poll.reaction.added",
173
+ "participant.added",
174
+ "participant.removed",
175
+ "chat.created",
176
+ "chat.group_name_updated",
177
+ "chat.group_icon_updated",
178
+ "chat.group_name_update_failed",
179
+ "chat.group_icon_update_failed",
180
+ "chat.background_updated",
181
+ "chat.background_update_failed",
182
+ "chat.typing_indicator.started",
183
+ "chat.typing_indicator.stopped",
184
+ "phone_number.status_updated",
185
+ "contact_card.received",
186
+ "call.initiated",
187
+ "call.ringing",
188
+ "call.answered",
189
+ "call.ended",
190
+ "call.failed",
191
+ "call.declined",
192
+ "call.no_answer",
193
+ "location.sharing.started",
194
+ "location.sharing.stopped",
195
+ "payment.declined",
196
+ "payment.authorized",
197
+ "connection.created",
198
+ "connection.revoked",
199
+ ]
200
+
201
+ partner_id: str
202
+ """Partner identifier. Present on all webhooks for cross-referencing."""
203
+
204
+ trace_id: str
205
+ """Trace ID for debugging and correlation across systems."""
206
+
207
+ webhook_version: str
208
+ """
209
+ Date-based webhook payload version. Determined by the `?version=` query
210
+ parameter in your webhook subscription URL. If no version parameter is
211
+ specified, defaults based on subscription creation date.
212
+ """
@@ -0,0 +1,111 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal
6
+
7
+ from .._models import BaseModel
8
+
9
+ __all__ = ["LocationSharingStartedWebhookEvent", "Data"]
10
+
11
+
12
+ class Data(BaseModel):
13
+ began_at: Optional[datetime] = None
14
+ """When location sharing started.
15
+
16
+ Always present: falls back to when the share was first observed if the device
17
+ reported no start time.
18
+ """
19
+
20
+ chat_id: Optional[str] = None
21
+ """The chat this share was first sent to.
22
+
23
+ Location sharing is per-contact rather than per-chat, so the location may also
24
+ be visible in other chats with the same handle; this identifies where the share
25
+ originated and does not change if the contact later shares into another chat.
26
+ Null when the originating chat could not be determined.
27
+ """
28
+
29
+ ends_at: Optional[datetime] = None
30
+ """When location sharing will expire. Null when sharing indefinitely."""
31
+
32
+ shared_by: str
33
+ """Phone number of the person sharing their location"""
34
+
35
+ shared_with: str
36
+ """Your phone number receiving the location"""
37
+
38
+
39
+ class LocationSharingStartedWebhookEvent(BaseModel):
40
+ api_version: str
41
+ """API version for the webhook payload format"""
42
+
43
+ created_at: datetime
44
+ """When the event was created"""
45
+
46
+ data: Data
47
+
48
+ event_id: str
49
+ """Unique identifier for this event (for deduplication)"""
50
+
51
+ event_type: Literal[
52
+ "location.sharing.started",
53
+ "message.sent",
54
+ "message.received",
55
+ "message.read",
56
+ "message.delivered",
57
+ "message.failed",
58
+ "message.edited",
59
+ "reaction.added",
60
+ "reaction.removed",
61
+ "poll.received",
62
+ "poll.failed",
63
+ "poll.sent",
64
+ "poll.delivered",
65
+ "poll.read",
66
+ "poll.updated",
67
+ "poll.vote.added",
68
+ "poll.vote.removed",
69
+ "poll.reaction.added",
70
+ "participant.added",
71
+ "participant.removed",
72
+ "chat.created",
73
+ "chat.group_name_updated",
74
+ "chat.group_icon_updated",
75
+ "chat.group_name_update_failed",
76
+ "chat.group_icon_update_failed",
77
+ "chat.background_updated",
78
+ "chat.background_update_failed",
79
+ "chat.typing_indicator.started",
80
+ "chat.typing_indicator.stopped",
81
+ "phone_number.status_updated",
82
+ "contact_card.received",
83
+ "call.initiated",
84
+ "call.ringing",
85
+ "call.answered",
86
+ "call.ended",
87
+ "call.failed",
88
+ "call.declined",
89
+ "call.no_answer",
90
+ "location.sharing.stopped",
91
+ "payment.succeeded",
92
+ "payment.canceled",
93
+ "payment.expired",
94
+ "payment.declined",
95
+ "payment.authorized",
96
+ "connection.created",
97
+ "connection.revoked",
98
+ ]
99
+
100
+ partner_id: str
101
+ """Partner identifier. Present on all webhooks for cross-referencing."""
102
+
103
+ trace_id: str
104
+ """Trace ID for debugging and correlation across systems."""
105
+
106
+ webhook_version: str
107
+ """
108
+ Date-based webhook payload version. Determined by the `?version=` query
109
+ parameter in your webhook subscription URL. If no version parameter is
110
+ specified, defaults based on subscription creation date.
111
+ """