pingram-python 1.0.37__py3-none-any.whl → 1.0.38__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.
pingram/__init__.py CHANGED
@@ -14,7 +14,7 @@
14
14
  """ # noqa: E501
15
15
 
16
16
 
17
- __version__ = "1.0.37"
17
+ __version__ = "1.0.38"
18
18
 
19
19
  # Define package exports
20
20
  __all__ = [
@@ -90,9 +90,9 @@ __all__ = [
90
90
  "CampaignWebhookResponse",
91
91
  "CancelSubscriptionRequest",
92
92
  "Chained",
93
- "ChangeEmailRequest",
94
93
  "ChangePhoneRequest",
95
94
  "ChannelsEnum",
95
+ "ConfirmChangeEmailRequest",
96
96
  "CreateAccountRequest",
97
97
  "CreateAccountRequestPlan",
98
98
  "CreateAccountResponse",
@@ -308,6 +308,7 @@ __all__ = [
308
308
  "SetDefaultTemplateRequest",
309
309
  "SlackConnectInviteResponse",
310
310
  "SlackInteractivityResponse",
311
+ "StartChangeEmailRequest",
311
312
  "SubNotification",
312
313
  "SubNotificationPUTRequest",
313
314
  "SuccessResponse",
@@ -438,9 +439,9 @@ from pingram.models.broadcast_response_audience import BroadcastResponseAudience
438
439
  from pingram.models.campaign_webhook_response import CampaignWebhookResponse as CampaignWebhookResponse
439
440
  from pingram.models.cancel_subscription_request import CancelSubscriptionRequest as CancelSubscriptionRequest
440
441
  from pingram.models.chained import Chained as Chained
441
- from pingram.models.change_email_request import ChangeEmailRequest as ChangeEmailRequest
442
442
  from pingram.models.change_phone_request import ChangePhoneRequest as ChangePhoneRequest
443
443
  from pingram.models.channels_enum import ChannelsEnum as ChannelsEnum
444
+ from pingram.models.confirm_change_email_request import ConfirmChangeEmailRequest as ConfirmChangeEmailRequest
444
445
  from pingram.models.create_account_request import CreateAccountRequest as CreateAccountRequest
445
446
  from pingram.models.create_account_request_plan import CreateAccountRequestPlan as CreateAccountRequestPlan
446
447
  from pingram.models.create_account_response import CreateAccountResponse as CreateAccountResponse
@@ -656,6 +657,7 @@ from pingram.models.sender_post_response import SenderPostResponse as SenderPost
656
657
  from pingram.models.set_default_template_request import SetDefaultTemplateRequest as SetDefaultTemplateRequest
657
658
  from pingram.models.slack_connect_invite_response import SlackConnectInviteResponse as SlackConnectInviteResponse
658
659
  from pingram.models.slack_interactivity_response import SlackInteractivityResponse as SlackInteractivityResponse
660
+ from pingram.models.start_change_email_request import StartChangeEmailRequest as StartChangeEmailRequest
659
661
  from pingram.models.sub_notification import SubNotification as SubNotification
660
662
  from pingram.models.sub_notification_put_request import SubNotificationPUTRequest as SubNotificationPUTRequest
661
663
  from pingram.models.success_response import SuccessResponse as SuccessResponse
@@ -59,7 +59,7 @@ class LibraryApi:
59
59
  _headers: Optional[Dict[StrictStr, Any]] = None,
60
60
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
61
61
  ) -> CreateLibraryResponse:
62
- """Create an upload slot in the account library. PUT the file to the returned uploadUrl with the same Content-Type, then use the returned url in emails and the editor.
62
+ """Create an upload slot in the account library. contentType must be image/png, image/jpeg, image/gif, or image/webp. PUT the file to the returned uploadUrl with that Content-Type, then use the returned url in emails and the editor.
63
63
 
64
64
 
65
65
  :param use_case: Library use-case (required)
@@ -134,7 +134,7 @@ class LibraryApi:
134
134
  _headers: Optional[Dict[StrictStr, Any]] = None,
135
135
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
136
136
  ) -> ApiResponse[CreateLibraryResponse]:
137
- """Create an upload slot in the account library. PUT the file to the returned uploadUrl with the same Content-Type, then use the returned url in emails and the editor.
137
+ """Create an upload slot in the account library. contentType must be image/png, image/jpeg, image/gif, or image/webp. PUT the file to the returned uploadUrl with that Content-Type, then use the returned url in emails and the editor.
138
138
 
139
139
 
140
140
  :param use_case: Library use-case (required)
@@ -209,7 +209,7 @@ class LibraryApi:
209
209
  _headers: Optional[Dict[StrictStr, Any]] = None,
210
210
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
211
211
  ) -> RESTResponseType:
212
- """Create an upload slot in the account library. PUT the file to the returned uploadUrl with the same Content-Type, then use the returned url in emails and the editor.
212
+ """Create an upload slot in the account library. contentType must be image/png, image/jpeg, image/gif, or image/webp. PUT the file to the returned uploadUrl with that Content-Type, then use the returned url in emails and the editor.
213
213
 
214
214
 
215
215
  :param use_case: Library use-case (required)
pingram/api/logs_api.py CHANGED
@@ -26,6 +26,7 @@ from pingram.models.logs_query_response import LogsQueryResponse
26
26
  from pingram.models.logs_query_result_response import LogsQueryResultResponse
27
27
  from pingram.models.logs_retention_response import LogsRetentionResponse
28
28
  from pingram.models.logs_tail_response import LogsTailResponse
29
+ from pingram.models.message_response import MessageResponse
29
30
 
30
31
  from pingram.api_client import ApiClient, RequestSerialized
31
32
  from pingram.api_response import ApiResponse
@@ -1153,6 +1154,282 @@ class LogsApi:
1153
1154
 
1154
1155
 
1155
1156
 
1157
+ @validate_call
1158
+ async def logs_retry_inbound(
1159
+ self,
1160
+ tracking_id: Annotated[StrictStr, Field(description="Tracking ID of the inbound email")],
1161
+ _request_timeout: Union[
1162
+ None,
1163
+ Annotated[StrictFloat, Field(gt=0)],
1164
+ Tuple[
1165
+ Annotated[StrictFloat, Field(gt=0)],
1166
+ Annotated[StrictFloat, Field(gt=0)]
1167
+ ]
1168
+ ] = None,
1169
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1170
+ _content_type: Optional[StrictStr] = None,
1171
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1172
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1173
+ ) -> MessageResponse:
1174
+ """Resend the EMAIL_INBOUND webhook for one inbound email. Uses the original tracking ID and does not count another email. Refused when the message is older than 30 days.
1175
+
1176
+
1177
+ :param tracking_id: Tracking ID of the inbound email (required)
1178
+ :type tracking_id: str
1179
+ :param _request_timeout: timeout setting for this request. If one
1180
+ number provided, it will be total request
1181
+ timeout. It can also be a pair (tuple) of
1182
+ (connection, read) timeouts.
1183
+ :type _request_timeout: int, tuple(int, int), optional
1184
+ :param _request_auth: set to override the auth_settings for an a single
1185
+ request; this effectively ignores the
1186
+ authentication in the spec for a single request.
1187
+ :type _request_auth: dict, optional
1188
+ :param _content_type: force content-type for the request.
1189
+ :type _content_type: str, Optional
1190
+ :param _headers: set to override the headers for a single
1191
+ request; this effectively ignores the headers
1192
+ in the spec for a single request.
1193
+ :type _headers: dict, optional
1194
+ :param _host_index: set to override the host_index for a single
1195
+ request; this effectively ignores the host_index
1196
+ in the spec for a single request.
1197
+ :type _host_index: int, optional
1198
+ :return: Returns the result object.
1199
+ """ # noqa: E501
1200
+
1201
+ _param = self._logs_retry_inbound_serialize(
1202
+ tracking_id=tracking_id,
1203
+ _request_auth=_request_auth,
1204
+ _content_type=_content_type,
1205
+ _headers=_headers,
1206
+ _host_index=_host_index
1207
+ )
1208
+
1209
+ _response_types_map: Dict[str, Optional[str]] = {
1210
+ '200': "MessageResponse",
1211
+ '400': "ApiErrorResponse",
1212
+ '401': None,
1213
+ '402': "ApiErrorResponse",
1214
+ '500': None,
1215
+ '502': "ApiErrorResponse",
1216
+ }
1217
+ response_data = await self.api_client.call_api(
1218
+ *_param,
1219
+ _request_timeout=_request_timeout
1220
+ )
1221
+ await response_data.read()
1222
+ return self.api_client.response_deserialize(
1223
+ response_data=response_data,
1224
+ response_types_map=_response_types_map,
1225
+ ).data
1226
+
1227
+
1228
+ @validate_call
1229
+ async def logs_retry_inbound_with_http_info(
1230
+ self,
1231
+ tracking_id: Annotated[StrictStr, Field(description="Tracking ID of the inbound email")],
1232
+ _request_timeout: Union[
1233
+ None,
1234
+ Annotated[StrictFloat, Field(gt=0)],
1235
+ Tuple[
1236
+ Annotated[StrictFloat, Field(gt=0)],
1237
+ Annotated[StrictFloat, Field(gt=0)]
1238
+ ]
1239
+ ] = None,
1240
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1241
+ _content_type: Optional[StrictStr] = None,
1242
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1243
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1244
+ ) -> ApiResponse[MessageResponse]:
1245
+ """Resend the EMAIL_INBOUND webhook for one inbound email. Uses the original tracking ID and does not count another email. Refused when the message is older than 30 days.
1246
+
1247
+
1248
+ :param tracking_id: Tracking ID of the inbound email (required)
1249
+ :type tracking_id: str
1250
+ :param _request_timeout: timeout setting for this request. If one
1251
+ number provided, it will be total request
1252
+ timeout. It can also be a pair (tuple) of
1253
+ (connection, read) timeouts.
1254
+ :type _request_timeout: int, tuple(int, int), optional
1255
+ :param _request_auth: set to override the auth_settings for an a single
1256
+ request; this effectively ignores the
1257
+ authentication in the spec for a single request.
1258
+ :type _request_auth: dict, optional
1259
+ :param _content_type: force content-type for the request.
1260
+ :type _content_type: str, Optional
1261
+ :param _headers: set to override the headers for a single
1262
+ request; this effectively ignores the headers
1263
+ in the spec for a single request.
1264
+ :type _headers: dict, optional
1265
+ :param _host_index: set to override the host_index for a single
1266
+ request; this effectively ignores the host_index
1267
+ in the spec for a single request.
1268
+ :type _host_index: int, optional
1269
+ :return: Returns the result object.
1270
+ """ # noqa: E501
1271
+
1272
+ _param = self._logs_retry_inbound_serialize(
1273
+ tracking_id=tracking_id,
1274
+ _request_auth=_request_auth,
1275
+ _content_type=_content_type,
1276
+ _headers=_headers,
1277
+ _host_index=_host_index
1278
+ )
1279
+
1280
+ _response_types_map: Dict[str, Optional[str]] = {
1281
+ '200': "MessageResponse",
1282
+ '400': "ApiErrorResponse",
1283
+ '401': None,
1284
+ '402': "ApiErrorResponse",
1285
+ '500': None,
1286
+ '502': "ApiErrorResponse",
1287
+ }
1288
+ response_data = await self.api_client.call_api(
1289
+ *_param,
1290
+ _request_timeout=_request_timeout
1291
+ )
1292
+ await response_data.read()
1293
+ return self.api_client.response_deserialize(
1294
+ response_data=response_data,
1295
+ response_types_map=_response_types_map,
1296
+ )
1297
+
1298
+
1299
+ @validate_call
1300
+ async def logs_retry_inbound_without_preload_content(
1301
+ self,
1302
+ tracking_id: Annotated[StrictStr, Field(description="Tracking ID of the inbound email")],
1303
+ _request_timeout: Union[
1304
+ None,
1305
+ Annotated[StrictFloat, Field(gt=0)],
1306
+ Tuple[
1307
+ Annotated[StrictFloat, Field(gt=0)],
1308
+ Annotated[StrictFloat, Field(gt=0)]
1309
+ ]
1310
+ ] = None,
1311
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1312
+ _content_type: Optional[StrictStr] = None,
1313
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1314
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1315
+ ) -> RESTResponseType:
1316
+ """Resend the EMAIL_INBOUND webhook for one inbound email. Uses the original tracking ID and does not count another email. Refused when the message is older than 30 days.
1317
+
1318
+
1319
+ :param tracking_id: Tracking ID of the inbound email (required)
1320
+ :type tracking_id: str
1321
+ :param _request_timeout: timeout setting for this request. If one
1322
+ number provided, it will be total request
1323
+ timeout. It can also be a pair (tuple) of
1324
+ (connection, read) timeouts.
1325
+ :type _request_timeout: int, tuple(int, int), optional
1326
+ :param _request_auth: set to override the auth_settings for an a single
1327
+ request; this effectively ignores the
1328
+ authentication in the spec for a single request.
1329
+ :type _request_auth: dict, optional
1330
+ :param _content_type: force content-type for the request.
1331
+ :type _content_type: str, Optional
1332
+ :param _headers: set to override the headers for a single
1333
+ request; this effectively ignores the headers
1334
+ in the spec for a single request.
1335
+ :type _headers: dict, optional
1336
+ :param _host_index: set to override the host_index for a single
1337
+ request; this effectively ignores the host_index
1338
+ in the spec for a single request.
1339
+ :type _host_index: int, optional
1340
+ :return: Returns the result object.
1341
+ """ # noqa: E501
1342
+
1343
+ _param = self._logs_retry_inbound_serialize(
1344
+ tracking_id=tracking_id,
1345
+ _request_auth=_request_auth,
1346
+ _content_type=_content_type,
1347
+ _headers=_headers,
1348
+ _host_index=_host_index
1349
+ )
1350
+
1351
+ _response_types_map: Dict[str, Optional[str]] = {
1352
+ '200': "MessageResponse",
1353
+ '400': "ApiErrorResponse",
1354
+ '401': None,
1355
+ '402': "ApiErrorResponse",
1356
+ '500': None,
1357
+ '502': "ApiErrorResponse",
1358
+ }
1359
+ response_data = await self.api_client.call_api(
1360
+ *_param,
1361
+ _request_timeout=_request_timeout
1362
+ )
1363
+ return response_data.response
1364
+
1365
+
1366
+ def _logs_retry_inbound_serialize(
1367
+ self,
1368
+ tracking_id,
1369
+ _request_auth,
1370
+ _content_type,
1371
+ _headers,
1372
+ _host_index,
1373
+ ) -> RequestSerialized:
1374
+
1375
+ _host = None
1376
+
1377
+ _collection_formats: Dict[str, str] = {
1378
+ }
1379
+
1380
+ _path_params: Dict[str, str] = {}
1381
+ _query_params: List[Tuple[str, str]] = []
1382
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1383
+ _form_params: List[Tuple[str, str]] = []
1384
+ _files: Dict[
1385
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1386
+ ] = {}
1387
+ _body_params: Optional[bytes] = None
1388
+
1389
+ # process the path parameters
1390
+ if tracking_id is not None:
1391
+ _path_params['trackingId'] = tracking_id
1392
+ # process the query parameters
1393
+ # process the header parameters
1394
+ # process the form parameters
1395
+ # process the body parameter
1396
+
1397
+
1398
+ # set the HTTP header `Accept`
1399
+ if 'Accept' not in _header_params:
1400
+ _header_params['Accept'] = self.api_client.select_header_accept(
1401
+ [
1402
+ 'application/json'
1403
+ ]
1404
+ )
1405
+
1406
+
1407
+ # authentication setting
1408
+ _auth_settings: List[str] = [
1409
+ 'endUserHashed',
1410
+ 'endUser',
1411
+ 'apiKey',
1412
+ 'clientCredentials'
1413
+ ]
1414
+
1415
+ return self.api_client.param_serialize(
1416
+ method='POST',
1417
+ resource_path='/logs/retry/{trackingId}',
1418
+ path_params=_path_params,
1419
+ query_params=_query_params,
1420
+ header_params=_header_params,
1421
+ body=_body_params,
1422
+ post_params=_form_params,
1423
+ files=_files,
1424
+ auth_settings=_auth_settings,
1425
+ collection_formats=_collection_formats,
1426
+ _host=_host,
1427
+ _request_auth=_request_auth
1428
+ )
1429
+
1430
+
1431
+
1432
+
1156
1433
  @validate_call
1157
1434
  async def logs_start_logs_query(
1158
1435
  self,
@@ -20,7 +20,6 @@ from pydantic import Field, StrictStr
20
20
  from typing_extensions import Annotated
21
21
  from pingram.models.accept_invite_request import AcceptInviteRequest
22
22
  from pingram.models.accept_invite_response import AcceptInviteResponse
23
- from pingram.models.change_email_request import ChangeEmailRequest
24
23
  from pingram.models.delete_account_request import DeleteAccountRequest
25
24
  from pingram.models.mfa_setup_request import MFASetupRequest
26
25
  from pingram.models.mfa_setup_response import MFASetupResponse
@@ -331,295 +330,6 @@ class ProfileApi:
331
330
 
332
331
 
333
332
 
334
- @validate_call
335
- async def profile_change_email(
336
- self,
337
- change_email_request: ChangeEmailRequest,
338
- _request_timeout: Union[
339
- None,
340
- Annotated[StrictFloat, Field(gt=0)],
341
- Tuple[
342
- Annotated[StrictFloat, Field(gt=0)],
343
- Annotated[StrictFloat, Field(gt=0)]
344
- ]
345
- ] = None,
346
- _request_auth: Optional[Dict[StrictStr, Any]] = None,
347
- _content_type: Optional[StrictStr] = None,
348
- _headers: Optional[Dict[StrictStr, Any]] = None,
349
- _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
350
- ) -> SuccessResponse:
351
- """Change the email address of the authenticated user
352
-
353
-
354
- :param change_email_request: (required)
355
- :type change_email_request: ChangeEmailRequest
356
- :param _request_timeout: timeout setting for this request. If one
357
- number provided, it will be total request
358
- timeout. It can also be a pair (tuple) of
359
- (connection, read) timeouts.
360
- :type _request_timeout: int, tuple(int, int), optional
361
- :param _request_auth: set to override the auth_settings for an a single
362
- request; this effectively ignores the
363
- authentication in the spec for a single request.
364
- :type _request_auth: dict, optional
365
- :param _content_type: force content-type for the request.
366
- :type _content_type: str, Optional
367
- :param _headers: set to override the headers for a single
368
- request; this effectively ignores the headers
369
- in the spec for a single request.
370
- :type _headers: dict, optional
371
- :param _host_index: set to override the host_index for a single
372
- request; this effectively ignores the host_index
373
- in the spec for a single request.
374
- :type _host_index: int, optional
375
- :return: Returns the result object.
376
- """ # noqa: E501
377
-
378
- _param = self._profile_change_email_serialize(
379
- change_email_request=change_email_request,
380
- _request_auth=_request_auth,
381
- _content_type=_content_type,
382
- _headers=_headers,
383
- _host_index=_host_index
384
- )
385
-
386
- _response_types_map: Dict[str, Optional[str]] = {
387
- '200': "SuccessResponse",
388
- '400': "ApiErrorResponse",
389
- '401': None,
390
- '402': "ApiErrorResponse",
391
- '500': None,
392
- '502': "ApiErrorResponse",
393
- }
394
- response_data = await self.api_client.call_api(
395
- *_param,
396
- _request_timeout=_request_timeout
397
- )
398
- await response_data.read()
399
- return self.api_client.response_deserialize(
400
- response_data=response_data,
401
- response_types_map=_response_types_map,
402
- ).data
403
-
404
-
405
- @validate_call
406
- async def profile_change_email_with_http_info(
407
- self,
408
- change_email_request: ChangeEmailRequest,
409
- _request_timeout: Union[
410
- None,
411
- Annotated[StrictFloat, Field(gt=0)],
412
- Tuple[
413
- Annotated[StrictFloat, Field(gt=0)],
414
- Annotated[StrictFloat, Field(gt=0)]
415
- ]
416
- ] = None,
417
- _request_auth: Optional[Dict[StrictStr, Any]] = None,
418
- _content_type: Optional[StrictStr] = None,
419
- _headers: Optional[Dict[StrictStr, Any]] = None,
420
- _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
421
- ) -> ApiResponse[SuccessResponse]:
422
- """Change the email address of the authenticated user
423
-
424
-
425
- :param change_email_request: (required)
426
- :type change_email_request: ChangeEmailRequest
427
- :param _request_timeout: timeout setting for this request. If one
428
- number provided, it will be total request
429
- timeout. It can also be a pair (tuple) of
430
- (connection, read) timeouts.
431
- :type _request_timeout: int, tuple(int, int), optional
432
- :param _request_auth: set to override the auth_settings for an a single
433
- request; this effectively ignores the
434
- authentication in the spec for a single request.
435
- :type _request_auth: dict, optional
436
- :param _content_type: force content-type for the request.
437
- :type _content_type: str, Optional
438
- :param _headers: set to override the headers for a single
439
- request; this effectively ignores the headers
440
- in the spec for a single request.
441
- :type _headers: dict, optional
442
- :param _host_index: set to override the host_index for a single
443
- request; this effectively ignores the host_index
444
- in the spec for a single request.
445
- :type _host_index: int, optional
446
- :return: Returns the result object.
447
- """ # noqa: E501
448
-
449
- _param = self._profile_change_email_serialize(
450
- change_email_request=change_email_request,
451
- _request_auth=_request_auth,
452
- _content_type=_content_type,
453
- _headers=_headers,
454
- _host_index=_host_index
455
- )
456
-
457
- _response_types_map: Dict[str, Optional[str]] = {
458
- '200': "SuccessResponse",
459
- '400': "ApiErrorResponse",
460
- '401': None,
461
- '402': "ApiErrorResponse",
462
- '500': None,
463
- '502': "ApiErrorResponse",
464
- }
465
- response_data = await self.api_client.call_api(
466
- *_param,
467
- _request_timeout=_request_timeout
468
- )
469
- await response_data.read()
470
- return self.api_client.response_deserialize(
471
- response_data=response_data,
472
- response_types_map=_response_types_map,
473
- )
474
-
475
-
476
- @validate_call
477
- async def profile_change_email_without_preload_content(
478
- self,
479
- change_email_request: ChangeEmailRequest,
480
- _request_timeout: Union[
481
- None,
482
- Annotated[StrictFloat, Field(gt=0)],
483
- Tuple[
484
- Annotated[StrictFloat, Field(gt=0)],
485
- Annotated[StrictFloat, Field(gt=0)]
486
- ]
487
- ] = None,
488
- _request_auth: Optional[Dict[StrictStr, Any]] = None,
489
- _content_type: Optional[StrictStr] = None,
490
- _headers: Optional[Dict[StrictStr, Any]] = None,
491
- _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
492
- ) -> RESTResponseType:
493
- """Change the email address of the authenticated user
494
-
495
-
496
- :param change_email_request: (required)
497
- :type change_email_request: ChangeEmailRequest
498
- :param _request_timeout: timeout setting for this request. If one
499
- number provided, it will be total request
500
- timeout. It can also be a pair (tuple) of
501
- (connection, read) timeouts.
502
- :type _request_timeout: int, tuple(int, int), optional
503
- :param _request_auth: set to override the auth_settings for an a single
504
- request; this effectively ignores the
505
- authentication in the spec for a single request.
506
- :type _request_auth: dict, optional
507
- :param _content_type: force content-type for the request.
508
- :type _content_type: str, Optional
509
- :param _headers: set to override the headers for a single
510
- request; this effectively ignores the headers
511
- in the spec for a single request.
512
- :type _headers: dict, optional
513
- :param _host_index: set to override the host_index for a single
514
- request; this effectively ignores the host_index
515
- in the spec for a single request.
516
- :type _host_index: int, optional
517
- :return: Returns the result object.
518
- """ # noqa: E501
519
-
520
- _param = self._profile_change_email_serialize(
521
- change_email_request=change_email_request,
522
- _request_auth=_request_auth,
523
- _content_type=_content_type,
524
- _headers=_headers,
525
- _host_index=_host_index
526
- )
527
-
528
- _response_types_map: Dict[str, Optional[str]] = {
529
- '200': "SuccessResponse",
530
- '400': "ApiErrorResponse",
531
- '401': None,
532
- '402': "ApiErrorResponse",
533
- '500': None,
534
- '502': "ApiErrorResponse",
535
- }
536
- response_data = await self.api_client.call_api(
537
- *_param,
538
- _request_timeout=_request_timeout
539
- )
540
- return response_data.response
541
-
542
-
543
- def _profile_change_email_serialize(
544
- self,
545
- change_email_request,
546
- _request_auth,
547
- _content_type,
548
- _headers,
549
- _host_index,
550
- ) -> RequestSerialized:
551
-
552
- _host = None
553
-
554
- _collection_formats: Dict[str, str] = {
555
- }
556
-
557
- _path_params: Dict[str, str] = {}
558
- _query_params: List[Tuple[str, str]] = []
559
- _header_params: Dict[str, Optional[str]] = _headers or {}
560
- _form_params: List[Tuple[str, str]] = []
561
- _files: Dict[
562
- str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
563
- ] = {}
564
- _body_params: Optional[bytes] = None
565
-
566
- # process the path parameters
567
- # process the query parameters
568
- # process the header parameters
569
- # process the form parameters
570
- # process the body parameter
571
- if change_email_request is not None:
572
- _body_params = change_email_request
573
-
574
-
575
- # set the HTTP header `Accept`
576
- if 'Accept' not in _header_params:
577
- _header_params['Accept'] = self.api_client.select_header_accept(
578
- [
579
- 'application/json'
580
- ]
581
- )
582
-
583
- # set the HTTP header `Content-Type`
584
- if _content_type:
585
- _header_params['Content-Type'] = _content_type
586
- else:
587
- _default_content_type = (
588
- self.api_client.select_header_content_type(
589
- [
590
- 'application/json'
591
- ]
592
- )
593
- )
594
- if _default_content_type is not None:
595
- _header_params['Content-Type'] = _default_content_type
596
-
597
- # authentication setting
598
- _auth_settings: List[str] = [
599
- 'endUserHashed',
600
- 'endUser',
601
- 'apiKey',
602
- 'clientCredentials'
603
- ]
604
-
605
- return self.api_client.param_serialize(
606
- method='POST',
607
- resource_path='/profile/change-email',
608
- path_params=_path_params,
609
- query_params=_query_params,
610
- header_params=_header_params,
611
- body=_body_params,
612
- post_params=_form_params,
613
- files=_files,
614
- auth_settings=_auth_settings,
615
- collection_formats=_collection_formats,
616
- _host=_host,
617
- _request_auth=_request_auth
618
- )
619
-
620
-
621
-
622
-
623
333
  @validate_call
624
334
  async def profile_delete_account(
625
335
  self,
@@ -57,7 +57,7 @@ class WebhooksApi:
57
57
  _headers: Optional[Dict[StrictStr, Any]] = None,
58
58
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
59
59
  ) -> WebhookEndpoint:
60
- """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be http or https and should return 2xx.
60
+ """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be a public HTTPS URL and should return 2xx.
61
61
 
62
62
 
63
63
  :param webhook_endpoint_upsert_request: (required)
@@ -128,7 +128,7 @@ class WebhooksApi:
128
128
  _headers: Optional[Dict[StrictStr, Any]] = None,
129
129
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
130
130
  ) -> ApiResponse[WebhookEndpoint]:
131
- """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be http or https and should return 2xx.
131
+ """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be a public HTTPS URL and should return 2xx.
132
132
 
133
133
 
134
134
  :param webhook_endpoint_upsert_request: (required)
@@ -199,7 +199,7 @@ class WebhooksApi:
199
199
  _headers: Optional[Dict[StrictStr, Any]] = None,
200
200
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
201
201
  ) -> RESTResponseType:
202
- """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be http or https and should return 2xx.
202
+ """Create a webhook endpoint. Pingram POSTs signed JSON to the URL when one of the subscribed events happens. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be a public HTTPS URL and should return 2xx.
203
203
 
204
204
 
205
205
  :param webhook_endpoint_upsert_request: (required)
@@ -884,7 +884,7 @@ class WebhooksApi:
884
884
  _headers: Optional[Dict[StrictStr, Any]] = None,
885
885
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
886
886
  ) -> WebhookEndpoint:
887
- """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be http or https.
887
+ """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be a public HTTPS URL.
888
888
 
889
889
 
890
890
  :param endpoint_id: Id of the webhook endpoint, from list or create. (required)
@@ -959,7 +959,7 @@ class WebhooksApi:
959
959
  _headers: Optional[Dict[StrictStr, Any]] = None,
960
960
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
961
961
  ) -> ApiResponse[WebhookEndpoint]:
962
- """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be http or https.
962
+ """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be a public HTTPS URL.
963
963
 
964
964
 
965
965
  :param endpoint_id: Id of the webhook endpoint, from list or create. (required)
@@ -1034,7 +1034,7 @@ class WebhooksApi:
1034
1034
  _headers: Optional[Dict[StrictStr, Any]] = None,
1035
1035
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1036
1036
  ) -> RESTResponseType:
1037
- """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be http or https.
1037
+ """Replace one webhook endpoint's URL and its full event subscription. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it. The URL must be a public HTTPS URL.
1038
1038
 
1039
1039
 
1040
1040
  :param endpoint_id: Id of the webhook endpoint, from list or create. (required)
pingram/api_client.py CHANGED
@@ -91,7 +91,7 @@ class ApiClient:
91
91
  self.default_headers[header_name] = header_value
92
92
  self.cookie = cookie
93
93
  # Set default User-Agent.
94
- self.user_agent = 'pingram-python/1.0.37'
94
+ self.user_agent = 'pingram-python/1.0.38'
95
95
  self.client_side_validation = configuration.client_side_validation
96
96
 
97
97
  async def __aenter__(self):
pingram/configuration.py CHANGED
@@ -551,7 +551,7 @@ conf = pingram.Configuration(
551
551
  "OS: {env}\n"\
552
552
  "Python Version: {pyversion}\n"\
553
553
  "Version of the API: 1.0.0\n"\
554
- "SDK Package Version: 1.0.37".\
554
+ "SDK Package Version: 1.0.38".\
555
555
  format(env=sys.platform, pyversion=sys.version)
556
556
 
557
557
  def get_host_settings(self) -> List[HostSetting]:
@@ -48,9 +48,9 @@ from pingram.models.broadcast_response_audience import BroadcastResponseAudience
48
48
  from pingram.models.campaign_webhook_response import CampaignWebhookResponse
49
49
  from pingram.models.cancel_subscription_request import CancelSubscriptionRequest
50
50
  from pingram.models.chained import Chained
51
- from pingram.models.change_email_request import ChangeEmailRequest
52
51
  from pingram.models.change_phone_request import ChangePhoneRequest
53
52
  from pingram.models.channels_enum import ChannelsEnum
53
+ from pingram.models.confirm_change_email_request import ConfirmChangeEmailRequest
54
54
  from pingram.models.create_account_request import CreateAccountRequest
55
55
  from pingram.models.create_account_request_plan import CreateAccountRequestPlan
56
56
  from pingram.models.create_account_response import CreateAccountResponse
@@ -266,6 +266,7 @@ from pingram.models.sender_post_response import SenderPostResponse
266
266
  from pingram.models.set_default_template_request import SetDefaultTemplateRequest
267
267
  from pingram.models.slack_connect_invite_response import SlackConnectInviteResponse
268
268
  from pingram.models.slack_interactivity_response import SlackInteractivityResponse
269
+ from pingram.models.start_change_email_request import StartChangeEmailRequest
269
270
  from pingram.models.sub_notification import SubNotification
270
271
  from pingram.models.sub_notification_put_request import SubNotificationPUTRequest
271
272
  from pingram.models.success_response import SuccessResponse
@@ -17,17 +17,17 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, Field, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, StrictStr
21
21
  from typing import Any, ClassVar, Dict, List
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
24
24
 
25
- class ChangeEmailRequest(BaseModel):
25
+ class ConfirmChangeEmailRequest(BaseModel):
26
26
  """
27
- ChangeEmailRequest
27
+ ConfirmChangeEmailRequest
28
28
  """ # noqa: E501
29
- new_email: StrictStr = Field(alias="newEmail")
30
- __properties: ClassVar[List[str]] = ["newEmail"]
29
+ code: StrictStr
30
+ __properties: ClassVar[List[str]] = ["code"]
31
31
 
32
32
  model_config = ConfigDict(
33
33
  populate_by_name=True,
@@ -47,7 +47,7 @@ class ChangeEmailRequest(BaseModel):
47
47
 
48
48
  @classmethod
49
49
  def from_json(cls, json_str: str) -> Optional[Self]:
50
- """Create an instance of ChangeEmailRequest from a JSON string"""
50
+ """Create an instance of ConfirmChangeEmailRequest from a JSON string"""
51
51
  return cls.from_dict(json.loads(json_str))
52
52
 
53
53
  def to_dict(self) -> Dict[str, Any]:
@@ -72,7 +72,7 @@ class ChangeEmailRequest(BaseModel):
72
72
 
73
73
  @classmethod
74
74
  def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
75
- """Create an instance of ChangeEmailRequest from a dict"""
75
+ """Create an instance of ConfirmChangeEmailRequest from a dict"""
76
76
  if obj is None:
77
77
  return None
78
78
 
@@ -80,7 +80,7 @@ class ChangeEmailRequest(BaseModel):
80
80
  return cls.model_validate(obj)
81
81
 
82
82
  _obj = cls.model_validate({
83
- "newEmail": obj.get("newEmail")
83
+ "code": obj.get("code")
84
84
  })
85
85
  return _obj
86
86
 
@@ -27,7 +27,7 @@ class CreateLibraryRequest(BaseModel):
27
27
  CreateLibraryRequest
28
28
  """ # noqa: E501
29
29
  filename: StrictStr = Field(description="Original filename, including extension (e.g. hero.png).")
30
- content_type: StrictStr = Field(description="MIME type of the file that will be uploaded to the returned URL.", alias="contentType")
30
+ content_type: StrictStr = Field(description="Image MIME type. One of image/png, image/jpeg, image/gif, or image/webp.", alias="contentType")
31
31
  __properties: ClassVar[List[str]] = ["filename", "contentType"]
32
32
 
33
33
  model_config = ConfigDict(
@@ -32,13 +32,13 @@ class GetLogsResponseMessagesInner(BaseModel):
32
32
  event_type: StrictStr = Field(alias="eventType")
33
33
  timestamp: StrictStr
34
34
  epoch_ms: Union[StrictFloat, StrictInt] = Field(alias="epochMs")
35
- inbox: Optional[StrictStr] = None
35
+ inbox: Optional[StrictStr] = Field(default=None, description="Address that received the mail. Same value as `matched.email` on the EMAIL_INBOUND webhook, including when that address was only in Cc or Bcc.")
36
36
  var_from: Optional[StrictStr] = Field(default=None, alias="from")
37
37
  from_name: Optional[StrictStr] = Field(default=None, alias="fromName")
38
38
  subject: Optional[StrictStr] = None
39
- to: Optional[List[StrictStr]] = None
40
- cc: Optional[List[StrictStr]] = None
41
- bcc: Optional[List[StrictStr]] = None
39
+ to: Optional[List[StrictStr]] = Field(default=None, description="Original To header addresses. Not the address that received the mail.")
40
+ cc: Optional[List[StrictStr]] = Field(default=None, description="Original Cc header addresses.")
41
+ bcc: Optional[List[StrictStr]] = Field(default=None, description="Bcc header addresses still on the delivered message. Usually omitted, because the Bcc header is removed before delivery.")
42
42
  reply_to: Optional[StrictStr] = Field(default=None, alias="replyTo")
43
43
  body_text: Optional[StrictStr] = Field(default=None, alias="bodyText")
44
44
  body_html: Optional[StrictStr] = Field(default=None, alias="bodyHtml")
@@ -17,7 +17,7 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
19
 
20
- from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr, field_validator
21
21
  from typing import Any, ClassVar, Dict, List, Optional, Union
22
22
  from typing import Optional, Set
23
23
  from typing_extensions import Self
@@ -26,11 +26,22 @@ class GetLogsResponseMessagesInnerAttachmentsInner(BaseModel):
26
26
  """
27
27
  GetLogsResponseMessagesInnerAttachmentsInner
28
28
  """ # noqa: E501
29
- filename: StrictStr
30
- content_type: StrictStr = Field(alias="contentType")
31
- size: Union[StrictFloat, StrictInt]
32
- content_id: Optional[StrictStr] = Field(default=None, alias="contentId")
33
- __properties: ClassVar[List[str]] = ["filename", "contentType", "size", "contentId"]
29
+ filename: StrictStr = Field(description="Original filename from the message.")
30
+ content_type: StrictStr = Field(description="MIME type of the file.", alias="contentType")
31
+ size: Union[StrictFloat, StrictInt] = Field(description="Size in bytes. This response does not include the file bytes.")
32
+ content_id: Optional[StrictStr] = Field(default=None, description="Content-ID with angle brackets removed, so it matches `cid:` references in `bodyHtml`. Omitted when the part has no Content-ID.", alias="contentId")
33
+ content_disposition: Optional[StrictStr] = Field(default=None, description="`inline` when the HTML body references this file; `attachment` when it is a separate file. Omitted when the message does not say which.", alias="contentDisposition")
34
+ __properties: ClassVar[List[str]] = ["filename", "contentType", "size", "contentId", "contentDisposition"]
35
+
36
+ @field_validator('content_disposition')
37
+ def content_disposition_validate_enum(cls, value):
38
+ """Validates the enum"""
39
+ if value is None:
40
+ return value
41
+
42
+ if value not in set(['inline', 'attachment']):
43
+ raise ValueError("must be one of enum values ('inline', 'attachment')")
44
+ return value
34
45
 
35
46
  model_config = ConfigDict(
36
47
  populate_by_name=True,
@@ -86,7 +97,8 @@ class GetLogsResponseMessagesInnerAttachmentsInner(BaseModel):
86
97
  "filename": obj.get("filename"),
87
98
  "contentType": obj.get("contentType"),
88
99
  "size": obj.get("size"),
89
- "contentId": obj.get("contentId")
100
+ "contentId": obj.get("contentId"),
101
+ "contentDisposition": obj.get("contentDisposition")
90
102
  })
91
103
  return _obj
92
104
 
@@ -79,25 +79,29 @@ class LogsGetResponseLogsInner(BaseModel):
79
79
  email_clicked_link: Optional[StrictStr] = None
80
80
  email_clicked_link_tags: Optional[StrictStr] = None
81
81
  email_clicked_webhook_res: Optional[StrictStr] = None
82
- email_inbound_at: Optional[StrictStr] = None
83
- email_inbound_from: Optional[StrictStr] = None
84
- email_inbound_from_name: Optional[StrictStr] = None
85
- email_inbound_to: Optional[StrictStr] = None
86
- email_inbound_cc: Optional[StrictStr] = None
87
- email_inbound_bcc: Optional[StrictStr] = None
88
- email_inbound_reply_to: Optional[StrictStr] = None
89
- email_inbound_inbox: Optional[StrictStr] = None
90
- email_inbound_subject: Optional[StrictStr] = None
91
- email_inbound_body_text: Optional[StrictStr] = None
92
- email_inbound_body_html: Optional[StrictStr] = None
93
- email_inbound_has_attachments: Optional[StrictBool] = None
94
- email_inbound_attachment_count: Optional[Union[StrictFloat, StrictInt]] = None
95
- email_inbound_message_id: Optional[StrictStr] = None
96
- email_inbound_in_reply_to: Optional[StrictStr] = None
97
- email_inbound_references: Optional[StrictStr] = None
98
- email_inbound_webhook_delivered: Optional[StrictBool] = None
99
- email_inbound_webhook_res: Optional[StrictStr] = None
100
- email_inbound_resolution_type: Optional[StrictStr] = None
82
+ email_inbound_at: Optional[StrictStr] = Field(default=None, description="When the message was accepted, ISO 8601. Log order and the 30-day resend window use this time.")
83
+ email_inbound_from: Optional[StrictStr] = Field(default=None, description="Sender email address.")
84
+ email_inbound_from_name: Optional[StrictStr] = Field(default=None, description="Sender display name, when the From header includes one.")
85
+ email_inbound_to: Optional[StrictStr] = Field(default=None, description="Comma-separated To header addresses. This is the header, not necessarily the Pingram inbox.")
86
+ email_inbound_cc: Optional[StrictStr] = Field(default=None, description="Comma-separated CC header addresses.")
87
+ email_inbound_bcc: Optional[StrictStr] = Field(default=None, description="Comma-separated BCC header addresses. Often empty because that header is stripped before delivery.")
88
+ email_inbound_reply_to: Optional[StrictStr] = Field(default=None, description="Reply-To header address.")
89
+ email_inbound_inbox: Optional[StrictStr] = Field(default=None, description="Address that received the mail. Same value as `matched.email` on the EMAIL_INBOUND webhook, including when that address was only in Cc or Bcc.")
90
+ email_inbound_to_name: Optional[StrictStr] = Field(default=None, description="Display name of `email_inbound_inbox` when the headers include one. Same value as `matched.name`. Omitted when that address has no display name.")
91
+ email_inbound_sent_at: Optional[StrictStr] = Field(default=None, description="Sender Date header, ISO 8601. Omitted when that header is missing or invalid.")
92
+ email_inbound_retry_key: Optional[StrictStr] = Field(default=None, description="Key used to resend this inbound email for 30 days.")
93
+ email_inbound_user_id: Optional[StrictStr] = Field(default=None, description="User id from the original notification when this mail is a reply to one.")
94
+ email_inbound_subject: Optional[StrictStr] = Field(default=None, description="Subject line.")
95
+ email_inbound_body_text: Optional[StrictStr] = Field(default=None, description="Plain-text body.")
96
+ email_inbound_body_html: Optional[StrictStr] = Field(default=None, description="HTML body. Inline images use `cid:` values that match attachment content IDs on the webhook payload.")
97
+ email_inbound_has_attachments: Optional[StrictBool] = Field(default=None, description="True when the message includes at least one attachment.")
98
+ email_inbound_attachment_count: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Number of attachments. File bytes are not stored on this log.")
99
+ email_inbound_message_id: Optional[StrictStr] = Field(default=None, description="Message-ID header. Use it to thread later replies.")
100
+ email_inbound_in_reply_to: Optional[StrictStr] = Field(default=None, description="In-Reply-To header: the Message-ID this mail replies to.")
101
+ email_inbound_references: Optional[StrictStr] = Field(default=None, description="References header: the chain of Message-IDs in the thread.")
102
+ email_inbound_webhook_delivered: Optional[StrictBool] = Field(default=None, description="True when an EMAIL_INBOUND webhook endpoint returned a 2xx response.")
103
+ email_inbound_webhook_res: Optional[StrictStr] = Field(default=None, description="JSON delivery result for each EMAIL_INBOUND endpoint.")
104
+ email_inbound_resolution_type: Optional[StrictStr] = Field(default=None, description="How the inbox was matched: `reply` for a reply to a sent notification, `builtin` for a Pingram inbox, or `custom` for a custom domain.")
101
105
  sms_inbound_at: Optional[StrictStr] = None
102
106
  sms_inbound_from: Optional[StrictStr] = None
103
107
  sms_inbound_to: Optional[StrictStr] = Field(default=None, description="Pingram number that received the inbound message.")
@@ -200,7 +204,7 @@ class LogsGetResponseLogsInner(BaseModel):
200
204
  schedule_updated_at: Optional[StrictStr] = None
201
205
  schedule_updated_to: Optional[StrictStr] = None
202
206
  schedule_deleted_at: Optional[StrictStr] = None
203
- __properties: ClassVar[List[str]] = ["received_at", "type", "envId", "clientId", "agent", "ip", "request", "test", "trackingId", "accountId", "failed_at", "failed_code", "failed_internal", "inapp_sent_at", "inapp_sent_after", "inapp_delivered_at", "inapp_delivered_after", "inapp_failed_at", "inapp_failed_code", "inapp_failed_internal", "mobile_push_failed_at", "mobile_push_failed_code", "mobile_push_failed_token", "mobile_push_failed_internal", "mobile_push_sent_at", "mobile_push_sent_after", "mobile_push_sent_token", "mobile_push_delivered_at", "mobile_push_delivered_after", "email_sent_at", "email_sent_message_id", "email_sent_after", "email_preview", "email_delivered_at", "email_delivered_recipients", "email_delivered_after", "email_delivered_webhook_res", "email_failed_at", "email_failed_code", "email_failed_recipient", "email_failed_diagnostic_code", "email_failed_internal", "email_failed_webhook_res", "email_opened_at", "email_opened_user_agent", "email_opened_ip", "email_opened_webhook_res", "email_clicked_at", "email_clicked_user_agent", "email_clicked_ip", "email_clicked_link", "email_clicked_link_tags", "email_clicked_webhook_res", "email_inbound_at", "email_inbound_from", "email_inbound_from_name", "email_inbound_to", "email_inbound_cc", "email_inbound_bcc", "email_inbound_reply_to", "email_inbound_inbox", "email_inbound_subject", "email_inbound_body_text", "email_inbound_body_html", "email_inbound_has_attachments", "email_inbound_attachment_count", "email_inbound_message_id", "email_inbound_in_reply_to", "email_inbound_references", "email_inbound_webhook_delivered", "email_inbound_webhook_res", "email_inbound_resolution_type", "sms_inbound_at", "sms_inbound_from", "sms_inbound_to", "sms_inbound_text", "sms_inbound_webhook_delivered", "sms_inbound_webhook_res", "sms_inbound_media", "sms_replied_at", "sms_replied_to", "sms_replied_text", "sms_replied_segments", "sms_replied_encoding", "sms_unsubscribe_at", "sms_unsubscribe_from", "sms_unsubscribe_keyword", "sms_unsubscribe_webhook_delivered", "sms_unsubscribe_webhook_res", "sms_subscribe_at", "sms_subscribe_from", "sms_subscribe_keyword", "sms_subscribe_webhook_delivered", "sms_subscribe_webhook_res", "web_push_sent_token", "web_push_sent_at", "web_push_sent_after", "web_push_delivered_at", "web_push_delivered_after", "web_push_delivered_token", "web_push_delivered_internal", "web_push_failed_at", "web_push_failed_token", "web_push_failed_code", "web_push_failed_internal", "processed_at", "ignored", "scheduled_for", "user_id", "user_email", "user_number", "email_routing", "email_routing_reason", "sms_routing", "sms_routing_reason", "web_push_routing", "web_push_routing_reason", "mobile_push_routing", "mobile_push_routing_reason", "call_routing", "call_routing_reason", "inapp_routing", "inapp_routing_reason", "slack_routing", "slack_routing_reason", "sms_preview", "call_preview", "web_push_preview", "mobile_push_preview", "slack_preview", "inapp_preview", "slack_sent_at", "slack_sent_after", "slack_delivered_at", "slack_delivered_after", "slack_delivered_internal", "slack_failed_at", "slack_failed_code", "slack_failed_internal", "call_sent_at", "call_sent_after", "call_sent_from", "call_delivered_at", "call_delivered_after", "call_delivered_code", "call_delivered_cost_internal", "call_delivered_cost", "call_failed_at", "call_failed_code", "call_failed_internal", "sms_failed_at", "sms_failed_code", "sms_failed_internal", "sms_sent_at", "sms_sent_after", "sms_sent_from", "sms_sent_carrier", "sms_sent_line_type", "sms_sent_encoding", "sms_sent_segments", "sms_sent_parts", "sms_sent_cost", "sms_sent_country", "sms_sent_messageId", "sms_sent_mms", "sms_carrier_cost_internal", "sms_carrier_fee_internal", "sms_rate_internal", "sms_delivered_at", "sms_delivered_after", "sms_delivered_cost_internal", "schedule_updated_at", "schedule_updated_to", "schedule_deleted_at"]
207
+ __properties: ClassVar[List[str]] = ["received_at", "type", "envId", "clientId", "agent", "ip", "request", "test", "trackingId", "accountId", "failed_at", "failed_code", "failed_internal", "inapp_sent_at", "inapp_sent_after", "inapp_delivered_at", "inapp_delivered_after", "inapp_failed_at", "inapp_failed_code", "inapp_failed_internal", "mobile_push_failed_at", "mobile_push_failed_code", "mobile_push_failed_token", "mobile_push_failed_internal", "mobile_push_sent_at", "mobile_push_sent_after", "mobile_push_sent_token", "mobile_push_delivered_at", "mobile_push_delivered_after", "email_sent_at", "email_sent_message_id", "email_sent_after", "email_preview", "email_delivered_at", "email_delivered_recipients", "email_delivered_after", "email_delivered_webhook_res", "email_failed_at", "email_failed_code", "email_failed_recipient", "email_failed_diagnostic_code", "email_failed_internal", "email_failed_webhook_res", "email_opened_at", "email_opened_user_agent", "email_opened_ip", "email_opened_webhook_res", "email_clicked_at", "email_clicked_user_agent", "email_clicked_ip", "email_clicked_link", "email_clicked_link_tags", "email_clicked_webhook_res", "email_inbound_at", "email_inbound_from", "email_inbound_from_name", "email_inbound_to", "email_inbound_cc", "email_inbound_bcc", "email_inbound_reply_to", "email_inbound_inbox", "email_inbound_to_name", "email_inbound_sent_at", "email_inbound_retry_key", "email_inbound_user_id", "email_inbound_subject", "email_inbound_body_text", "email_inbound_body_html", "email_inbound_has_attachments", "email_inbound_attachment_count", "email_inbound_message_id", "email_inbound_in_reply_to", "email_inbound_references", "email_inbound_webhook_delivered", "email_inbound_webhook_res", "email_inbound_resolution_type", "sms_inbound_at", "sms_inbound_from", "sms_inbound_to", "sms_inbound_text", "sms_inbound_webhook_delivered", "sms_inbound_webhook_res", "sms_inbound_media", "sms_replied_at", "sms_replied_to", "sms_replied_text", "sms_replied_segments", "sms_replied_encoding", "sms_unsubscribe_at", "sms_unsubscribe_from", "sms_unsubscribe_keyword", "sms_unsubscribe_webhook_delivered", "sms_unsubscribe_webhook_res", "sms_subscribe_at", "sms_subscribe_from", "sms_subscribe_keyword", "sms_subscribe_webhook_delivered", "sms_subscribe_webhook_res", "web_push_sent_token", "web_push_sent_at", "web_push_sent_after", "web_push_delivered_at", "web_push_delivered_after", "web_push_delivered_token", "web_push_delivered_internal", "web_push_failed_at", "web_push_failed_token", "web_push_failed_code", "web_push_failed_internal", "processed_at", "ignored", "scheduled_for", "user_id", "user_email", "user_number", "email_routing", "email_routing_reason", "sms_routing", "sms_routing_reason", "web_push_routing", "web_push_routing_reason", "mobile_push_routing", "mobile_push_routing_reason", "call_routing", "call_routing_reason", "inapp_routing", "inapp_routing_reason", "slack_routing", "slack_routing_reason", "sms_preview", "call_preview", "web_push_preview", "mobile_push_preview", "slack_preview", "inapp_preview", "slack_sent_at", "slack_sent_after", "slack_delivered_at", "slack_delivered_after", "slack_delivered_internal", "slack_failed_at", "slack_failed_code", "slack_failed_internal", "call_sent_at", "call_sent_after", "call_sent_from", "call_delivered_at", "call_delivered_after", "call_delivered_code", "call_delivered_cost_internal", "call_delivered_cost", "call_failed_at", "call_failed_code", "call_failed_internal", "sms_failed_at", "sms_failed_code", "sms_failed_internal", "sms_sent_at", "sms_sent_after", "sms_sent_from", "sms_sent_carrier", "sms_sent_line_type", "sms_sent_encoding", "sms_sent_segments", "sms_sent_parts", "sms_sent_cost", "sms_sent_country", "sms_sent_messageId", "sms_sent_mms", "sms_carrier_cost_internal", "sms_carrier_fee_internal", "sms_rate_internal", "sms_delivered_at", "sms_delivered_after", "sms_delivered_cost_internal", "schedule_updated_at", "schedule_updated_to", "schedule_deleted_at"]
204
208
 
205
209
  @field_validator('failed_code')
206
210
  def failed_code_validate_enum(cls, value):
@@ -564,6 +568,10 @@ class LogsGetResponseLogsInner(BaseModel):
564
568
  "email_inbound_bcc": obj.get("email_inbound_bcc"),
565
569
  "email_inbound_reply_to": obj.get("email_inbound_reply_to"),
566
570
  "email_inbound_inbox": obj.get("email_inbound_inbox"),
571
+ "email_inbound_to_name": obj.get("email_inbound_to_name"),
572
+ "email_inbound_sent_at": obj.get("email_inbound_sent_at"),
573
+ "email_inbound_retry_key": obj.get("email_inbound_retry_key"),
574
+ "email_inbound_user_id": obj.get("email_inbound_user_id"),
567
575
  "email_inbound_subject": obj.get("email_inbound_subject"),
568
576
  "email_inbound_body_text": obj.get("email_inbound_body_text"),
569
577
  "email_inbound_body_html": obj.get("email_inbound_body_html"),
@@ -0,0 +1,91 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Pingram
5
+
6
+ Internal API for notification delivery and management
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class StartChangeEmailRequest(BaseModel):
26
+ """
27
+ StartChangeEmailRequest
28
+ """ # noqa: E501
29
+ new_email: StrictStr = Field(alias="newEmail")
30
+ password: StrictStr = Field(description="Current account password. Required before a login-email change starts.")
31
+ mfa_code: Optional[StrictStr] = Field(default=None, description="TOTP code. Required when software-token MFA is enabled.", alias="mfaCode")
32
+ __properties: ClassVar[List[str]] = ["newEmail", "password", "mfaCode"]
33
+
34
+ model_config = ConfigDict(
35
+ populate_by_name=True,
36
+ validate_assignment=True,
37
+ protected_namespaces=(),
38
+ )
39
+
40
+
41
+ def to_str(self) -> str:
42
+ """Returns the string representation of the model using alias"""
43
+ return pprint.pformat(self.model_dump(by_alias=True))
44
+
45
+ def to_json(self) -> str:
46
+ """Returns the JSON representation of the model using alias"""
47
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
48
+ return json.dumps(self.to_dict())
49
+
50
+ @classmethod
51
+ def from_json(cls, json_str: str) -> Optional[Self]:
52
+ """Create an instance of StartChangeEmailRequest from a JSON string"""
53
+ return cls.from_dict(json.loads(json_str))
54
+
55
+ def to_dict(self) -> Dict[str, Any]:
56
+ """Return the dictionary representation of the model using alias.
57
+
58
+ This has the following differences from calling pydantic's
59
+ `self.model_dump(by_alias=True)`:
60
+
61
+ * `None` is only added to the output dict for nullable fields that
62
+ were set at model initialization. Other fields with value `None`
63
+ are ignored.
64
+ """
65
+ excluded_fields: Set[str] = set([
66
+ ])
67
+
68
+ _dict = self.model_dump(
69
+ by_alias=True,
70
+ exclude=excluded_fields,
71
+ exclude_none=True,
72
+ )
73
+ return _dict
74
+
75
+ @classmethod
76
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
77
+ """Create an instance of StartChangeEmailRequest from a dict"""
78
+ if obj is None:
79
+ return None
80
+
81
+ if not isinstance(obj, dict):
82
+ return cls.model_validate(obj)
83
+
84
+ _obj = cls.model_validate({
85
+ "newEmail": obj.get("newEmail"),
86
+ "password": obj.get("password"),
87
+ "mfaCode": obj.get("mfaCode")
88
+ })
89
+ return _obj
90
+
91
+
@@ -26,7 +26,7 @@ class WebhookEndpointUpsertRequest(BaseModel):
26
26
  """
27
27
  Request body for creating or updating an events webhook endpoint.
28
28
  """ # noqa: E501
29
- webhook: StrictStr = Field(description="Public http or https URL that accepts POST with a JSON event body. Return 2xx to acknowledge. Requests include X-Pingram-Id, X-Pingram-Signature (v1 HMAC-SHA256), and X-Pingram-Timestamp.")
29
+ webhook: StrictStr = Field(description="Public HTTPS URL that accepts POST with a JSON event body. Return 2xx to acknowledge. Private, loopback, and link-local addresses are rejected. Requests include X-Pingram-Id, X-Pingram-Signature (v1 HMAC-SHA256), and X-Pingram-Timestamp.")
30
30
  events: List[StrictStr] = Field(description="Full set of event types to deliver to this URL. Omitting an event on update unsubscribes it. Inbound SMS to the free shared number only works when that person has already received a text from this number. Inbound SMS to a dedicated number works normally.")
31
31
  __properties: ClassVar[List[str]] = ["webhook", "events"]
32
32
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pingram-python
3
- Version: 1.0.37
3
+ Version: 1.0.38
4
4
  Summary: Official Python SDK for Pingram - Send notifications via Email, SMS, Push, In-App, and more
5
5
  Author: Pingram
6
6
  License: MIT
@@ -1,8 +1,8 @@
1
- pingram/__init__.py,sha256=K2jUTwcoAm6RnFyVpIrnlcSXWxnjytXILytI0MS_CkQ,50491
2
- pingram/api_client.py,sha256=uP8Vpoyl6p2PxoE9gmV1ChJma43xIPjC1eX4EriqzrY,27792
1
+ pingram/__init__.py,sha256=madtC0oG5OhYW-k-QMzV_YWdcJyM7Gh8yzVwysKZ_j0,50656
2
+ pingram/api_client.py,sha256=VzyYEibIFV0pYkK7CpHzv62w9FleHNs1tkght7JDVkw,27792
3
3
  pingram/api_response.py,sha256=eMxw1mpmJcoGZ3gs9z6jM4oYoZ10Gjk333s9sKxGv7s,652
4
4
  pingram/client_wrapper.py,sha256=sreT63NgmWEWLUzdYQWZTN0PneHhYITsfPTSjthCjqw,15358
5
- pingram/configuration.py,sha256=nuumSYv2-P9KMSfUOw5AokMvuUSvXqdV_WWTAH_APw0,19466
5
+ pingram/configuration.py,sha256=jUP8ffj7fQp01o4R1dILyDE_d8xuLHqnMWK3-OilyX8,19466
6
6
  pingram/exceptions.py,sha256=0l6B9dlFRwmPx-sfytj3wC9rdGgVPJY3AQ39qHx3GS4,8483
7
7
  pingram/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  pingram/rest.py,sha256=soB0_p6OMFlXrz5pDmdf2nIZchqPua9hgtuj8A5Yea4,6426
@@ -21,11 +21,11 @@ pingram/api/environments_api.py,sha256=V7WMAxQZo_m02kbyC2-IZRUoki3WpNinqt4SHobCU
21
21
  pingram/api/health_api.py,sha256=0c0CcuVQ2VaATvYlhjiIuGNuCygErc4oZjQUIRGoO-k,10787
22
22
  pingram/api/insights_api.py,sha256=SJcLUrd9PyU5WmMjo-RQPTfqA2XiH0GiBHFXMeg2i-o,12387
23
23
  pingram/api/keys_api.py,sha256=sonPmnG5rfk80Gm2j-DQ_pdvbO3qMDPHwHjiO7UebTA,32790
24
- pingram/api/library_api.py,sha256=s_Mk7V2OgRtrAWArBudzgt0FGERiMA4MVFtYqvKXOR8,25860
25
- pingram/api/logs_api.py,sha256=BGNLMIdrh_D-DvRAmDGLgqfLX1GPKt2w0I_fdhFA768,66313
24
+ pingram/api/library_api.py,sha256=CboFtuoW2ZaLTa3AIvIYzfcdu-0Hzq6XtbnoPpYZpDg,26055
25
+ pingram/api/logs_api.py,sha256=t9vc3C_wvKVpU6S_0ksMUxagexWhFxn-UIxSQoqvdQY,77468
26
26
  pingram/api/members_api.py,sha256=mo5TGL3TQMMcbHo24abKozxac0KseswMQMGN_8tZvSY,70113
27
27
  pingram/api/numbers_api.py,sha256=2v0O4THsnhc0D1HV-JjPd1hufiUWbfIvSRW0TLB74QE,58330
28
- pingram/api/profile_api.py,sha256=JvWxOWYR35oXSZ4uOMR4UMxuG8qRxtM1KrRqYGpgN2I,77661
28
+ pingram/api/profile_api.py,sha256=e-x3zcGCTwuS42Yra2-wzUWIjHx-6FM_rvoTK3Neer8,66434
29
29
  pingram/api/registrations_api.py,sha256=xj9ZGY28RpSuaIGVPYvr_kjCfHv3ltNPW96pk1ssnXs,57220
30
30
  pingram/api/sender_api.py,sha256=LDst-NVk9N5kOKixZp_s2_S276KvmCaf-dHWKNCMiSY,35372
31
31
  pingram/api/sms_api.py,sha256=gQV3E0NcjIjgtG4mcP5mcF268sVAUzwY3YVRyZpxEYA,12283
@@ -35,8 +35,8 @@ pingram/api/types_api.py,sha256=AL7Hj6hLe-pWYiXRUGYnevVDfZeVJDi2V8x70uYgqfg,5639
35
35
  pingram/api/user_api.py,sha256=333C444u7EnCowDoIRY6bogaoqlTf_exvM76xeM7QP4,33489
36
36
  pingram/api/users_api.py,sha256=AERWQ8wGRve3TovcVBp9CamZOUV8lpjJb_P9HnsxV4g,37532
37
37
  pingram/api/voice_api.py,sha256=ML4Xbnn64f47nkM7_Bn2kwvcvng_T4Nv1uLg6Jhd3-Y,125242
38
- pingram/api/webhooks_api.py,sha256=Dbe_E7SGxZlopNdxKzuGnD8IQP43CcYLDgDTLFFGrfo,47833
39
- pingram/models/__init__.py,sha256=NjwIJxHTmMSmaOxU2hGdHYtEuSBjACGOQKuFN1XmQOg,26917
38
+ pingram/api/webhooks_api.py,sha256=U0CHXmPzK9W6U_ktArfZRHaArlhlUSyngeYXeg7NgCk,47863
39
+ pingram/models/__init__.py,sha256=JSITLkeXSW6oto0huBysdyWHi8diHOkG4GEm2-3cQmo,27010
40
40
  pingram/models/accept_invite_request.py,sha256=ZXIkBQFXWjD0g0Akfuz6CuWTWZ8AWpWXHfY8EMgo4XE,2443
41
41
  pingram/models/accept_invite_response.py,sha256=R-fqCEzKwX1XxJscgtPSU7MUCeKGmuBkzh8fha-9KEM,2869
42
42
  pingram/models/account_addresses_response.py,sha256=0nev-caxYCmHQHHTXSvpmrz6yYPx92UcB8Umzkt2RK8,3068
@@ -72,9 +72,9 @@ pingram/models/broadcast_response_audience.py,sha256=33Dzou7tVPbK-nyuN3aJ8w7es2Q
72
72
  pingram/models/campaign_webhook_response.py,sha256=gyQNeLXCSiYq-6dsaXwy_LEjPa1pwv00QbwRpB7P-YU,2489
73
73
  pingram/models/cancel_subscription_request.py,sha256=20D7UTpBQQ0tTZeRsndXyR9xsBvK_ae6VjHtsnY65gQ,2696
74
74
  pingram/models/chained.py,sha256=8popCOK-R43PUusrXv9K3l6IQ4XDo-6QLv8izjL1A0U,3827
75
- pingram/models/change_email_request.py,sha256=Go8lqBknowjhU9ORXbgEtgE1Zi_vucXx6Kp-HDC4Si4,2485
76
75
  pingram/models/change_phone_request.py,sha256=lYxKSwEtu-6LSTkFwSe823JoR72wEF6YLbDT_XQuoRw,2500
77
76
  pingram/models/channels_enum.py,sha256=h_ZOhc2M5OKhT6mfdHn53ULNn4eFud-C4NO2FpuVHWo,818
77
+ pingram/models/confirm_change_email_request.py,sha256=uUMvhYCdVITJPya5QQeoqSRtHldTaqzQJ8Cm21_Dtnc,2463
78
78
  pingram/models/create_account_request.py,sha256=y5SNInmj6ZqnqAv-NhIKCld9lrffqYry4v1mpryYt7Y,3220
79
79
  pingram/models/create_account_request_plan.py,sha256=RqELmToZvFKyAkBpkyFOzPPN_4KU8Zoa6aSSwpYim2M,3193
80
80
  pingram/models/create_account_response.py,sha256=ub9xzw97D7AoFgMrJmGUKv9sfDlYU5-AEF-MEkxBhtA,3967
@@ -82,7 +82,7 @@ pingram/models/create_address_request.py,sha256=yJePVB_5sqZYGB_q8yT_O5_-B8M2Pegk
82
82
  pingram/models/create_broadcast_request.py,sha256=dTx7lBR1xY7xbiId_mCj2OANL379h4JKN9PeN9lCXHU,4330
83
83
  pingram/models/create_key_request.py,sha256=VdtYzV06gx27l39UyFtQ4Bj5D1XaxvaxK6RPFEtEO-U,3285
84
84
  pingram/models/create_key_response.py,sha256=Ery7qLao-9IS6s3QHrYyc13kc-1quB6fDQ5_mkQ3riw,3714
85
- pingram/models/create_library_request.py,sha256=VsiM9b2ucWMDEjistoIjvolQaPTic0F0dW5eplItfj0,2748
85
+ pingram/models/create_library_request.py,sha256=919AJi8wQ7iwvZXq7alDn4bXVDrzXh1TnZO8EwDKGlM,2756
86
86
  pingram/models/create_library_response.py,sha256=79ZAqnWFY6bGrk9Y0NPwl8oPwcLdoBiNGuxQBw7Ty_g,3443
87
87
  pingram/models/create_personal_access_token_request.py,sha256=4-nTn1fL1pc3orqH7vsssT5C4G9Mv80vSIIBeUlIcJc,2774
88
88
  pingram/models/create_personal_access_token_response.py,sha256=_m0ewoRCefhkjvW8_bJ59RlsPRQl0XH6ZDniq9Qesnc,3356
@@ -120,8 +120,8 @@ pingram/models/get_inapp_notifications_response_notifications_inner_template_any
120
120
  pingram/models/get_keys_response.py,sha256=rRU2_r2GSsPjUPz1UpMxnU3gYiRWBRDZxrBcRogu1SY,3084
121
121
  pingram/models/get_keys_response_keys_inner.py,sha256=Qz5Q_hjqLjdtmQ2NIPsBU_6Ot65450Qe39CNxn_wBwo,4183
122
122
  pingram/models/get_logs_response.py,sha256=yw-MbS9oSphSfSEh49rEarAAu0yE7RrOSqQi__8rPGY,3150
123
- pingram/models/get_logs_response_messages_inner.py,sha256=xYGxyOvRcIUpV7QNPkGCsmxxU3QTwRqEIFW9nbHVNi4,6391
124
- pingram/models/get_logs_response_messages_inner_attachments_inner.py,sha256=ql-OcUfIVt84AtIdXmJdb4deLrVzf0siv5p4M3FfDYI,2948
123
+ pingram/models/get_logs_response_messages_inner.py,sha256=0Xn8WLFPas3TDWpeKylumIq8b_yUCIGc5HapoIA0jlM,6875
124
+ pingram/models/get_logs_response_messages_inner_attachments_inner.py,sha256=iB9DTim30vmOA88op-Q2SMhGkiMAAtyJ-gNaIZ2dUJ0,3968
125
125
  pingram/models/get_logs_response_messages_inner_media_inner.py,sha256=CV5LL4clLNwQ4KJIBKjtYdeRv-jNoC1avdW5gZvQmm4,2675
126
126
  pingram/models/get_members_response_inner.py,sha256=bwXtll4mIifY9BC_kzAQT63eKRkwSZ3RqxgUrUI1tcs,3757
127
127
  pingram/models/get_metrics_response_inner.py,sha256=2O5rpUGYHOD81H6hmxNpvXDKc2fOXyecLvN7B7I6RE0,5199
@@ -223,7 +223,7 @@ pingram/models/list_voice_calls_response_calls_inner.py,sha256=ncBMGwHrTayeLJV6w
223
223
  pingram/models/log_query_post_body.py,sha256=ti396ju2KidR5YJTVczSHbIWpgr8--4XODJGIz3pyvQ,4090
224
224
  pingram/models/logs_bulk_request.py,sha256=Gm7dbaWACc2MdKYYA-YhG3ZufTIkGSxdAdjVvItndDc,2511
225
225
  pingram/models/logs_get_response.py,sha256=AqWy0tdIKLgtSDA6dL6Yzv4sfFhv2co0JxjEsW4Sn9c,2962
226
- pingram/models/logs_get_response_logs_inner.py,sha256=_xAFY2Qyc2jusY-R61BbmDkUTog31Gfkh2JzKNnnbCU,42073
226
+ pingram/models/logs_get_response_logs_inner.py,sha256=OmVLA0zeVaD1clmenTglh96s9R5PAD-fI-ibgGxGmVk,44962
227
227
  pingram/models/logs_query_response.py,sha256=ym1yEiQUcc_1Y72Fqbqb2z9MmCUY2wB9Yk3fY_rQhlQ,2493
228
228
  pingram/models/logs_query_result_response.py,sha256=DUcg_wocJDbHJVv4P1uk0mXVstbTCnMGcXsyF9AcTO4,3259
229
229
  pingram/models/logs_retention_response.py,sha256=HnaIpS4TU4RYy_0VXpti5Ef8TxkIWxsdQKrSJCv56dY,2589
@@ -290,6 +290,7 @@ pingram/models/sender_post_response.py,sha256=CLUFGdzNVbJEY8Oh9Ut0DBhzeJgK62VN-L
290
290
  pingram/models/set_default_template_request.py,sha256=gY8rMuEUcJ6NKBx1yntIE1d3YgVF-q6qXNyEOJO__uk,2965
291
291
  pingram/models/slack_connect_invite_response.py,sha256=HLdU2UPCduNekQ2ttrHOi_CRI3gVOB9wWZaazmgM5zI,2645
292
292
  pingram/models/slack_interactivity_response.py,sha256=eNsfRl-0wRzZiDIVfOvaft_9hLLEBmk2_x_H0EOTyzk,2524
293
+ pingram/models/start_change_email_request.py,sha256=pJsVRMqbQelQU1PNdsaXBAA2Oom_E_vyfAdDu5cW2yY,2888
293
294
  pingram/models/sub_notification.py,sha256=mMMCA4x34DtNS7F1r8H1Zby9y32Ok77xrB-TgULRSxc,2839
294
295
  pingram/models/sub_notification_put_request.py,sha256=amZToL4DqVyBcGXFgm7CCARzXffTvEaVuJyGImTpDlY,2467
295
296
  pingram/models/success_response.py,sha256=eDmPsP27a51wmPvcTq7JDTnn-uQLXTPdmRRHyq2hLIQ,2437
@@ -335,14 +336,14 @@ pingram/models/voice_browser_call_response.py,sha256=Hi-6mtkCv1Rb6ILB6-hVbYhzG--
335
336
  pingram/models/voice_call_request.py,sha256=nO7Ci5yB_jqJrVkMBt5p59gLsYsVDT5fsZl0stuHCn8,3287
336
337
  pingram/models/voice_call_response.py,sha256=wxVY-uyUvw8uvGPRbQBLmCOE5RYOQl8c_zS6RPtFIQE,2788
337
338
  pingram/models/webhook_endpoint.py,sha256=_suPfjuHzFMdqTf_DN_s5Zfl8YzlVXLScm72FP1SKWw,4161
338
- pingram/models/webhook_endpoint_upsert_request.py,sha256=l8ERb7fioD5alBNlTf4rrLcew-C-kcOhqLgvQUDk3CY,4158
339
+ pingram/models/webhook_endpoint_upsert_request.py,sha256=LdtEE5LfFZSep7g38pOGS0TEFnAbZNaZ0naRdgTkZC0,4208
339
340
  pingram/models/webhook_endpoints_response.py,sha256=ukoMTHiFVi1h2lUsZKCzxhOcwZqZI8YxUSS5jJDxjM0,3187
340
341
  pingram/models/webhook_endpoints_response_endpoints_inner.py,sha256=CGjdTpATE7lCvuzMFZwdQs1ixhDoSk1U9k3C0DoqZ0g,4230
341
342
  pingram/models/webhook_event.py,sha256=Njpdjk6KdTvoXl-WYEOuQhFcuZcs3vPHCfYeoclo6aQ,7262
342
343
  pingram/models/webhook_event_usage_value.py,sha256=6oTIeL15GY-JTn_2x8304bz-9Av66OEVMH5ukHKFgjM,2770
343
344
  pingram/models/webhook_response.py,sha256=rwCh3OTCE3TK6tVEKOKVlq9w0b1fZ-fKKEoe9Tz0tIc,3233
344
- pingram_python-1.0.37.dist-info/licenses/LICENSE,sha256=jFcP99OXuZ-3f_86j4Q4OjmvvHNm7SG94ytcAhqvldk,1059
345
- pingram_python-1.0.37.dist-info/METADATA,sha256=pncqYuBgSC44gRdxy3sZkLm8-_TZWlNfwqKMaShHPM4,2268
346
- pingram_python-1.0.37.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
347
- pingram_python-1.0.37.dist-info/top_level.txt,sha256=6BmMatn4_wswGo1u11HkRU892yP2gG5dddsmmRhSjD8,8
348
- pingram_python-1.0.37.dist-info/RECORD,,
345
+ pingram_python-1.0.38.dist-info/licenses/LICENSE,sha256=jFcP99OXuZ-3f_86j4Q4OjmvvHNm7SG94ytcAhqvldk,1059
346
+ pingram_python-1.0.38.dist-info/METADATA,sha256=NdjC31aAnKnA8a9QNyEkfXHjCmki0EAHGtpdhIXSRrQ,2268
347
+ pingram_python-1.0.38.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
348
+ pingram_python-1.0.38.dist-info/top_level.txt,sha256=6BmMatn4_wswGo1u11HkRU892yP2gG5dddsmmRhSjD8,8
349
+ pingram_python-1.0.38.dist-info/RECORD,,