python-amazon-ad-api 1.0.1__py3-none-any.whl → 1.0.3__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.
- ad_api/api/v1/__init__.py +4 -0
- ad_api/api/v1/ads.py +163 -0
- ad_api/api/v1/targets.py +205 -0
- ad_api/version.py +1 -1
- {python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/METADATA +22 -28
- {python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/RECORD +9 -7
- {python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/WHEEL +0 -0
- {python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/licenses/LICENSE +0 -0
- {python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/top_level.txt +0 -0
ad_api/api/v1/__init__.py
CHANGED
ad_api/api/v1/ads.py
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Ads(Client):
|
|
5
|
+
r"""
|
|
6
|
+
Ads(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
|
|
7
|
+
|
|
8
|
+
Amazon Ads API v1 - unified Ads endpoints
|
|
9
|
+
|
|
10
|
+
The v1 API is not split by product: every call goes to the same resource
|
|
11
|
+
(``/adsApi/v1/...``) and the product is selected in the request body via
|
|
12
|
+
``adProductFilter``.
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
@sp_endpoint('/adsApi/v1/query/ads', method='POST')
|
|
17
|
+
def query_ads(self, **kwargs) -> ApiResponse:
|
|
18
|
+
r"""
|
|
19
|
+
query_ads(body: dict) -> ApiResponse
|
|
20
|
+
|
|
21
|
+
Amazon Ads API v1 - Query Ads (operationId: QueryAd)
|
|
22
|
+
|
|
23
|
+
Request Body [Required]
|
|
24
|
+
| **adProductFilter** (dict) : [required]
|
|
25
|
+
| **include** (list<AdProduct>) : Enum [ AMAZON_DSP, SPONSORED_BRANDS, SPONSORED_DISPLAY, SPONSORED_PRODUCTS, SPONSORED_TELEVISION ]
|
|
26
|
+
| **adIdFilter** (dict) [optional]
|
|
27
|
+
| **include** (list<string>) : Ad identifiers
|
|
28
|
+
| **adGroupIdFilter** (dict) [optional]
|
|
29
|
+
| **include** (list<string>) : Ad group identifiers
|
|
30
|
+
| **campaignIdFilter** (dict) [optional]
|
|
31
|
+
| **include** (list<string>) : Campaign identifiers
|
|
32
|
+
| **marketplaceScopeFilter** (dict) [optional]
|
|
33
|
+
| **include** (list<MarketplaceScope>) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
34
|
+
| **nameFilter** (dict) [optional]
|
|
35
|
+
| **include** (list<string>) : Ad names
|
|
36
|
+
| **queryTermMatchType** (string) : [required] Enum [ BROAD_MATCH, EXACT_MATCH ]
|
|
37
|
+
| **retailerScopeFilter** (dict) [optional]
|
|
38
|
+
| **include** (list<RetailerScope>) : Enum [ AMAZON, OTHER_RETAILERS ]
|
|
39
|
+
| **stateFilter** (dict) [optional]
|
|
40
|
+
| **include** (list<State>) : Enum [ ARCHIVED, DRAFT, ENABLED, PAUSED ]
|
|
41
|
+
| **maxResults** (int) [optional] Maximum number of records in the response
|
|
42
|
+
| **nextToken** (string) [optional] Token to navigate to the next page
|
|
43
|
+
|
|
44
|
+
Headers
|
|
45
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
46
|
+
|
|
47
|
+
Returns
|
|
48
|
+
ApiResponse
|
|
49
|
+
| **ads** (list), **nextToken** (string)
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
schema_version = 'application/json'
|
|
53
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
54
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
55
|
+
|
|
56
|
+
@sp_endpoint('/adsApi/v1/create/ads', method='POST')
|
|
57
|
+
def create_ads(self, **kwargs) -> ApiResponse:
|
|
58
|
+
r"""
|
|
59
|
+
create_ads(body: dict) -> ApiResponse
|
|
60
|
+
|
|
61
|
+
Amazon Ads API v1 - Create Ads (operationId: CreateAd)
|
|
62
|
+
|
|
63
|
+
Request Body [Required]
|
|
64
|
+
| **ads** (list<dict>) : [required] One or more ad objects.
|
|
65
|
+
Each object requires **adProduct**, **adType**, **creative** and **state**.
|
|
66
|
+
|
|
67
|
+
Ad fields
|
|
68
|
+
| **adProduct** (string) : [required] Enum [ AMAZON_DSP, SPONSORED_BRANDS, SPONSORED_DISPLAY, SPONSORED_PRODUCTS, SPONSORED_TELEVISION ]
|
|
69
|
+
| **adType** (string) : [required] Enum [ AUDIO, COMPONENT, DISPLAY, PRODUCT_AD, THIRD_PARTY, VIDEO ]
|
|
70
|
+
| **creative** (dict) : [required] Exactly one of the six variants below
|
|
71
|
+
| **state** (string) : [required] Enum [ DRAFT, ENABLED, PAUSED ]
|
|
72
|
+
| **adGroupId** (string) [optional] Identifier of the parent ad group
|
|
73
|
+
| **name** (string) [optional] Name of the ad
|
|
74
|
+
| **marketplaceScope** (string) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
75
|
+
| **marketplaces** (list<dict>) : Marketplaces where the ad runs
|
|
76
|
+
| **marketplaceConfigurations** (list<dict>) : Per marketplace overrides
|
|
77
|
+
| **tags** (list<dict>) : Each with **key** and **value** (both required)
|
|
78
|
+
|
|
79
|
+
Creative variants (use exactly one, matching ``adType``)
|
|
80
|
+
| **audioCreative** (dict) : For ``AUDIO``
|
|
81
|
+
| **displayCreative** (dict) : For ``DISPLAY``, carries ``standardDisplaySettings``
|
|
82
|
+
| **videoCreative** (dict) : For ``VIDEO``, carries ``onlineVideoSettings`` / ``streamingTvSettings``
|
|
83
|
+
| **thirdPartyCreative** (dict) : For ``THIRD_PARTY``, carries ``thirdPartyDisplaySettings`` / ``thirdPartyVideoSettings``
|
|
84
|
+
| **componentCreative** (dict) : For ``COMPONENT``, carries ``assetBasedCreativeSettings``,
|
|
85
|
+
``autoCollectionSettings``, ``brandGallerySettings``, ``brandStoreSettings``,
|
|
86
|
+
``manualCollectionSettings``, ``productCollectionSettings``,
|
|
87
|
+
``productVideoSettings``, ``responsiveEcommerceSettings``,
|
|
88
|
+
``storeSpotlightSettings``
|
|
89
|
+
| **productCreative** (dict) : For ``PRODUCT_AD``, carries ``productCreativeSettings``
|
|
90
|
+
|
|
91
|
+
Example of the envelope::
|
|
92
|
+
|
|
93
|
+
{"creative": {"productCreative": {"productCreativeSettings": {...}}}}
|
|
94
|
+
|
|
95
|
+
Headers
|
|
96
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
ApiResponse
|
|
100
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
101
|
+
to know which ads were created and which failed.
|
|
102
|
+
|
|
103
|
+
"""
|
|
104
|
+
schema_version = 'application/json'
|
|
105
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
106
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
107
|
+
|
|
108
|
+
@sp_endpoint('/adsApi/v1/update/ads', method='POST')
|
|
109
|
+
def update_ads(self, **kwargs) -> ApiResponse:
|
|
110
|
+
r"""
|
|
111
|
+
update_ads(body: dict) -> ApiResponse
|
|
112
|
+
|
|
113
|
+
Amazon Ads API v1 - Update Ads (operationId: UpdateAd)
|
|
114
|
+
|
|
115
|
+
Request Body [Required]
|
|
116
|
+
| **ads** (list<dict>) : [required] One or more ad objects.
|
|
117
|
+
Each object requires **adId** and may include any of the fields below.
|
|
118
|
+
|
|
119
|
+
Ad fields [optional except adId]
|
|
120
|
+
| **adId** (string) : [required] The identifier of the ad to update.
|
|
121
|
+
| **creative** (dict) : Same six-variant envelope as in create
|
|
122
|
+
| **name** (string) : Name of the ad
|
|
123
|
+
| **state** (string) : Enum [ DRAFT, ENABLED, PAUSED ]
|
|
124
|
+
| **marketplaceScope** (string) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
125
|
+
| **marketplaces** (list<dict>)
|
|
126
|
+
| **marketplaceConfigurations** (list<dict>)
|
|
127
|
+
| **tags** (list<dict>)
|
|
128
|
+
|
|
129
|
+
Headers
|
|
130
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
131
|
+
|
|
132
|
+
Returns
|
|
133
|
+
ApiResponse
|
|
134
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
135
|
+
to know which ads were updated and which failed.
|
|
136
|
+
|
|
137
|
+
"""
|
|
138
|
+
schema_version = 'application/json'
|
|
139
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
140
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
141
|
+
|
|
142
|
+
@sp_endpoint('/adsApi/v1/delete/ads', method='POST')
|
|
143
|
+
def delete_ads(self, **kwargs) -> ApiResponse:
|
|
144
|
+
r"""
|
|
145
|
+
delete_ads(body: dict) -> ApiResponse
|
|
146
|
+
|
|
147
|
+
Amazon Ads API v1 - Delete Ads (operationId: DeleteAd)
|
|
148
|
+
|
|
149
|
+
Request Body [Required]
|
|
150
|
+
| **adIds** (list<string>) : [required] Ad identifiers to delete
|
|
151
|
+
|
|
152
|
+
Headers
|
|
153
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
154
|
+
|
|
155
|
+
Returns
|
|
156
|
+
ApiResponse
|
|
157
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
158
|
+
to know which ad ids succeeded and which failed.
|
|
159
|
+
|
|
160
|
+
"""
|
|
161
|
+
schema_version = 'application/json'
|
|
162
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
163
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
ad_api/api/v1/targets.py
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
from ad_api.base import Client, sp_endpoint, ApiResponse, Utils
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Targets(Client):
|
|
5
|
+
r"""
|
|
6
|
+
Targets(account='default', marketplace: Marketplaces = Marketplaces.EU, credentials=None, debug=False)
|
|
7
|
+
|
|
8
|
+
Amazon Ads API v1 - unified Targets endpoints
|
|
9
|
+
|
|
10
|
+
The v1 API is not split by product: every call goes to the same resource
|
|
11
|
+
(``/adsApi/v1/...``) and the product is selected in the request body via
|
|
12
|
+
``adProductFilter``.
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
@sp_endpoint('/adsApi/v1/query/targets', method='POST')
|
|
17
|
+
def query_targets(self, **kwargs) -> ApiResponse:
|
|
18
|
+
r"""
|
|
19
|
+
query_targets(body: dict) -> ApiResponse
|
|
20
|
+
|
|
21
|
+
Amazon Ads API v1 - Query Targets (operationId: QueryTarget)
|
|
22
|
+
|
|
23
|
+
Request Body [Required]
|
|
24
|
+
| **adProductFilter** (dict) : [required]
|
|
25
|
+
| **include** (list<AdProduct>) : Enum [ AMAZON_DSP, SPONSORED_BRANDS, SPONSORED_DISPLAY, SPONSORED_PRODUCTS, SPONSORED_TELEVISION ]
|
|
26
|
+
| **targetIdFilter** (dict) [optional]
|
|
27
|
+
| **include** (list<string>) : Target identifiers
|
|
28
|
+
| **adGroupIdFilter** (dict) [optional]
|
|
29
|
+
| **include** (list<string>) : Ad group identifiers
|
|
30
|
+
| **campaignIdFilter** (dict) [optional]
|
|
31
|
+
| **include** (list<string>) : Campaign identifiers
|
|
32
|
+
| **keywordFilter** (dict) [optional]
|
|
33
|
+
| **include** (list<string>) : Keyword texts
|
|
34
|
+
| **queryTermMatchType** (string) : [required] Enum [ BROAD_MATCH, EXACT_MATCH ]
|
|
35
|
+
| **productIdFilter** (dict) [optional]
|
|
36
|
+
| **include** (list<string>) : Product identifiers
|
|
37
|
+
| **queryTermMatchType** (string) : [required] Enum [ BROAD_MATCH, EXACT_MATCH ]
|
|
38
|
+
| **matchTypeFilter** (dict) [optional]
|
|
39
|
+
| **include** (list<MatchType>) : Enum [ BROAD, EXACT, INTERESTED_AUDIENCE, KEYWORDS_CLOSE_MATCH, KEYWORDS_LOOSE_MATCH, KEYWORDS_RELATED_TO_GIFTS, KEYWORDS_RELATED_TO_PEER_BRANDS_PRODUCT_CATEGORY, KEYWORDS_RELATED_TO_PRIME_DAY, KEYWORDS_RELATED_TO_YOUR_BRAND, KEYWORDS_RELATED_TO_YOUR_LANDING_PAGES, KEYWORDS_RELATED_TO_YOUR_PRODUCT_CATEGORY, PHRASE, PRODUCTS_SIMILAR_TO_ADVERTISED_PRODUCTS, PRODUCT_COMPLEMENTS, PRODUCT_EXACT, PRODUCT_REMARKETING, PRODUCT_SIMILAR, PRODUCT_SUBSTITUTES ]
|
|
40
|
+
| **negativeFilter** (dict) [optional]
|
|
41
|
+
| **include** (list<boolean>) : Keep only negative or non-negative targets
|
|
42
|
+
| **targetTypeFilter** (dict) [optional]
|
|
43
|
+
| **include** (list<TargetType>) : Enum [ AD_INITIATION, AD_PLAYER_SIZE, APP, AUDIENCE, BRAND_SAFETY_CATEGORY, BRAND_SAFETY_TIER, CONTENT_CATEGORY, CONTENT_GENRE, CONTENT_INSTREAM_POSITION, CONTENT_OUTSTREAM_POSITION, CONTENT_RATING, DAYPART, DEVICE, DOMAIN, FOLD_POSITION, INVENTORY_SOURCE, KEYWORD, LOCATION, NATIVE_CONTENT_POSITION, PLACEMENT_TYPE, PRODUCT, PRODUCT_AUDIENCE, PRODUCT_CATEGORY, SKIPPABILITY, THEME, THIRD_PARTY, VIDEO_AD_FORMAT, VIDEO_CONTENT_DURATION ]
|
|
44
|
+
| **nativeLanguageLocaleFilter** (dict) [optional]
|
|
45
|
+
| **include** (list<string>) : Locales of the unlocalized keyword text
|
|
46
|
+
| **retailerIdFilter** (dict) [optional]
|
|
47
|
+
| **include** (list<string>) : Retailer identifiers
|
|
48
|
+
| **stateFilter** (dict) [optional]
|
|
49
|
+
| **include** (list<State>) : Enum [ ARCHIVED, DRAFT, ENABLED, PAUSED ]
|
|
50
|
+
| **marketplaceScopeFilter** (dict) [optional]
|
|
51
|
+
| **include** (list<MarketplaceScope>) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
52
|
+
| **retailerScopeFilter** (dict) [optional]
|
|
53
|
+
| **include** (list<RetailerScope>) : Enum [ AMAZON, OTHER_RETAILERS ]
|
|
54
|
+
| **maxResults** (int) [optional] Maximum number of records in the response
|
|
55
|
+
| **nextToken** (string) [optional] Token to navigate to the next page
|
|
56
|
+
|
|
57
|
+
Headers
|
|
58
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
ApiResponse
|
|
62
|
+
| **targets** (list), **nextToken** (string)
|
|
63
|
+
|
|
64
|
+
"""
|
|
65
|
+
schema_version = 'application/json'
|
|
66
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
67
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
68
|
+
|
|
69
|
+
@sp_endpoint('/adsApi/v1/create/targets', method='POST')
|
|
70
|
+
def create_targets(self, **kwargs) -> ApiResponse:
|
|
71
|
+
r"""
|
|
72
|
+
create_targets(body: dict) -> ApiResponse
|
|
73
|
+
|
|
74
|
+
Amazon Ads API v1 - Create Targets (operationId: CreateTarget)
|
|
75
|
+
|
|
76
|
+
Request Body [Required]
|
|
77
|
+
| **targets** (list<dict>) : [required] One or more target objects.
|
|
78
|
+
Each object requires **adProduct**, **negative**, **state**,
|
|
79
|
+
**targetDetails** and **targetType**.
|
|
80
|
+
|
|
81
|
+
Target fields
|
|
82
|
+
| **adProduct** (string) : [required] Enum [ AMAZON_DSP, SPONSORED_BRANDS, SPONSORED_DISPLAY, SPONSORED_PRODUCTS, SPONSORED_TELEVISION ]
|
|
83
|
+
| **negative** (boolean) : [required] True for a negative target
|
|
84
|
+
| **state** (string) : [required] Enum [ DRAFT, ENABLED, PAUSED ]
|
|
85
|
+
| **targetDetails** (dict) : [required] Exactly one of the variants below
|
|
86
|
+
| **targetType** (string) : [required] Enum [ AD_INITIATION, AD_PLAYER_SIZE, APP, AUDIENCE, BRAND_SAFETY_CATEGORY, BRAND_SAFETY_TIER, CONTENT_CATEGORY, CONTENT_GENRE, CONTENT_INSTREAM_POSITION, CONTENT_OUTSTREAM_POSITION, CONTENT_RATING, DAYPART, DEVICE, DOMAIN, FOLD_POSITION, INVENTORY_SOURCE, KEYWORD, LOCATION, NATIVE_CONTENT_POSITION, PLACEMENT_TYPE, PRODUCT, PRODUCT_AUDIENCE, PRODUCT_CATEGORY, SKIPPABILITY, THEME, THIRD_PARTY, VIDEO_AD_FORMAT, VIDEO_CONTENT_DURATION ]
|
|
87
|
+
| **adGroupId** (string) [optional] Identifier of the parent ad group
|
|
88
|
+
| **campaignId** (string) [optional] Identifier of the parent campaign
|
|
89
|
+
| **bid** (dict) [optional]
|
|
90
|
+
| **bid** (number) : Bid value
|
|
91
|
+
| **marketplaceSettings** (list<dict>) : Per marketplace bids
|
|
92
|
+
| **marketplaceScope** (string) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
93
|
+
| **marketplaces** (list<dict>) : Marketplaces where the target runs
|
|
94
|
+
| **marketplaceConfigurations** (list<dict>) : Each with **marketplace** and **overrides** (both required)
|
|
95
|
+
| **tags** (list<dict>) : Each with **key** and **value** (both required)
|
|
96
|
+
|
|
97
|
+
targetDetails variants (use exactly one key, matching ``targetType``)
|
|
98
|
+
| **keywordTarget** : requires ``keyword`` + ``matchType`` (Enum BROAD, EXACT, PHRASE);
|
|
99
|
+
optional ``nativeLanguageKeyword``, ``nativeLanguageLocale``
|
|
100
|
+
| **productTarget** : requires ``matchType``, ``product``, ``productIdType``
|
|
101
|
+
| **productCategoryTarget** : requires ``productCategoryRefinement``;
|
|
102
|
+
optional ``matchType``, ``productGenreRefinement``
|
|
103
|
+
| **productAudienceTarget** : requires ``asin``, ``event``, ``lookback``, ``matchType``
|
|
104
|
+
| **audienceTarget** : requires ``audienceId``; optional ``acrossGroupOperator``, ``groupId``, ``inGroupOperator``
|
|
105
|
+
| **locationTarget** : requires ``locationId``; optional ``locationIdResolved``
|
|
106
|
+
| **domainTarget** : requires ``domainTargetDetails``, ``domainTargetType``
|
|
107
|
+
| **appTarget** : requires ``appId``, ``appType``
|
|
108
|
+
| **deviceTarget** : requires ``deviceType``; optional ``deviceOrientation``, ``mobileDevice``, ``mobileEnvironment``, ``mobileOs``
|
|
109
|
+
| **dayPartTarget** : requires ``dayOfWeek``, ``timeOfDay``
|
|
110
|
+
| **contentCategoryTarget** : requires ``contentCategoryId``
|
|
111
|
+
| **contentGenreTarget** : requires ``contentGenre``
|
|
112
|
+
| **contentRatingTarget** : requires ``contentRatingType``, ``contentRatingTypeDetails``
|
|
113
|
+
| **brandSafetyTierTarget** : requires ``brandSafetyTier``
|
|
114
|
+
| **brandSafetyCategoryTarget** : requires ``brandSafetyCategory``
|
|
115
|
+
| **inventorySourceTarget** : requires ``inventorySourceId``, ``inventorySourceType``
|
|
116
|
+
| **adInitiationTarget** : requires ``videoInitiationType``
|
|
117
|
+
| **adPlayerSizeTarget** : requires ``adPlayerSize``
|
|
118
|
+
| **videoAdFormatTarget** : requires ``videoAdFormat``
|
|
119
|
+
| **thirdPartyTarget** : requires ``thirdPartyTargetDetails``, ``thirdPartyTargetType``
|
|
120
|
+
| **themeTarget** : requires ``matchType``
|
|
121
|
+
| **contentInstreamPositionTarget** : requires ``instreamPosition``
|
|
122
|
+
| **contentOutstreamPositionTarget** : requires ``outstreamPosition``
|
|
123
|
+
| **videoContentDurationTarget** : requires ``duration``
|
|
124
|
+
| **foldPositionTarget** : requires ``foldPosition``
|
|
125
|
+
| **nativeContentPositionTarget** : requires ``nativePosition``
|
|
126
|
+
| **placementTypeTarget** : requires ``placementType``
|
|
127
|
+
| **skippabilityTarget** : requires ``skippabilityType``
|
|
128
|
+
|
|
129
|
+
Example of the envelope::
|
|
130
|
+
|
|
131
|
+
{"targetDetails": {"keywordTarget": {"keyword": "running shoes", "matchType": "EXACT"}}}
|
|
132
|
+
|
|
133
|
+
Headers
|
|
134
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
135
|
+
|
|
136
|
+
Returns
|
|
137
|
+
ApiResponse
|
|
138
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
139
|
+
to know which targets were created and which failed.
|
|
140
|
+
|
|
141
|
+
"""
|
|
142
|
+
schema_version = 'application/json'
|
|
143
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
144
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
145
|
+
|
|
146
|
+
@sp_endpoint('/adsApi/v1/update/targets', method='POST')
|
|
147
|
+
def update_targets(self, **kwargs) -> ApiResponse:
|
|
148
|
+
r"""
|
|
149
|
+
update_targets(body: dict) -> ApiResponse
|
|
150
|
+
|
|
151
|
+
Amazon Ads API v1 - Update Targets (operationId: UpdateTarget)
|
|
152
|
+
|
|
153
|
+
Request Body [Required]
|
|
154
|
+
| **targets** (list<dict>) : [required] One or more target objects.
|
|
155
|
+
Each object requires **targetId** and may include any of the fields below.
|
|
156
|
+
|
|
157
|
+
Target fields [optional except targetId]
|
|
158
|
+
| **targetId** (string) : [required] The identifier of the target to update.
|
|
159
|
+
| **state** (string) : Enum [ DRAFT, ENABLED, PAUSED ]
|
|
160
|
+
| **bid** (dict) : ``bid`` (number) and ``marketplaceSettings``
|
|
161
|
+
| **campaignId** (string)
|
|
162
|
+
| **marketplaceScope** (string) : Enum [ GLOBAL, SINGLE_MARKETPLACE ]
|
|
163
|
+
| **marketplaces** (list<dict>)
|
|
164
|
+
| **marketplaceConfigurations** (list<dict>)
|
|
165
|
+
| **tags** (list<dict>)
|
|
166
|
+
|
|
167
|
+
Note: ``targetDetails``, ``targetType``, ``negative`` and ``adProduct``
|
|
168
|
+
are not part of the update body. To change what a target points at,
|
|
169
|
+
delete it and create a new one.
|
|
170
|
+
|
|
171
|
+
Headers
|
|
172
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
173
|
+
|
|
174
|
+
Returns
|
|
175
|
+
ApiResponse
|
|
176
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
177
|
+
to know which targets were updated and which failed.
|
|
178
|
+
|
|
179
|
+
"""
|
|
180
|
+
schema_version = 'application/json'
|
|
181
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
182
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
|
183
|
+
|
|
184
|
+
@sp_endpoint('/adsApi/v1/delete/targets', method='POST')
|
|
185
|
+
def delete_targets(self, **kwargs) -> ApiResponse:
|
|
186
|
+
r"""
|
|
187
|
+
delete_targets(body: dict) -> ApiResponse
|
|
188
|
+
|
|
189
|
+
Amazon Ads API v1 - Delete Targets (operationId: DeleteTarget)
|
|
190
|
+
|
|
191
|
+
Request Body [Required]
|
|
192
|
+
| **targetIds** (list<string>) : [required] Target identifiers to delete
|
|
193
|
+
|
|
194
|
+
Headers
|
|
195
|
+
| **Amazon-Ads-AccountId** (string) [optional] Advertiser account identifier
|
|
196
|
+
|
|
197
|
+
Returns
|
|
198
|
+
ApiResponse
|
|
199
|
+
| **207** MultiStatus response with partial errors. Inspect the payload
|
|
200
|
+
to know which target ids succeeded and which failed.
|
|
201
|
+
|
|
202
|
+
"""
|
|
203
|
+
schema_version = 'application/json'
|
|
204
|
+
headers = {"Accept": schema_version, "Content-Type": schema_version}
|
|
205
|
+
return self._request(kwargs.pop('path'), data=Utils.convert_body(kwargs.pop('body'), False), params=kwargs, headers=headers)
|
ad_api/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.0.
|
|
1
|
+
__version__ = "1.0.3"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-amazon-ad-api
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: Python wrapper for the Amazon Advertising API
|
|
5
5
|
Home-page: https://github.com/denisneuf/python-amazon-ad-api
|
|
6
6
|
Author: Daniel Alvaro
|
|
@@ -299,37 +299,14 @@ There is a new version 3 Portfolios API, please check the [migration guide](http
|
|
|
299
299
|
* [Get test account information](https://python-amazon-ad-api.readthedocs.io/en/latest/api/advertising_test_account.html#ad_api.api.AdvertisingTestAccount.AdvertisingTestAccount.get_test_account)
|
|
300
300
|
|
|
301
301
|
|
|
302
|
-
### Amazon Ads API v1 (new, unified)
|
|
302
|
+
### [Amazon Ads API v1 (new, unified)](https://python-amazon-ad-api.readthedocs.io/en/latest/v1.html)
|
|
303
303
|
|
|
304
304
|
The v1 API lives under `/adsApi/v1/` and is **not** split by product: every call targets the same resource and the product is selected in the request body with `adProductFilter`. It supersedes the per-product v2/v3 endpoints.
|
|
305
305
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
| Method | Endpoint | Body |
|
|
311
|
-
|---|---|---|
|
|
312
|
-
| `query_campaigns` | `POST /adsApi/v1/query/campaigns` | filters + `maxResults`/`nextToken` |
|
|
313
|
-
| `create_campaigns` | `POST /adsApi/v1/create/campaigns` | `campaigns[]` (`adProduct`, `name`, `state` required) |
|
|
314
|
-
| `update_campaigns` | `POST /adsApi/v1/update/campaigns` | `campaigns[]` (`campaignId` required) |
|
|
315
|
-
| `delete_campaigns` | `POST /adsApi/v1/delete/campaigns` | `campaignIds[]` |
|
|
316
|
-
|
|
317
|
-
All four return a **207 MultiStatus** response (except `query_campaigns`, which returns 200), so check the payload for per-entity errors.
|
|
306
|
+
* [Campaigns](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/campaigns.html#ad_api.api.v1.Campaigns.Campaigns.query_campaigns)
|
|
307
|
+
* [Ad Groups](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ad_groups.html#ad_api.api.v1.AdGroups.AdGroups.query_ad_groups)
|
|
308
|
+
* [Ads](https://python-amazon-ad-api.readthedocs.io/en/latest/v1/ads.html#ad_api.api.v1.Ads.Ads.query_ads)
|
|
318
309
|
|
|
319
|
-
```python
|
|
320
|
-
from ad_api.api import v1
|
|
321
|
-
|
|
322
|
-
result = v1.Campaigns(credentials=credentials, debug=True).query_campaigns(
|
|
323
|
-
body={
|
|
324
|
-
"adProductFilter": {"include": ["SPONSORED_PRODUCTS"]},
|
|
325
|
-
"stateFilter": {"include": ["ENABLED"]},
|
|
326
|
-
"maxResults": 100,
|
|
327
|
-
}
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
campaigns = result.payload.get("campaigns")
|
|
331
|
-
next_token = result.payload.get("nextToken")
|
|
332
|
-
```
|
|
333
310
|
|
|
334
311
|
### [Modules Available Sponsored Products 2.0](https://python-amazon-ad-api.readthedocs.io/en/latest/sp_v2.html)
|
|
335
312
|
|
|
@@ -409,6 +386,23 @@ Warning: `list_campaigns` is deprecated. Use the v1 `query_campaigns` method ins
|
|
|
409
386
|
|
|
410
387
|
* [Reports](https://python-amazon-ad-api.readthedocs.io/en/latest/dsp/reports.html)
|
|
411
388
|
|
|
389
|
+
### Amazon Ads API v1 - basic example
|
|
390
|
+
|
|
391
|
+
```python
|
|
392
|
+
from ad_api.api import v1
|
|
393
|
+
|
|
394
|
+
result = v1.Campaigns(credentials=credentials, debug=True).query_campaigns(
|
|
395
|
+
body={
|
|
396
|
+
"adProductFilter": {"include": ["SPONSORED_PRODUCTS"]},
|
|
397
|
+
"stateFilter": {"include": ["ENABLED"]},
|
|
398
|
+
"maxResults": 100,
|
|
399
|
+
}
|
|
400
|
+
)
|
|
401
|
+
|
|
402
|
+
campaigns = result.payload.get("campaigns")
|
|
403
|
+
next_token = result.payload.get("nextToken")
|
|
404
|
+
```
|
|
405
|
+
|
|
412
406
|
### Simple Example Usage Campaigns with Credentials (v3, legacy)
|
|
413
407
|
|
|
414
408
|
Warning: this example uses `CampaignsV3.list_campaigns`, which is deprecated. See the v1 `query_campaigns` example above.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
ad_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
ad_api/version.py,sha256=
|
|
2
|
+
ad_api/version.py,sha256=2plzdEEb24FLjE2I2XyBBcJEPYWHccNL4SgtLC_6erg,22
|
|
3
3
|
ad_api/api/__init__.py,sha256=E9c0ZyK4vplMlKKEBF8CV5u7P4uSkTMSQsAuSQu5bfY,1514
|
|
4
4
|
ad_api/api/account.py,sha256=CmOvCfHoPWaeTUJvtB0pNoNulZVSz4oMMCKIpVTpHos,2931
|
|
5
5
|
ad_api/api/advertising_test_account.py,sha256=btOVbdk2tBDmyKSJaQbcIFyzNG8KFJVUmTe4p9xMhpU,1507
|
|
@@ -103,9 +103,11 @@ ad_api/api/sp/reports.py,sha256=OMNHL86doMZpbcLixIN1GLf6Mtm_KRxxxs6_vuzMLbU,5381
|
|
|
103
103
|
ad_api/api/sp/schedule_based_bid_optimization.py,sha256=G8VkS7iP1lTIAxZgbfRCLz8njw1DkVH9HQPOZ63pWNU,2371
|
|
104
104
|
ad_api/api/sp/snapshots.py,sha256=Pl72FpsTRhgA-FQYapTCAqhKLioUMn_Bdru502TS_RE,2969
|
|
105
105
|
ad_api/api/sp/suggested_keywords.py,sha256=cmE8W6q9bIBVt9Zuy1bZKOWErvcIuOyCt8-XAgrhnu8,3553
|
|
106
|
-
ad_api/api/v1/__init__.py,sha256=
|
|
106
|
+
ad_api/api/v1/__init__.py,sha256=F2CvJLkWZDG_ykzVnivBb10CvmSWw2lVf-7dy5oH8LM,189
|
|
107
107
|
ad_api/api/v1/ad_groups.py,sha256=pQhCVdve_O6kbL4mBA5bxxhKcKNl_BKqa7z9DvrxwaM,12626
|
|
108
|
+
ad_api/api/v1/ads.py,sha256=YwZGQ-4WuYquleELtwRI9L8w0fGw7FBRejQE-tZ5hKY,7941
|
|
108
109
|
ad_api/api/v1/campaigns.py,sha256=u5PlvoAhgVhMxbCvYkPgqtbYK3TXXcb7TMie0Qjrgwc,9573
|
|
110
|
+
ad_api/api/v1/targets.py,sha256=a4BzPjg9m1JJwqphhpQOFkNIcgCw7v4-K0sNzOihMZI,12355
|
|
109
111
|
ad_api/auth/__init__.py,sha256=B_yKdmsHENQaKfMFAIcSxQqG4aBUmNBm5orKIMUYObk,229
|
|
110
112
|
ad_api/auth/access_token_client.py,sha256=_V0FGXRmqRNMb1fz1AGqnR6gYr_WqFkMTbK1os0yoIk,2983
|
|
111
113
|
ad_api/auth/access_token_response.py,sha256=zlkfo3oWjkhAqNJIUOM0S4g_FvpgDa3IwNLxlREM89A,275
|
|
@@ -121,8 +123,8 @@ ad_api/base/exceptions.py,sha256=9D3M40ZIlLS0fA-aQh1BTWPOW-Nvf0tRhbA85jFnDJ4,438
|
|
|
121
123
|
ad_api/base/helpers.py,sha256=naUkDLK466x_OBCPXxMlzRc2nPC6iQ6H_vyUji0MJJ0,2282
|
|
122
124
|
ad_api/base/marketplaces.py,sha256=44lvCcluXNpqTprWQ80e3weSQmQbJoWL-WDSOWVbCyQ,4657
|
|
123
125
|
ad_api/base/utils.py,sha256=_qnCBOvyJTLgaZjJzUWTi38GGLHkQszXELs79133Rb4,5618
|
|
124
|
-
python_amazon_ad_api-1.0.
|
|
125
|
-
python_amazon_ad_api-1.0.
|
|
126
|
-
python_amazon_ad_api-1.0.
|
|
127
|
-
python_amazon_ad_api-1.0.
|
|
128
|
-
python_amazon_ad_api-1.0.
|
|
126
|
+
python_amazon_ad_api-1.0.3.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
|
|
127
|
+
python_amazon_ad_api-1.0.3.dist-info/METADATA,sha256=MsEaaj5aQwh0a5eRSOAQBZ997cif7SgtkXxYXhg9gWs,20449
|
|
128
|
+
python_amazon_ad_api-1.0.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
129
|
+
python_amazon_ad_api-1.0.3.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
|
|
130
|
+
python_amazon_ad_api-1.0.3.dist-info/RECORD,,
|
|
File without changes
|
{python_amazon_ad_api-1.0.1.dist-info → python_amazon_ad_api-1.0.3.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|