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 CHANGED
@@ -1,7 +1,11 @@
1
1
  from .campaigns import Campaigns
2
2
  from .ad_groups import AdGroups
3
+ from .ads import Ads
4
+ from .targets import Targets
3
5
 
4
6
  __all__ = [
5
7
  "Campaigns",
6
8
  "AdGroups",
9
+ "Ads",
10
+ "Targets",
7
11
  ]
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)
@@ -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"
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.1
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
- ```python
307
- from ad_api.api import v1
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=d4QHYmS_30j0hPN8NmNPnQ_Z0TphDRbu4MtQj9cT9e8,22
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=cm5OiA9-C0GGZZweFtJSRmwICMJqmvx8jHa6whHUEYc,113
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.1.dist-info/licenses/LICENSE,sha256=h2rpqlmmLy-4l1tN6KpWAFxx1JEMYeEFrMrZUbx_B_o,1105
125
- python_amazon_ad_api-1.0.1.dist-info/METADATA,sha256=JnL3S_-0jilHP0OqdJlnmKideMkHedRNTzJvh98rBxk,20577
126
- python_amazon_ad_api-1.0.1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
127
- python_amazon_ad_api-1.0.1.dist-info/top_level.txt,sha256=nN9twUos-8pkP514ZwpvRU9YL9L2XyQyHsMQFfudGTU,7
128
- python_amazon_ad_api-1.0.1.dist-info/RECORD,,
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,,