dub 0.29.3__py3-none-any.whl → 0.32.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.
Files changed (65) hide show
  1. dub/_version.py +3 -3
  2. dub/analytics.py +2 -2
  3. dub/commissions.py +4 -4
  4. dub/customers.py +10 -10
  5. dub/domains.py +12 -12
  6. dub/embed_tokens.py +2 -2
  7. dub/events.py +2 -2
  8. dub/folders.py +8 -8
  9. dub/httpclient.py +0 -1
  10. dub/links.py +20 -20
  11. dub/models/components/__init__.py +22 -10
  12. dub/models/components/clickevent.py +3 -3
  13. dub/models/components/commissioncreatedevent.py +9 -6
  14. dub/models/components/folderschema.py +6 -1
  15. dub/models/components/leadcreatedevent.py +128 -4
  16. dub/models/components/leadevent.py +3 -3
  17. dub/models/components/linkclickedevent.py +3 -3
  18. dub/models/components/linkschema.py +3 -3
  19. dub/models/components/{tagschema.py → linktagschema.py} +2 -2
  20. dub/models/components/linkwebhookevent.py +3 -3
  21. dub/models/components/partnerenrolledevent.py +45 -92
  22. dub/models/components/salecreatedevent.py +128 -4
  23. dub/models/components/saleevent.py +3 -3
  24. dub/models/components/workspaceschema.py +13 -0
  25. dub/models/errors/badrequest.py +1 -1
  26. dub/models/errors/conflict.py +1 -1
  27. dub/models/errors/duberror.py +1 -1
  28. dub/models/errors/forbidden.py +1 -1
  29. dub/models/errors/internalservererror.py +1 -1
  30. dub/models/errors/inviteexpired.py +1 -1
  31. dub/models/errors/no_response_error.py +1 -1
  32. dub/models/errors/notfound.py +1 -1
  33. dub/models/errors/ratelimitexceeded.py +1 -1
  34. dub/models/errors/responsevalidationerror.py +1 -1
  35. dub/models/errors/sdkerror.py +1 -1
  36. dub/models/errors/unauthorized.py +1 -1
  37. dub/models/errors/unprocessableentity.py +1 -1
  38. dub/models/operations/bulkcreatelinks.py +2 -2
  39. dub/models/operations/createcustomer.py +10 -3
  40. dub/models/operations/createfolder.py +8 -3
  41. dub/models/operations/createlink.py +2 -2
  42. dub/models/operations/createpartner.py +47 -94
  43. dub/models/operations/getcustomer.py +1 -1
  44. dub/models/operations/getcustomers.py +1 -1
  45. dub/models/operations/listcommissions.py +11 -2
  46. dub/models/operations/listevents.py +10 -0
  47. dub/models/operations/listpartners.py +66 -115
  48. dub/models/operations/retrieveanalytics.py +14 -1
  49. dub/models/operations/retrievelinks.py +5 -0
  50. dub/models/operations/tracklead.py +2 -2
  51. dub/models/operations/updatecustomer.py +10 -3
  52. dub/models/operations/updatefolder.py +8 -3
  53. dub/models/operations/updatelink.py +2 -2
  54. dub/models/operations/upsertlink.py +2 -2
  55. dub/partners.py +16 -16
  56. dub/qr_codes.py +2 -2
  57. dub/sdk.py +2 -2
  58. dub/tags.py +20 -20
  59. dub/track.py +4 -4
  60. dub/utils/annotations.py +32 -8
  61. dub/workspaces.py +4 -4
  62. {dub-0.29.3.dist-info → dub-0.32.0.dist-info}/METADATA +7 -4
  63. {dub-0.29.3.dist-info → dub-0.32.0.dist-info}/RECORD +65 -65
  64. {dub-0.29.3.dist-info → dub-0.32.0.dist-info}/WHEEL +1 -1
  65. {dub-0.29.3.dist-info → dub-0.32.0.dist-info/licenses}/LICENSE +0 -0
@@ -17,6 +17,8 @@ class CreateCustomerRequestBodyTypedDict(TypedDict):
17
17
  r"""Name of the customer in the client's app. If not provided, a random name will be generated."""
18
18
  avatar: NotRequired[Nullable[str]]
19
19
  r"""Avatar URL of the customer in the client's app."""
20
+ stripe_customer_id: NotRequired[Nullable[str]]
21
+ r"""The customer's Stripe customer ID. Useful for attribution recurring sale events to the partner who referred the customer."""
20
22
 
21
23
 
22
24
  class CreateCustomerRequestBody(BaseModel):
@@ -32,10 +34,15 @@ class CreateCustomerRequestBody(BaseModel):
32
34
  avatar: OptionalNullable[str] = UNSET
33
35
  r"""Avatar URL of the customer in the client's app."""
34
36
 
37
+ stripe_customer_id: Annotated[
38
+ OptionalNullable[str], pydantic.Field(alias="stripeCustomerId")
39
+ ] = UNSET
40
+ r"""The customer's Stripe customer ID. Useful for attribution recurring sale events to the partner who referred the customer."""
41
+
35
42
  @model_serializer(mode="wrap")
36
43
  def serialize_model(self, handler):
37
- optional_fields = ["email", "name", "avatar"]
38
- nullable_fields = ["email", "name", "avatar"]
44
+ optional_fields = ["email", "name", "avatar", "stripeCustomerId"]
45
+ nullable_fields = ["email", "name", "avatar", "stripeCustomerId"]
39
46
  null_default_fields = []
40
47
 
41
48
  serialized = handler(self)
@@ -223,9 +230,9 @@ class CreateCustomerDiscount(BaseModel):
223
230
  optional_fields = ["description", "partnersCount"]
224
231
  nullable_fields = [
225
232
  "maxDuration",
226
- "description",
227
233
  "couponId",
228
234
  "couponTestId",
235
+ "description",
229
236
  "partnersCount",
230
237
  ]
231
238
  null_default_fields = []
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from dub.types import BaseModel, Nullable, OptionalNullable, UNSET_SENTINEL
4
+ from dub.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
5
5
  from enum import Enum
6
6
  import pydantic
7
7
  from pydantic import model_serializer
@@ -18,6 +18,8 @@ class AccessLevel(str, Enum):
18
18
  class CreateFolderRequestBodyTypedDict(TypedDict):
19
19
  name: str
20
20
  r"""The name of the folder."""
21
+ description: NotRequired[Nullable[str]]
22
+ r"""The description of the folder."""
21
23
  access_level: NotRequired[Nullable[AccessLevel]]
22
24
  r"""The access level of the folder within the workspace."""
23
25
 
@@ -26,6 +28,9 @@ class CreateFolderRequestBody(BaseModel):
26
28
  name: str
27
29
  r"""The name of the folder."""
28
30
 
31
+ description: OptionalNullable[str] = UNSET
32
+ r"""The description of the folder."""
33
+
29
34
  access_level: Annotated[
30
35
  OptionalNullable[AccessLevel], pydantic.Field(alias="accessLevel")
31
36
  ] = None
@@ -33,8 +38,8 @@ class CreateFolderRequestBody(BaseModel):
33
38
 
34
39
  @model_serializer(mode="wrap")
35
40
  def serialize_model(self, handler):
36
- optional_fields = ["accessLevel"]
37
- nullable_fields = ["accessLevel"]
41
+ optional_fields = ["description", "accessLevel"]
42
+ nullable_fields = ["description", "accessLevel"]
38
43
  null_default_fields = ["accessLevel"]
39
44
 
40
45
  serialized = handler(self)
@@ -43,7 +43,7 @@ class CreateLinkRequestBodyTypedDict(TypedDict):
43
43
  url: str
44
44
  r"""The destination URL of the short link."""
45
45
  domain: NotRequired[str]
46
- r"""The domain of the short link. If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains)."""
46
+ r"""The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains)."""
47
47
  key: NotRequired[str]
48
48
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
49
49
  key_length: NotRequired[float]
@@ -127,7 +127,7 @@ class CreateLinkRequestBody(BaseModel):
127
127
  r"""The destination URL of the short link."""
128
128
 
129
129
  domain: Optional[str] = None
130
- r"""The domain of the short link. If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains)."""
130
+ r"""The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains)."""
131
131
 
132
132
  key: Optional[str] = None
133
133
  r"""The short link slug. If not provided, a random 7-character slug will be generated."""
@@ -401,6 +401,7 @@ class CreatePartnerStatus(str, Enum):
401
401
  REJECTED = "rejected"
402
402
  INVITED = "invited"
403
403
  DECLINED = "declined"
404
+ DEACTIVATED = "deactivated"
404
405
  BANNED = "banned"
405
406
  ARCHIVED = "archived"
406
407
 
@@ -420,6 +421,8 @@ class CreatePartnerLinkTypedDict(TypedDict):
420
421
  r"""The number of clicks on the short link."""
421
422
  leads: NotRequired[float]
422
423
  r"""The number of leads the short link has generated."""
424
+ conversions: NotRequired[float]
425
+ r"""The number of leads that converted to paying customers."""
423
426
  sales: NotRequired[float]
424
427
  r"""The total number of sales (includes recurring sales) generated by the short link."""
425
428
  sale_amount: NotRequired[float]
@@ -448,6 +451,9 @@ class CreatePartnerLink(BaseModel):
448
451
  leads: Optional[float] = 0
449
452
  r"""The number of leads the short link has generated."""
450
453
 
454
+ conversions: Optional[float] = 0
455
+ r"""The number of leads that converted to paying customers."""
456
+
451
457
  sales: Optional[float] = 0
452
458
  r"""The total number of sales (includes recurring sales) generated by the short link."""
453
459
 
@@ -467,12 +473,14 @@ class BannedReason(str, Enum):
467
473
 
468
474
 
469
475
  class CreatePartnerResponseBodyTypedDict(TypedDict):
470
- r"""The created partner"""
476
+ r"""The created or updated partner"""
471
477
 
472
478
  id: str
473
479
  r"""The partner's unique ID on Dub."""
474
480
  name: str
475
481
  r"""The partner's full legal name."""
482
+ company_name: Nullable[str]
483
+ r"""If the partner profile type is a company, this is the partner's legal company name."""
476
484
  email: Nullable[str]
477
485
  r"""The partner's email address. Should be a unique value across Dub."""
478
486
  image: Nullable[str]
@@ -501,7 +509,7 @@ class CreatePartnerResponseBodyTypedDict(TypedDict):
501
509
  group_id: NotRequired[Nullable[str]]
502
510
  r"""The partner's group ID on Dub."""
503
511
  total_commissions: NotRequired[float]
504
- r"""The total commissions paid to the partner for their referrals. Defaults to 0 if `includeExpandedFields` is false."""
512
+ r"""The total commissions paid to the partner for their referrals"""
505
513
  click_reward_id: NotRequired[Nullable[str]]
506
514
  lead_reward_id: NotRequired[Nullable[str]]
507
515
  sale_reward_id: NotRequired[Nullable[str]]
@@ -512,43 +520,34 @@ class CreatePartnerResponseBodyTypedDict(TypedDict):
512
520
  r"""If the partner was banned from the program, this is the date of the ban."""
513
521
  banned_reason: NotRequired[Nullable[BannedReason]]
514
522
  r"""If the partner was banned from the program, this is the reason for the ban."""
515
- clicks: NotRequired[float]
516
- r"""The total number of clicks on the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
517
- leads: NotRequired[float]
518
- r"""The total number of leads generated by the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
519
- conversions: NotRequired[float]
520
- r"""The total number of leads that converted to paying customers. Defaults to 0 if `includeExpandedFields` is false."""
521
- sales: NotRequired[float]
522
- r"""The total number of sales generated by the partner's links (includes recurring sales). Defaults to 0 if `includeExpandedFields` is false."""
523
- sale_amount: NotRequired[float]
524
- r"""The total amount of sales (in cents) generated by the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
523
+ total_clicks: NotRequired[float]
524
+ r"""The total number of clicks on the partner's links"""
525
+ total_leads: NotRequired[float]
526
+ r"""The total number of leads generated by the partner's links"""
527
+ total_conversions: NotRequired[float]
528
+ r"""The total number of leads that converted to paying customers"""
529
+ total_sales: NotRequired[float]
530
+ r"""The total number of sales generated by the partner's links (includes recurring sales)"""
531
+ total_sale_amount: NotRequired[float]
532
+ r"""The total amount of sales (in cents) generated by the partner's links"""
525
533
  net_revenue: NotRequired[float]
526
- r"""The total net revenue generated by the partner. Defaults to 0 if `includeExpandedFields` is false."""
534
+ r"""The total net revenue generated by the partner"""
527
535
  website: NotRequired[Nullable[str]]
528
536
  r"""The partner's website URL (including the https protocol)."""
529
- website_txt_record: NotRequired[Nullable[str]]
530
- website_verified_at: NotRequired[Nullable[str]]
531
537
  youtube: NotRequired[Nullable[str]]
532
538
  r"""The partner's YouTube channel username (e.g. `johndoe`)."""
533
- youtube_verified_at: NotRequired[Nullable[str]]
534
- youtube_subscriber_count: NotRequired[Nullable[float]]
535
- youtube_view_count: NotRequired[Nullable[float]]
536
539
  twitter: NotRequired[Nullable[str]]
537
540
  r"""The partner's Twitter username (e.g. `johndoe`)."""
538
- twitter_verified_at: NotRequired[Nullable[str]]
539
541
  linkedin: NotRequired[Nullable[str]]
540
542
  r"""The partner's LinkedIn username (e.g. `johndoe`)."""
541
- linkedin_verified_at: NotRequired[Nullable[str]]
542
543
  instagram: NotRequired[Nullable[str]]
543
544
  r"""The partner's Instagram username (e.g. `johndoe`)."""
544
- instagram_verified_at: NotRequired[Nullable[str]]
545
545
  tiktok: NotRequired[Nullable[str]]
546
546
  r"""The partner's TikTok username (e.g. `johndoe`)."""
547
- tiktok_verified_at: NotRequired[Nullable[str]]
548
547
 
549
548
 
550
549
  class CreatePartnerResponseBody(BaseModel):
551
- r"""The created partner"""
550
+ r"""The created or updated partner"""
552
551
 
553
552
  id: str
554
553
  r"""The partner's unique ID on Dub."""
@@ -556,6 +555,9 @@ class CreatePartnerResponseBody(BaseModel):
556
555
  name: str
557
556
  r"""The partner's full legal name."""
558
557
 
558
+ company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")]
559
+ r"""If the partner profile type is a company, this is the partner's legal company name."""
560
+
559
561
  email: Nullable[str]
560
562
  r"""The partner's email address. Should be a unique value across Dub."""
561
563
 
@@ -602,7 +604,7 @@ class CreatePartnerResponseBody(BaseModel):
602
604
  total_commissions: Annotated[
603
605
  Optional[float], pydantic.Field(alias="totalCommissions")
604
606
  ] = 0
605
- r"""The total commissions paid to the partner for their referrals. Defaults to 0 if `includeExpandedFields` is false."""
607
+ r"""The total commissions paid to the partner for their referrals"""
606
608
 
607
609
  click_reward_id: Annotated[
608
610
  OptionalNullable[str], pydantic.Field(alias="clickRewardId")
@@ -635,78 +637,46 @@ class CreatePartnerResponseBody(BaseModel):
635
637
  ] = UNSET
636
638
  r"""If the partner was banned from the program, this is the reason for the ban."""
637
639
 
638
- clicks: Optional[float] = 0
639
- r"""The total number of clicks on the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
640
+ total_clicks: Annotated[Optional[float], pydantic.Field(alias="totalClicks")] = 0
641
+ r"""The total number of clicks on the partner's links"""
640
642
 
641
- leads: Optional[float] = 0
642
- r"""The total number of leads generated by the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
643
+ total_leads: Annotated[Optional[float], pydantic.Field(alias="totalLeads")] = 0
644
+ r"""The total number of leads generated by the partner's links"""
643
645
 
644
- conversions: Optional[float] = 0
645
- r"""The total number of leads that converted to paying customers. Defaults to 0 if `includeExpandedFields` is false."""
646
+ total_conversions: Annotated[
647
+ Optional[float], pydantic.Field(alias="totalConversions")
648
+ ] = 0
649
+ r"""The total number of leads that converted to paying customers"""
646
650
 
647
- sales: Optional[float] = 0
648
- r"""The total number of sales generated by the partner's links (includes recurring sales). Defaults to 0 if `includeExpandedFields` is false."""
651
+ total_sales: Annotated[Optional[float], pydantic.Field(alias="totalSales")] = 0
652
+ r"""The total number of sales generated by the partner's links (includes recurring sales)"""
649
653
 
650
- sale_amount: Annotated[Optional[float], pydantic.Field(alias="saleAmount")] = 0
651
- r"""The total amount of sales (in cents) generated by the partner's links. Defaults to 0 if `includeExpandedFields` is false."""
654
+ total_sale_amount: Annotated[
655
+ Optional[float], pydantic.Field(alias="totalSaleAmount")
656
+ ] = 0
657
+ r"""The total amount of sales (in cents) generated by the partner's links"""
652
658
 
653
659
  net_revenue: Annotated[Optional[float], pydantic.Field(alias="netRevenue")] = 0
654
- r"""The total net revenue generated by the partner. Defaults to 0 if `includeExpandedFields` is false."""
660
+ r"""The total net revenue generated by the partner"""
655
661
 
656
662
  website: OptionalNullable[str] = UNSET
657
663
  r"""The partner's website URL (including the https protocol)."""
658
664
 
659
- website_txt_record: Annotated[
660
- OptionalNullable[str], pydantic.Field(alias="websiteTxtRecord")
661
- ] = UNSET
662
-
663
- website_verified_at: Annotated[
664
- OptionalNullable[str], pydantic.Field(alias="websiteVerifiedAt")
665
- ] = UNSET
666
-
667
665
  youtube: OptionalNullable[str] = UNSET
668
666
  r"""The partner's YouTube channel username (e.g. `johndoe`)."""
669
667
 
670
- youtube_verified_at: Annotated[
671
- OptionalNullable[str], pydantic.Field(alias="youtubeVerifiedAt")
672
- ] = UNSET
673
-
674
- youtube_subscriber_count: Annotated[
675
- OptionalNullable[float], pydantic.Field(alias="youtubeSubscriberCount")
676
- ] = UNSET
677
-
678
- youtube_view_count: Annotated[
679
- OptionalNullable[float], pydantic.Field(alias="youtubeViewCount")
680
- ] = UNSET
681
-
682
668
  twitter: OptionalNullable[str] = UNSET
683
669
  r"""The partner's Twitter username (e.g. `johndoe`)."""
684
670
 
685
- twitter_verified_at: Annotated[
686
- OptionalNullable[str], pydantic.Field(alias="twitterVerifiedAt")
687
- ] = UNSET
688
-
689
671
  linkedin: OptionalNullable[str] = UNSET
690
672
  r"""The partner's LinkedIn username (e.g. `johndoe`)."""
691
673
 
692
- linkedin_verified_at: Annotated[
693
- OptionalNullable[str], pydantic.Field(alias="linkedinVerifiedAt")
694
- ] = UNSET
695
-
696
674
  instagram: OptionalNullable[str] = UNSET
697
675
  r"""The partner's Instagram username (e.g. `johndoe`)."""
698
676
 
699
- instagram_verified_at: Annotated[
700
- OptionalNullable[str], pydantic.Field(alias="instagramVerifiedAt")
701
- ] = UNSET
702
-
703
677
  tiktok: OptionalNullable[str] = UNSET
704
678
  r"""The partner's TikTok username (e.g. `johndoe`)."""
705
679
 
706
- tiktok_verified_at: Annotated[
707
- OptionalNullable[str], pydantic.Field(alias="tiktokVerifiedAt")
708
- ] = UNSET
709
-
710
680
  @model_serializer(mode="wrap")
711
681
  def serialize_model(self, handler):
712
682
  optional_fields = [
@@ -720,29 +690,21 @@ class CreatePartnerResponseBody(BaseModel):
720
690
  "applicationId",
721
691
  "bannedAt",
722
692
  "bannedReason",
723
- "clicks",
724
- "leads",
725
- "conversions",
726
- "sales",
727
- "saleAmount",
693
+ "totalClicks",
694
+ "totalLeads",
695
+ "totalConversions",
696
+ "totalSales",
697
+ "totalSaleAmount",
728
698
  "netRevenue",
729
699
  "website",
730
- "websiteTxtRecord",
731
- "websiteVerifiedAt",
732
700
  "youtube",
733
- "youtubeVerifiedAt",
734
- "youtubeSubscriberCount",
735
- "youtubeViewCount",
736
701
  "twitter",
737
- "twitterVerifiedAt",
738
702
  "linkedin",
739
- "linkedinVerifiedAt",
740
703
  "instagram",
741
- "instagramVerifiedAt",
742
704
  "tiktok",
743
- "tiktokVerifiedAt",
744
705
  ]
745
706
  nullable_fields = [
707
+ "companyName",
746
708
  "email",
747
709
  "image",
748
710
  "description",
@@ -761,20 +723,11 @@ class CreatePartnerResponseBody(BaseModel):
761
723
  "bannedAt",
762
724
  "bannedReason",
763
725
  "website",
764
- "websiteTxtRecord",
765
- "websiteVerifiedAt",
766
726
  "youtube",
767
- "youtubeVerifiedAt",
768
- "youtubeSubscriberCount",
769
- "youtubeViewCount",
770
727
  "twitter",
771
- "twitterVerifiedAt",
772
728
  "linkedin",
773
- "linkedinVerifiedAt",
774
729
  "instagram",
775
- "instagramVerifiedAt",
776
730
  "tiktok",
777
- "tiktokVerifiedAt",
778
731
  ]
779
732
  null_default_fields = []
780
733
 
@@ -191,9 +191,9 @@ class GetCustomerDiscount(BaseModel):
191
191
  optional_fields = ["description", "partnersCount"]
192
192
  nullable_fields = [
193
193
  "maxDuration",
194
- "description",
195
194
  "couponId",
196
195
  "couponTestId",
196
+ "description",
197
197
  "partnersCount",
198
198
  ]
199
199
  null_default_fields = []
@@ -275,9 +275,9 @@ class Discount(BaseModel):
275
275
  optional_fields = ["description", "partnersCount"]
276
276
  nullable_fields = [
277
277
  "maxDuration",
278
- "description",
279
278
  "couponId",
280
279
  "couponTestId",
280
+ "description",
281
281
  "partnersCount",
282
282
  ]
283
283
  null_default_fields = []
@@ -64,7 +64,9 @@ class ListCommissionsRequestTypedDict(TypedDict):
64
64
  payout_id: NotRequired[str]
65
65
  r"""Filter the list of commissions by the associated payout."""
66
66
  partner_id: NotRequired[str]
67
- r"""Filter the list of commissions by the associated partner."""
67
+ r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`."""
68
+ tenant_id: NotRequired[str]
69
+ r"""Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database)."""
68
70
  group_id: NotRequired[str]
69
71
  r"""Filter the list of commissions by the associated partner group."""
70
72
  invoice_id: NotRequired[str]
@@ -112,7 +114,14 @@ class ListCommissionsRequest(BaseModel):
112
114
  pydantic.Field(alias="partnerId"),
113
115
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
114
116
  ] = None
115
- r"""Filter the list of commissions by the associated partner."""
117
+ r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`."""
118
+
119
+ tenant_id: Annotated[
120
+ Optional[str],
121
+ pydantic.Field(alias="tenantId"),
122
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
123
+ ] = None
124
+ r"""Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database)."""
116
125
 
117
126
  group_id: Annotated[
118
127
  Optional[str],
@@ -168,6 +168,8 @@ class ListEventsRequestTypedDict(TypedDict):
168
168
  r"""The UTM term of the short link."""
169
169
  utm_content: NotRequired[Nullable[str]]
170
170
  r"""The UTM content of the short link."""
171
+ ref: NotRequired[Nullable[str]]
172
+ r"""The ref of the short link."""
171
173
  page: NotRequired[float]
172
174
  limit: NotRequired[float]
173
175
  sort_order: NotRequired[QueryParamSortOrder]
@@ -406,6 +408,12 @@ class ListEventsRequest(BaseModel):
406
408
  ] = UNSET
407
409
  r"""The UTM content of the short link."""
408
410
 
411
+ ref: Annotated[
412
+ OptionalNullable[str],
413
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
414
+ ] = UNSET
415
+ r"""The ref of the short link."""
416
+
409
417
  page: Annotated[
410
418
  Optional[float],
411
419
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
@@ -475,6 +483,7 @@ class ListEventsRequest(BaseModel):
475
483
  "utm_campaign",
476
484
  "utm_term",
477
485
  "utm_content",
486
+ "ref",
478
487
  "page",
479
488
  "limit",
480
489
  "sortOrder",
@@ -487,6 +496,7 @@ class ListEventsRequest(BaseModel):
487
496
  "utm_campaign",
488
497
  "utm_term",
489
498
  "utm_content",
499
+ "ref",
490
500
  ]
491
501
  null_default_fields = []
492
502