agentref 1.0.3__tar.gz → 2.0.0__tar.gz
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.
- {agentref-1.0.3 → agentref-2.0.0}/CHANGELOG.md +5 -0
- {agentref-1.0.3 → agentref-2.0.0}/PKG-INFO +1 -1
- {agentref-1.0.3 → agentref-2.0.0}/agentref/client.py +9 -1
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/__init__.py +6 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/affiliates.py +27 -5
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/merchant.py +12 -0
- agentref-2.0.0/agentref/resources/notifications.py +62 -0
- agentref-2.0.0/agentref/resources/payout_info.py +94 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/programs.py +26 -6
- {agentref-1.0.3 → agentref-2.0.0}/agentref/types/__init__.py +8 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/types/models.py +111 -18
- {agentref-1.0.3 → agentref-2.0.0}/pyproject.toml +1 -1
- {agentref-1.0.3 → agentref-2.0.0}/tests/test_async.py +22 -6
- {agentref-1.0.3 → agentref-2.0.0}/tests/test_errors.py +53 -3
- agentref-2.0.0/tests/test_programs.py +384 -0
- agentref-1.0.3/tests/test_programs.py +0 -215
- {agentref-1.0.3 → agentref-2.0.0}/.github/workflows/ci.yml +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/.github/workflows/publish.yml +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/.gitignore +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/README.md +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/__init__.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/_http.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/errors.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/billing.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/conversions.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/flags.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/agentref/resources/payouts.py +0 -0
- {agentref-1.0.3 → agentref-2.0.0}/tests/test_http.py +0 -0
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.0.4
|
|
4
|
+
|
|
5
|
+
- **Fix:** `payout_info.update()` now sends `PATCH` instead of `PUT` to match the API contract.
|
|
6
|
+
- Added optional `include` parameter to `affiliates.get(id, include='stats')` for fetching aggregated stats.
|
|
7
|
+
|
|
3
8
|
## 1.0.3
|
|
4
9
|
|
|
5
10
|
- Added `search`, `sort_by`, `sort_order`, `status` parameters to `affiliates.list()`.
|
|
@@ -10,12 +10,16 @@ from .resources import (
|
|
|
10
10
|
AsyncConversionsResource,
|
|
11
11
|
AsyncFlagsResource,
|
|
12
12
|
AsyncMerchantResource,
|
|
13
|
+
AsyncNotificationsResource,
|
|
14
|
+
AsyncPayoutInfoResource,
|
|
13
15
|
AsyncPayoutsResource,
|
|
14
16
|
AsyncProgramsResource,
|
|
15
17
|
BillingResource,
|
|
16
18
|
ConversionsResource,
|
|
17
19
|
FlagsResource,
|
|
18
20
|
MerchantResource,
|
|
21
|
+
NotificationsResource,
|
|
22
|
+
PayoutInfoResource,
|
|
19
23
|
PayoutsResource,
|
|
20
24
|
ProgramsResource,
|
|
21
25
|
)
|
|
@@ -44,13 +48,15 @@ class AgentRef:
|
|
|
44
48
|
self.flags = FlagsResource(self._http)
|
|
45
49
|
self.billing = BillingResource(self._http)
|
|
46
50
|
self.merchant = MerchantResource(self._http)
|
|
51
|
+
self.notifications = NotificationsResource(self._http)
|
|
52
|
+
self.payout_info = PayoutInfoResource(self._http)
|
|
47
53
|
|
|
48
54
|
def close(self) -> None:
|
|
49
55
|
self._http.close()
|
|
50
56
|
|
|
51
57
|
|
|
52
58
|
class AsyncAgentRef:
|
|
53
|
-
"""Async variant
|
|
59
|
+
"""Async variant -- use as async context manager for connection pooling."""
|
|
54
60
|
|
|
55
61
|
def __init__(
|
|
56
62
|
self,
|
|
@@ -74,6 +80,8 @@ class AsyncAgentRef:
|
|
|
74
80
|
self.flags = AsyncFlagsResource(self._http)
|
|
75
81
|
self.billing = AsyncBillingResource(self._http)
|
|
76
82
|
self.merchant = AsyncMerchantResource(self._http)
|
|
83
|
+
self.notifications = AsyncNotificationsResource(self._http)
|
|
84
|
+
self.payout_info = AsyncPayoutInfoResource(self._http)
|
|
77
85
|
|
|
78
86
|
async def __aenter__(self) -> "AsyncAgentRef":
|
|
79
87
|
await self._http.__aenter__()
|
|
@@ -3,6 +3,8 @@ from .billing import AsyncBillingResource, BillingResource
|
|
|
3
3
|
from .conversions import AsyncConversionsResource, ConversionsResource
|
|
4
4
|
from .flags import AsyncFlagsResource, FlagsResource
|
|
5
5
|
from .merchant import AsyncMerchantResource, MerchantResource
|
|
6
|
+
from .notifications import AsyncNotificationsResource, NotificationsResource
|
|
7
|
+
from .payout_info import AsyncPayoutInfoResource, PayoutInfoResource
|
|
6
8
|
from .payouts import AsyncPayoutsResource, PayoutsResource
|
|
7
9
|
from .programs import AsyncProgramsResource, ProgramsResource
|
|
8
10
|
|
|
@@ -14,6 +16,8 @@ __all__ = [
|
|
|
14
16
|
"FlagsResource",
|
|
15
17
|
"BillingResource",
|
|
16
18
|
"MerchantResource",
|
|
19
|
+
"NotificationsResource",
|
|
20
|
+
"PayoutInfoResource",
|
|
17
21
|
"AsyncProgramsResource",
|
|
18
22
|
"AsyncAffiliatesResource",
|
|
19
23
|
"AsyncConversionsResource",
|
|
@@ -21,4 +25,6 @@ __all__ = [
|
|
|
21
25
|
"AsyncFlagsResource",
|
|
22
26
|
"AsyncBillingResource",
|
|
23
27
|
"AsyncMerchantResource",
|
|
28
|
+
"AsyncNotificationsResource",
|
|
29
|
+
"AsyncPayoutInfoResource",
|
|
24
30
|
]
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Literal, Optional
|
|
4
4
|
|
|
5
5
|
from .._http import AsyncHttpClient, SyncHttpClient
|
|
6
6
|
from ..types.models import Affiliate, PaginatedResponse
|
|
7
7
|
|
|
8
|
+
_SORT_BY = Literal["createdAt", "totalClicks", "totalRevenue", "name"]
|
|
9
|
+
_SORT_ORDER = Literal["asc", "desc"]
|
|
10
|
+
_STATUS = Literal["approved", "pending", "blocked"]
|
|
11
|
+
|
|
8
12
|
|
|
9
13
|
class AffiliatesResource:
|
|
10
14
|
def __init__(self, http: SyncHttpClient) -> None:
|
|
@@ -15,6 +19,10 @@ class AffiliatesResource:
|
|
|
15
19
|
*,
|
|
16
20
|
program_id: Optional[str] = None,
|
|
17
21
|
include_blocked: Optional[bool] = None,
|
|
22
|
+
search: Optional[str] = None,
|
|
23
|
+
sort_by: Optional[_SORT_BY] = None,
|
|
24
|
+
sort_order: Optional[_SORT_ORDER] = None,
|
|
25
|
+
status: Optional[_STATUS] = None,
|
|
18
26
|
cursor: Optional[str] = None,
|
|
19
27
|
limit: Optional[int] = None,
|
|
20
28
|
page: Optional[int] = None,
|
|
@@ -27,6 +35,10 @@ class AffiliatesResource:
|
|
|
27
35
|
params={
|
|
28
36
|
"programId": program_id,
|
|
29
37
|
"includeBlocked": include_blocked,
|
|
38
|
+
"search": search,
|
|
39
|
+
"sortBy": sort_by,
|
|
40
|
+
"sortOrder": sort_order,
|
|
41
|
+
"status": status,
|
|
30
42
|
"cursor": cursor,
|
|
31
43
|
"limit": limit,
|
|
32
44
|
"page": page,
|
|
@@ -36,8 +48,9 @@ class AffiliatesResource:
|
|
|
36
48
|
)
|
|
37
49
|
return PaginatedResponse[Affiliate].model_validate(envelope)
|
|
38
50
|
|
|
39
|
-
def get(self, id: str) -> Affiliate:
|
|
40
|
-
|
|
51
|
+
def get(self, id: str, *, include: Optional[str] = None) -> Affiliate:
|
|
52
|
+
params = {"include": include} if include else None
|
|
53
|
+
envelope = self._http.request("GET", f"/affiliates/{id}", params=params)
|
|
41
54
|
return Affiliate.model_validate(envelope["data"])
|
|
42
55
|
|
|
43
56
|
def approve(self, id: str, *, idempotency_key: Optional[str] = None) -> Affiliate:
|
|
@@ -73,6 +86,10 @@ class AsyncAffiliatesResource:
|
|
|
73
86
|
*,
|
|
74
87
|
program_id: Optional[str] = None,
|
|
75
88
|
include_blocked: Optional[bool] = None,
|
|
89
|
+
search: Optional[str] = None,
|
|
90
|
+
sort_by: Optional[_SORT_BY] = None,
|
|
91
|
+
sort_order: Optional[_SORT_ORDER] = None,
|
|
92
|
+
status: Optional[_STATUS] = None,
|
|
76
93
|
cursor: Optional[str] = None,
|
|
77
94
|
limit: Optional[int] = None,
|
|
78
95
|
page: Optional[int] = None,
|
|
@@ -85,6 +102,10 @@ class AsyncAffiliatesResource:
|
|
|
85
102
|
params={
|
|
86
103
|
"programId": program_id,
|
|
87
104
|
"includeBlocked": include_blocked,
|
|
105
|
+
"search": search,
|
|
106
|
+
"sortBy": sort_by,
|
|
107
|
+
"sortOrder": sort_order,
|
|
108
|
+
"status": status,
|
|
88
109
|
"cursor": cursor,
|
|
89
110
|
"limit": limit,
|
|
90
111
|
"page": page,
|
|
@@ -94,8 +115,9 @@ class AsyncAffiliatesResource:
|
|
|
94
115
|
)
|
|
95
116
|
return PaginatedResponse[Affiliate].model_validate(envelope)
|
|
96
117
|
|
|
97
|
-
async def get(self, id: str) -> Affiliate:
|
|
98
|
-
|
|
118
|
+
async def get(self, id: str, *, include: Optional[str] = None) -> Affiliate:
|
|
119
|
+
params = {"include": include} if include else None
|
|
120
|
+
envelope = await self._http.request("GET", f"/affiliates/{id}", params=params)
|
|
99
121
|
return Affiliate.model_validate(envelope["data"])
|
|
100
122
|
|
|
101
123
|
async def approve(self, id: str, *, idempotency_key: Optional[str] = None) -> Affiliate:
|
|
@@ -23,6 +23,9 @@ class MerchantResource:
|
|
|
23
23
|
timezone: Optional[str] = None,
|
|
24
24
|
default_cookie_duration: Optional[int] = None,
|
|
25
25
|
default_payout_threshold: Optional[int] = None,
|
|
26
|
+
tracking_requires_consent: Optional[bool] = None,
|
|
27
|
+
tracking_param_aliases: Optional[list[str]] = None,
|
|
28
|
+
tracking_legacy_metadata_fallback_enabled: Optional[bool] = None,
|
|
26
29
|
) -> Merchant:
|
|
27
30
|
payload = UpdateMerchantParams(
|
|
28
31
|
company_name=company_name,
|
|
@@ -31,6 +34,9 @@ class MerchantResource:
|
|
|
31
34
|
timezone=timezone,
|
|
32
35
|
default_cookie_duration=default_cookie_duration,
|
|
33
36
|
default_payout_threshold=default_payout_threshold,
|
|
37
|
+
tracking_requires_consent=tracking_requires_consent,
|
|
38
|
+
tracking_param_aliases=tracking_param_aliases,
|
|
39
|
+
tracking_legacy_metadata_fallback_enabled=tracking_legacy_metadata_fallback_enabled,
|
|
34
40
|
).model_dump(by_alias=True, exclude_none=True)
|
|
35
41
|
envelope = self._http.request("PATCH", "/merchant", json=payload)
|
|
36
42
|
return Merchant.model_validate(envelope["data"])
|
|
@@ -61,6 +67,9 @@ class AsyncMerchantResource:
|
|
|
61
67
|
timezone: Optional[str] = None,
|
|
62
68
|
default_cookie_duration: Optional[int] = None,
|
|
63
69
|
default_payout_threshold: Optional[int] = None,
|
|
70
|
+
tracking_requires_consent: Optional[bool] = None,
|
|
71
|
+
tracking_param_aliases: Optional[list[str]] = None,
|
|
72
|
+
tracking_legacy_metadata_fallback_enabled: Optional[bool] = None,
|
|
64
73
|
) -> Merchant:
|
|
65
74
|
payload = UpdateMerchantParams(
|
|
66
75
|
company_name=company_name,
|
|
@@ -69,6 +78,9 @@ class AsyncMerchantResource:
|
|
|
69
78
|
timezone=timezone,
|
|
70
79
|
default_cookie_duration=default_cookie_duration,
|
|
71
80
|
default_payout_threshold=default_payout_threshold,
|
|
81
|
+
tracking_requires_consent=tracking_requires_consent,
|
|
82
|
+
tracking_param_aliases=tracking_param_aliases,
|
|
83
|
+
tracking_legacy_metadata_fallback_enabled=tracking_legacy_metadata_fallback_enabled,
|
|
72
84
|
).model_dump(by_alias=True, exclude_none=True)
|
|
73
85
|
envelope = await self._http.request("PATCH", "/merchant", json=payload)
|
|
74
86
|
return Merchant.model_validate(envelope["data"])
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from .._http import AsyncHttpClient, SyncHttpClient
|
|
6
|
+
from ..types.models import NotificationPreferences, UpdateNotificationPreferencesParams
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class NotificationsResource:
|
|
10
|
+
def __init__(self, http: SyncHttpClient) -> None:
|
|
11
|
+
self._http = http
|
|
12
|
+
|
|
13
|
+
def get(self) -> NotificationPreferences:
|
|
14
|
+
envelope = self._http.request("GET", "/merchant/notifications")
|
|
15
|
+
return NotificationPreferences.model_validate(envelope["data"])
|
|
16
|
+
|
|
17
|
+
def update(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
new_affiliate: Optional[bool] = None,
|
|
21
|
+
new_conversion: Optional[bool] = None,
|
|
22
|
+
commission_approved: Optional[bool] = None,
|
|
23
|
+
payout_processed: Optional[bool] = None,
|
|
24
|
+
weekly_digest: Optional[bool] = None,
|
|
25
|
+
) -> NotificationPreferences:
|
|
26
|
+
payload = UpdateNotificationPreferencesParams(
|
|
27
|
+
new_affiliate=new_affiliate,
|
|
28
|
+
new_conversion=new_conversion,
|
|
29
|
+
commission_approved=commission_approved,
|
|
30
|
+
payout_processed=payout_processed,
|
|
31
|
+
weekly_digest=weekly_digest,
|
|
32
|
+
).model_dump(by_alias=True, exclude_none=True)
|
|
33
|
+
envelope = self._http.request("PUT", "/merchant/notifications", json=payload)
|
|
34
|
+
return NotificationPreferences.model_validate(envelope["data"])
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class AsyncNotificationsResource:
|
|
38
|
+
def __init__(self, http: AsyncHttpClient) -> None:
|
|
39
|
+
self._http = http
|
|
40
|
+
|
|
41
|
+
async def get(self) -> NotificationPreferences:
|
|
42
|
+
envelope = await self._http.request("GET", "/merchant/notifications")
|
|
43
|
+
return NotificationPreferences.model_validate(envelope["data"])
|
|
44
|
+
|
|
45
|
+
async def update(
|
|
46
|
+
self,
|
|
47
|
+
*,
|
|
48
|
+
new_affiliate: Optional[bool] = None,
|
|
49
|
+
new_conversion: Optional[bool] = None,
|
|
50
|
+
commission_approved: Optional[bool] = None,
|
|
51
|
+
payout_processed: Optional[bool] = None,
|
|
52
|
+
weekly_digest: Optional[bool] = None,
|
|
53
|
+
) -> NotificationPreferences:
|
|
54
|
+
payload = UpdateNotificationPreferencesParams(
|
|
55
|
+
new_affiliate=new_affiliate,
|
|
56
|
+
new_conversion=new_conversion,
|
|
57
|
+
commission_approved=commission_approved,
|
|
58
|
+
payout_processed=payout_processed,
|
|
59
|
+
weekly_digest=weekly_digest,
|
|
60
|
+
).model_dump(by_alias=True, exclude_none=True)
|
|
61
|
+
envelope = await self._http.request("PUT", "/merchant/notifications", json=payload)
|
|
62
|
+
return NotificationPreferences.model_validate(envelope["data"])
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from .._http import AsyncHttpClient, SyncHttpClient
|
|
6
|
+
from ..types.models import PayoutInfo, UpdatePayoutInfoParams
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PayoutInfoResource:
|
|
10
|
+
def __init__(self, http: SyncHttpClient) -> None:
|
|
11
|
+
self._http = http
|
|
12
|
+
|
|
13
|
+
def get(self) -> PayoutInfo:
|
|
14
|
+
envelope = self._http.request("GET", "/me/payout-info")
|
|
15
|
+
return PayoutInfo.model_validate(envelope["data"])
|
|
16
|
+
|
|
17
|
+
def update(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
payout_method: Optional[str] = None,
|
|
21
|
+
paypal_email: Optional[str] = None,
|
|
22
|
+
bank_account_holder: Optional[str] = None,
|
|
23
|
+
bank_iban: Optional[str] = None,
|
|
24
|
+
bank_bic: Optional[str] = None,
|
|
25
|
+
first_name: Optional[str] = None,
|
|
26
|
+
last_name: Optional[str] = None,
|
|
27
|
+
address_line1: Optional[str] = None,
|
|
28
|
+
address_line2: Optional[str] = None,
|
|
29
|
+
city: Optional[str] = None,
|
|
30
|
+
state: Optional[str] = None,
|
|
31
|
+
postal_code: Optional[str] = None,
|
|
32
|
+
vat_id: Optional[str] = None,
|
|
33
|
+
) -> PayoutInfo:
|
|
34
|
+
payload = UpdatePayoutInfoParams(
|
|
35
|
+
payout_method=payout_method,
|
|
36
|
+
paypal_email=paypal_email,
|
|
37
|
+
bank_account_holder=bank_account_holder,
|
|
38
|
+
bank_iban=bank_iban,
|
|
39
|
+
bank_bic=bank_bic,
|
|
40
|
+
first_name=first_name,
|
|
41
|
+
last_name=last_name,
|
|
42
|
+
address_line1=address_line1,
|
|
43
|
+
address_line2=address_line2,
|
|
44
|
+
city=city,
|
|
45
|
+
state=state,
|
|
46
|
+
postal_code=postal_code,
|
|
47
|
+
vat_id=vat_id,
|
|
48
|
+
).model_dump(by_alias=True, exclude_none=True)
|
|
49
|
+
envelope = self._http.request("PATCH", "/me/payout-info", json=payload)
|
|
50
|
+
return PayoutInfo.model_validate(envelope["data"])
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class AsyncPayoutInfoResource:
|
|
54
|
+
def __init__(self, http: AsyncHttpClient) -> None:
|
|
55
|
+
self._http = http
|
|
56
|
+
|
|
57
|
+
async def get(self) -> PayoutInfo:
|
|
58
|
+
envelope = await self._http.request("GET", "/me/payout-info")
|
|
59
|
+
return PayoutInfo.model_validate(envelope["data"])
|
|
60
|
+
|
|
61
|
+
async def update(
|
|
62
|
+
self,
|
|
63
|
+
*,
|
|
64
|
+
payout_method: Optional[str] = None,
|
|
65
|
+
paypal_email: Optional[str] = None,
|
|
66
|
+
bank_account_holder: Optional[str] = None,
|
|
67
|
+
bank_iban: Optional[str] = None,
|
|
68
|
+
bank_bic: Optional[str] = None,
|
|
69
|
+
first_name: Optional[str] = None,
|
|
70
|
+
last_name: Optional[str] = None,
|
|
71
|
+
address_line1: Optional[str] = None,
|
|
72
|
+
address_line2: Optional[str] = None,
|
|
73
|
+
city: Optional[str] = None,
|
|
74
|
+
state: Optional[str] = None,
|
|
75
|
+
postal_code: Optional[str] = None,
|
|
76
|
+
vat_id: Optional[str] = None,
|
|
77
|
+
) -> PayoutInfo:
|
|
78
|
+
payload = UpdatePayoutInfoParams(
|
|
79
|
+
payout_method=payout_method,
|
|
80
|
+
paypal_email=paypal_email,
|
|
81
|
+
bank_account_holder=bank_account_holder,
|
|
82
|
+
bank_iban=bank_iban,
|
|
83
|
+
bank_bic=bank_bic,
|
|
84
|
+
first_name=first_name,
|
|
85
|
+
last_name=last_name,
|
|
86
|
+
address_line1=address_line1,
|
|
87
|
+
address_line2=address_line2,
|
|
88
|
+
city=city,
|
|
89
|
+
state=state,
|
|
90
|
+
postal_code=postal_code,
|
|
91
|
+
vat_id=vat_id,
|
|
92
|
+
).model_dump(by_alias=True, exclude_none=True)
|
|
93
|
+
envelope = await self._http.request("PATCH", "/me/payout-info", json=payload)
|
|
94
|
+
return PayoutInfo.model_validate(envelope["data"])
|
|
@@ -68,6 +68,8 @@ class ProgramsResource:
|
|
|
68
68
|
description: Optional[str] = None,
|
|
69
69
|
landing_page_url: Optional[str] = None,
|
|
70
70
|
commission_limit_months: Optional[int] = None,
|
|
71
|
+
portal_slug: Optional[str] = None,
|
|
72
|
+
currency: Optional[str] = None,
|
|
71
73
|
idempotency_key: Optional[str] = None,
|
|
72
74
|
) -> Program:
|
|
73
75
|
body: Dict[str, Any] = {
|
|
@@ -80,6 +82,8 @@ class ProgramsResource:
|
|
|
80
82
|
"description": description,
|
|
81
83
|
"landingPageUrl": landing_page_url,
|
|
82
84
|
"commissionLimitMonths": commission_limit_months,
|
|
85
|
+
"portalSlug": portal_slug,
|
|
86
|
+
"currency": currency,
|
|
83
87
|
}
|
|
84
88
|
envelope = self._http.request(
|
|
85
89
|
"POST",
|
|
@@ -102,8 +106,9 @@ class ProgramsResource:
|
|
|
102
106
|
description: Optional[str] = None,
|
|
103
107
|
landing_page_url: Optional[str] = None,
|
|
104
108
|
status: Optional[Literal["active", "paused", "archived"]] = None,
|
|
105
|
-
is_public: Optional[bool] = None,
|
|
106
109
|
commission_limit_months: Optional[int] = None,
|
|
110
|
+
portal_slug: Optional[str] = None,
|
|
111
|
+
currency: Optional[str] = None,
|
|
107
112
|
) -> Program:
|
|
108
113
|
body: Dict[str, Any] = {
|
|
109
114
|
"name": name,
|
|
@@ -115,8 +120,9 @@ class ProgramsResource:
|
|
|
115
120
|
"description": description,
|
|
116
121
|
"landingPageUrl": landing_page_url,
|
|
117
122
|
"status": status,
|
|
118
|
-
"isPublic": is_public,
|
|
119
123
|
"commissionLimitMonths": commission_limit_months,
|
|
124
|
+
"portalSlug": portal_slug,
|
|
125
|
+
"currency": currency,
|
|
120
126
|
}
|
|
121
127
|
envelope = self._http.request("PATCH", f"/programs/{id}", json={k: v for k, v in body.items() if v is not None})
|
|
122
128
|
return Program.model_validate(envelope["data"])
|
|
@@ -191,6 +197,8 @@ class ProgramsResource:
|
|
|
191
197
|
is_public: Optional[bool] = None,
|
|
192
198
|
usage_limit: Optional[int] = None,
|
|
193
199
|
expires_in_days: Optional[int] = None,
|
|
200
|
+
tracking_code: Optional[str] = None,
|
|
201
|
+
skip_onboarding: Optional[bool] = None,
|
|
194
202
|
idempotency_key: Optional[str] = None,
|
|
195
203
|
) -> Invite:
|
|
196
204
|
body = {
|
|
@@ -199,6 +207,8 @@ class ProgramsResource:
|
|
|
199
207
|
"isPublic": is_public,
|
|
200
208
|
"usageLimit": usage_limit,
|
|
201
209
|
"expiresInDays": expires_in_days,
|
|
210
|
+
"trackingCode": tracking_code,
|
|
211
|
+
"skipOnboarding": skip_onboarding,
|
|
202
212
|
}
|
|
203
213
|
envelope = self._http.request(
|
|
204
214
|
"POST",
|
|
@@ -223,7 +233,7 @@ class ProgramsResource:
|
|
|
223
233
|
self,
|
|
224
234
|
id: str,
|
|
225
235
|
*,
|
|
226
|
-
status: Optional[Literal["private", "public"]] = None,
|
|
236
|
+
status: Optional[Literal["private", "pending", "public"]] = None,
|
|
227
237
|
category: Optional[str] = None,
|
|
228
238
|
description: Optional[str] = None,
|
|
229
239
|
logo_url: Optional[str] = None,
|
|
@@ -293,6 +303,8 @@ class AsyncProgramsResource:
|
|
|
293
303
|
description: Optional[str] = None,
|
|
294
304
|
landing_page_url: Optional[str] = None,
|
|
295
305
|
commission_limit_months: Optional[int] = None,
|
|
306
|
+
portal_slug: Optional[str] = None,
|
|
307
|
+
currency: Optional[str] = None,
|
|
296
308
|
idempotency_key: Optional[str] = None,
|
|
297
309
|
) -> Program:
|
|
298
310
|
body: Dict[str, Any] = {
|
|
@@ -305,6 +317,8 @@ class AsyncProgramsResource:
|
|
|
305
317
|
"description": description,
|
|
306
318
|
"landingPageUrl": landing_page_url,
|
|
307
319
|
"commissionLimitMonths": commission_limit_months,
|
|
320
|
+
"portalSlug": portal_slug,
|
|
321
|
+
"currency": currency,
|
|
308
322
|
}
|
|
309
323
|
envelope = await self._http.request(
|
|
310
324
|
"POST",
|
|
@@ -327,8 +341,9 @@ class AsyncProgramsResource:
|
|
|
327
341
|
description: Optional[str] = None,
|
|
328
342
|
landing_page_url: Optional[str] = None,
|
|
329
343
|
status: Optional[Literal["active", "paused", "archived"]] = None,
|
|
330
|
-
is_public: Optional[bool] = None,
|
|
331
344
|
commission_limit_months: Optional[int] = None,
|
|
345
|
+
portal_slug: Optional[str] = None,
|
|
346
|
+
currency: Optional[str] = None,
|
|
332
347
|
) -> Program:
|
|
333
348
|
body: Dict[str, Any] = {
|
|
334
349
|
"name": name,
|
|
@@ -340,8 +355,9 @@ class AsyncProgramsResource:
|
|
|
340
355
|
"description": description,
|
|
341
356
|
"landingPageUrl": landing_page_url,
|
|
342
357
|
"status": status,
|
|
343
|
-
"isPublic": is_public,
|
|
344
358
|
"commissionLimitMonths": commission_limit_months,
|
|
359
|
+
"portalSlug": portal_slug,
|
|
360
|
+
"currency": currency,
|
|
345
361
|
}
|
|
346
362
|
envelope = await self._http.request("PATCH", f"/programs/{id}", json={k: v for k, v in body.items() if v is not None})
|
|
347
363
|
return Program.model_validate(envelope["data"])
|
|
@@ -416,6 +432,8 @@ class AsyncProgramsResource:
|
|
|
416
432
|
is_public: Optional[bool] = None,
|
|
417
433
|
usage_limit: Optional[int] = None,
|
|
418
434
|
expires_in_days: Optional[int] = None,
|
|
435
|
+
tracking_code: Optional[str] = None,
|
|
436
|
+
skip_onboarding: Optional[bool] = None,
|
|
419
437
|
idempotency_key: Optional[str] = None,
|
|
420
438
|
) -> Invite:
|
|
421
439
|
body = {
|
|
@@ -424,6 +442,8 @@ class AsyncProgramsResource:
|
|
|
424
442
|
"isPublic": is_public,
|
|
425
443
|
"usageLimit": usage_limit,
|
|
426
444
|
"expiresInDays": expires_in_days,
|
|
445
|
+
"trackingCode": tracking_code,
|
|
446
|
+
"skipOnboarding": skip_onboarding,
|
|
427
447
|
}
|
|
428
448
|
envelope = await self._http.request(
|
|
429
449
|
"POST",
|
|
@@ -448,7 +468,7 @@ class AsyncProgramsResource:
|
|
|
448
468
|
self,
|
|
449
469
|
id: str,
|
|
450
470
|
*,
|
|
451
|
-
status: Optional[Literal["private", "public"]] = None,
|
|
471
|
+
status: Optional[Literal["private", "pending", "public"]] = None,
|
|
452
472
|
category: Optional[str] = None,
|
|
453
473
|
description: Optional[str] = None,
|
|
454
474
|
logo_url: Optional[str] = None,
|
|
@@ -11,8 +11,10 @@ from .models import (
|
|
|
11
11
|
Invite,
|
|
12
12
|
Merchant,
|
|
13
13
|
MerchantDomainStatus,
|
|
14
|
+
NotificationPreferences,
|
|
14
15
|
PaginatedResponse,
|
|
15
16
|
PaginationMeta,
|
|
17
|
+
PayoutInfo,
|
|
16
18
|
PendingAffiliate,
|
|
17
19
|
Payout,
|
|
18
20
|
PayoutStats,
|
|
@@ -21,6 +23,8 @@ from .models import (
|
|
|
21
23
|
ResolveFlagParams,
|
|
22
24
|
StripeConnectSession,
|
|
23
25
|
UpdateMerchantParams,
|
|
26
|
+
UpdateNotificationPreferencesParams,
|
|
27
|
+
UpdatePayoutInfoParams,
|
|
24
28
|
UpdateProgramMarketplaceParams,
|
|
25
29
|
)
|
|
26
30
|
|
|
@@ -48,4 +52,8 @@ __all__ = [
|
|
|
48
52
|
"UpdateProgramMarketplaceParams",
|
|
49
53
|
"Coupon",
|
|
50
54
|
"Invite",
|
|
55
|
+
"PayoutInfo",
|
|
56
|
+
"UpdatePayoutInfoParams",
|
|
57
|
+
"NotificationPreferences",
|
|
58
|
+
"UpdateNotificationPreferencesParams",
|
|
51
59
|
]
|