amazon-ads-api-v1 0.11.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.
Files changed (373) hide show
  1. amazon_ads_api_v1-0.11.0/.gitignore +38 -0
  2. amazon_ads_api_v1-0.11.0/PKG-INFO +164 -0
  3. amazon_ads_api_v1-0.11.0/README.md +139 -0
  4. amazon_ads_api_v1-0.11.0/pyproject.toml +45 -0
  5. amazon_ads_api_v1-0.11.0/src/ads_api/__init__.py +25 -0
  6. amazon_ads_api_v1-0.11.0/src/ads_api/base.py +208 -0
  7. amazon_ads_api_v1-0.11.0/src/ads_api/client/__init__.py +103 -0
  8. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/__init__.py +132 -0
  9. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/__init__.py +77 -0
  10. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/advertising_accounts.py +96 -0
  11. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/dsp_advertisers.py +79 -0
  12. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/manager_accounts.py +144 -0
  13. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/profiles.py +111 -0
  14. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/terms_token.py +64 -0
  15. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/test_accounts.py +57 -0
  16. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/user_invitations.py +158 -0
  17. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/accounts/user_permissions.py +169 -0
  18. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/__init__.py +61 -0
  19. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/audiences.py +120 -0
  20. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/data_rooms.py +62 -0
  21. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/datasets.py +154 -0
  22. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/identity_deletion.py +42 -0
  23. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/sharing_rules.py +73 -0
  24. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/ads_data_manager/terms.py +55 -0
  25. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/discovery/__init__.py +29 -0
  26. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/discovery/locations.py +65 -0
  27. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/discovery/targetable_entities.py +77 -0
  28. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/exports/__init__.py +5 -0
  29. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/exports/exports.py +180 -0
  30. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/portfolios/__init__.py +5 -0
  31. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/portfolios/portfolios.py +131 -0
  32. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/products/__init__.py +29 -0
  33. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/products/product_eligibility.py +64 -0
  34. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/products/product_metadata.py +43 -0
  35. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/__init__.py +69 -0
  36. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/brand_benchmarks.py +103 -0
  37. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/brand_metrics.py +97 -0
  38. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/mmm_brand_group_overrides.py +57 -0
  39. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/mmm_brand_groups.py +91 -0
  40. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/mmm_reports.py +74 -0
  41. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/reports.py +84 -0
  42. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/reporting/store_insights.py +85 -0
  43. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/__init__.py +109 -0
  44. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/ad_creatives.py +198 -0
  45. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/ad_groups.py +143 -0
  46. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/ads.py +407 -0
  47. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/budget_rules.py +207 -0
  48. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/budget_usage.py +47 -0
  49. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/campaigns.py +143 -0
  50. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/forecasts.py +47 -0
  51. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/insights.py +64 -0
  52. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/optimization_rules.py +182 -0
  53. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/product_targeting_categories.py +162 -0
  54. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/recommendations.py +129 -0
  55. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sb_v4/v3_campaign_migration.py +135 -0
  56. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/__init__.py +157 -0
  57. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/ad_groups.py +318 -0
  58. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/bid_recommendations.py +50 -0
  59. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/brand_safety_list.py +149 -0
  60. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/budget_recommendations.py +47 -0
  61. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/budget_rules.py +207 -0
  62. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/budget_usage.py +47 -0
  63. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/campaigns.py +318 -0
  64. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/creatives.py +188 -0
  65. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/forecasts.py +45 -0
  66. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/headline_recommendations.py +47 -0
  67. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/locations_beta.py +113 -0
  68. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/negative_targeting.py +331 -0
  69. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/optimization_rules_beta.py +222 -0
  70. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/product_ads.py +322 -0
  71. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/reports.py +83 -0
  72. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/snapshots.py +71 -0
  73. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/targeting.py +322 -0
  74. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sd/targeting_recommendations.py +69 -0
  75. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/__init__.py +209 -0
  76. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/ad_groups.py +155 -0
  77. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/budget_recommendation_new_campaigns.py +50 -0
  78. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/budget_recommendations_and_missed_opportunities.py +47 -0
  79. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/budget_rules.py +251 -0
  80. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/budget_rules_recommendation.py +63 -0
  81. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/budget_usage.py +47 -0
  82. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/campaign_negative_keywords.py +207 -0
  83. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/campaign_negative_targeting_clauses.py +209 -0
  84. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/campaign_optimization_rules.py +190 -0
  85. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/campaigns.py +155 -0
  86. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/consolidated_recommendations.py +102 -0
  87. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/keyword_group_targeting_recommendations.py +50 -0
  88. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/keyword_targets.py +63 -0
  89. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/keywords.py +155 -0
  90. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/multi_country_theme_based_bid_recommendations.py +42 -0
  91. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/negative_keywords.py +167 -0
  92. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/negative_targeting_clauses.py +207 -0
  93. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/optimization_rules.py +179 -0
  94. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/product_ads.py +158 -0
  95. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/product_recommendation_service.py +47 -0
  96. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/product_targeting.py +628 -0
  97. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/target_promotion_groups.py +203 -0
  98. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/targeting_clauses.py +167 -0
  99. amazon_ads_api_v1-0.11.0/src/ads_api/client/v0/sp_v3/theme_based_bid_recommendations.py +43 -0
  100. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/__init__.py +163 -0
  101. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/advertiser_accounts.py +82 -0
  102. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/brand_store_edition_publish_versions.py +61 -0
  103. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/brand_store_editions.py +64 -0
  104. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/brand_store_pages.py +37 -0
  105. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/brand_stores.py +35 -0
  106. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/__init__.py +181 -0
  107. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/ad_associations.py +97 -0
  108. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/ad_groups.py +70 -0
  109. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/ads.py +64 -0
  110. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/campaign_forecasts.py +39 -0
  111. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/campaigns.py +70 -0
  112. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/commitment_spends.py +39 -0
  113. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/commitments.py +126 -0
  114. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/deal_preferences.py +69 -0
  115. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/geo_locations.py +37 -0
  116. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/location_indexes.py +107 -0
  117. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_ad_product_prices.py +39 -0
  118. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_ad_products.py +39 -0
  119. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposal_destinations.py +42 -0
  120. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposals.py +82 -0
  121. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposed_deal_forecasts.py +39 -0
  122. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposed_deal_historical_versions.py +44 -0
  123. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposed_deal_revisions.py +60 -0
  124. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_proposed_deals.py +82 -0
  125. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_publishers.py +39 -0
  126. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/supplier_target_items.py +39 -0
  127. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/dsp/targets.py +68 -0
  128. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/manager_accounts.py +78 -0
  129. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/reports.py +65 -0
  130. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/__init__.py +109 -0
  131. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/ad_extensions.py +78 -0
  132. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/ad_groups.py +85 -0
  133. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/ads.py +79 -0
  134. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/advertising_deal_targets.py +82 -0
  135. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/advertising_deals.py +103 -0
  136. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/branded_keywords_pricings.py +39 -0
  137. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/campaigns.py +87 -0
  138. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/keyword_reservation_validations.py +39 -0
  139. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/recommendation_types.py +39 -0
  140. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/recommendations.py +37 -0
  141. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/reserved_target_pricings.py +39 -0
  142. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sb/targets.py +85 -0
  143. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sd/__init__.py +45 -0
  144. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sd/ad_groups.py +85 -0
  145. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sd/ads.py +79 -0
  146. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sd/campaigns.py +87 -0
  147. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sd/targets.py +85 -0
  148. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/selling_accounts.py +39 -0
  149. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/__init__.py +53 -0
  150. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/ad_extensions.py +78 -0
  151. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/ad_groups.py +85 -0
  152. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/ads.py +79 -0
  153. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/campaigns.py +87 -0
  154. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp/targets.py +85 -0
  155. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/__init__.py +53 -0
  156. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/ad_extensions.py +82 -0
  157. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/ad_groups.py +95 -0
  158. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/ads.py +85 -0
  159. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/campaigns.py +95 -0
  160. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/sp_global/targets.py +87 -0
  161. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/st/__init__.py +45 -0
  162. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/st/ad_groups.py +68 -0
  163. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/st/ads.py +79 -0
  164. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/st/campaigns.py +70 -0
  165. amazon_ads_api_v1-0.11.0/src/ads_api/client/v1/st/targets.py +85 -0
  166. amazon_ads_api_v1-0.11.0/src/ads_api/config/__init__.py +1 -0
  167. amazon_ads_api_v1-0.11.0/src/ads_api/config/region.py +18 -0
  168. amazon_ads_api_v1-0.11.0/src/ads_api/config/settings.py +102 -0
  169. amazon_ads_api_v1-0.11.0/src/ads_api/config/token_cache.py +137 -0
  170. amazon_ads_api_v1-0.11.0/src/ads_api/config/token_manager.py +152 -0
  171. amazon_ads_api_v1-0.11.0/src/ads_api/errors.py +160 -0
  172. amazon_ads_api_v1-0.11.0/src/ads_api/models/__init__.py +1 -0
  173. amazon_ads_api_v1-0.11.0/src/ads_api/models/_core/__init__.py +0 -0
  174. amazon_ads_api_v1-0.11.0/src/ads_api/models/_core/base.py +13 -0
  175. amazon_ads_api_v1-0.11.0/src/ads_api/models/_core/lenient_enum.py +23 -0
  176. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/__init__.py +0 -0
  177. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/_shared.py +1690 -0
  178. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/__init__.py +0 -0
  179. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/advertising_accounts.py +178 -0
  180. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/dsp_advertisers.py +74 -0
  181. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/manager_accounts.py +148 -0
  182. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/profiles.py +348 -0
  183. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/terms_token.py +54 -0
  184. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/test_accounts.py +47 -0
  185. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/user_invitations.py +214 -0
  186. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/accounts/user_permissions.py +257 -0
  187. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/__init__.py +0 -0
  188. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/audiences.py +303 -0
  189. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/data_rooms.py +52 -0
  190. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/datasets.py +169 -0
  191. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/identity_deletion.py +39 -0
  192. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/sharing_rules.py +574 -0
  193. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/ads_data_manager/terms.py +31 -0
  194. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/discovery/__init__.py +0 -0
  195. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/discovery/locations.py +26 -0
  196. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/discovery/targetable_entities.py +193 -0
  197. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/exports/__init__.py +0 -0
  198. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/exports/exports.py +112 -0
  199. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/portfolios/__init__.py +0 -0
  200. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/portfolios/portfolios.py +533 -0
  201. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/products/__init__.py +0 -0
  202. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/products/product_eligibility.py +311 -0
  203. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/products/product_metadata.py +148 -0
  204. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/__init__.py +0 -0
  205. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/brand_benchmarks.py +34 -0
  206. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/brand_metrics.py +141 -0
  207. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/mmm_brand_group_overrides.py +3 -0
  208. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/mmm_brand_groups.py +3 -0
  209. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/mmm_reports.py +79 -0
  210. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/reports.py +128 -0
  211. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/reporting/store_insights.py +539 -0
  212. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/__init__.py +0 -0
  213. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/ad_creatives.py +508 -0
  214. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/ad_groups.py +245 -0
  215. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/ads.py +750 -0
  216. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/budget_rules.py +249 -0
  217. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/budget_usage.py +17 -0
  218. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/campaigns.py +577 -0
  219. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/forecasts.py +225 -0
  220. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/insights.py +119 -0
  221. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/optimization_rules.py +224 -0
  222. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/product_targeting_categories.py +187 -0
  223. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/recommendations.py +198 -0
  224. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sb_v4/v3_campaign_migration.py +137 -0
  225. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/__init__.py +0 -0
  226. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/ad_groups.py +207 -0
  227. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/bid_recommendations.py +314 -0
  228. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/brand_safety_list.py +139 -0
  229. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/budget_recommendations.py +87 -0
  230. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/budget_rules.py +245 -0
  231. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/budget_usage.py +17 -0
  232. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/campaigns.py +230 -0
  233. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/creatives.py +471 -0
  234. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/forecasts.py +414 -0
  235. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/headline_recommendations.py +48 -0
  236. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/locations_beta.py +100 -0
  237. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/negative_targeting.py +133 -0
  238. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/optimization_rules_beta.py +134 -0
  239. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/product_ads.py +158 -0
  240. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/reports.py +76 -0
  241. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/snapshots.py +50 -0
  242. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/targeting.py +368 -0
  243. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sd/targeting_recommendations.py +651 -0
  244. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/__init__.py +0 -0
  245. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/ad_groups.py +341 -0
  246. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/budget_recommendation_new_campaigns.py +149 -0
  247. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/budget_recommendations_and_missed_opportunities.py +95 -0
  248. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/budget_rules.py +405 -0
  249. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/budget_rules_recommendation.py +66 -0
  250. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/budget_usage.py +49 -0
  251. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/campaign_negative_keywords.py +246 -0
  252. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/campaign_negative_targeting_clauses.py +262 -0
  253. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/campaign_optimization_rules.py +247 -0
  254. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/campaigns.py +681 -0
  255. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/consolidated_recommendations.py +264 -0
  256. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/keyword_group_targeting_recommendations.py +53 -0
  257. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/keyword_targets.py +169 -0
  258. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/keywords.py +291 -0
  259. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/multi_country_theme_based_bid_recommendations.py +93 -0
  260. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/negative_keywords.py +263 -0
  261. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/negative_targeting_clauses.py +263 -0
  262. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/optimization_rules.py +611 -0
  263. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/product_ads.py +514 -0
  264. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/product_recommendation_service.py +86 -0
  265. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/product_targeting.py +336 -0
  266. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/target_promotion_groups.py +853 -0
  267. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/targeting_clauses.py +449 -0
  268. amazon_ads_api_v1-0.11.0/src/ads_api/models/v0/sp_v3/theme_based_bid_recommendations.py +154 -0
  269. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/__init__.py +0 -0
  270. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/__init__.py +0 -0
  271. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/dsp.py +3210 -0
  272. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/general.py +755 -0
  273. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/sb.py +381 -0
  274. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/sd.py +319 -0
  275. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/sp.py +399 -0
  276. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/sp_global.py +429 -0
  277. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/_shared/st.py +257 -0
  278. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_associations/__init__.py +0 -0
  279. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_associations/dsp.py +123 -0
  280. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_extensions/__init__.py +0 -0
  281. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_extensions/sb.py +204 -0
  282. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_extensions/sp.py +254 -0
  283. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_extensions/sp_global.py +220 -0
  284. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/__init__.py +0 -0
  285. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/dsp.py +543 -0
  286. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/sb.py +173 -0
  287. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/sd.py +265 -0
  288. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/sp.py +234 -0
  289. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/sp_global.py +333 -0
  290. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ad_groups/st.py +199 -0
  291. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/__init__.py +0 -0
  292. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/dsp.py +2069 -0
  293. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/sb.py +1037 -0
  294. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/sd.py +418 -0
  295. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/sp.py +318 -0
  296. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/sp_global.py +339 -0
  297. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/ads/st.py +293 -0
  298. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertiser_accounts/__init__.py +0 -0
  299. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertiser_accounts/general.py +262 -0
  300. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertising_deal_targets/__init__.py +0 -0
  301. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertising_deal_targets/sb.py +105 -0
  302. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertising_deals/__init__.py +0 -0
  303. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/advertising_deals/sb.py +158 -0
  304. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_edition_publish_versions/__init__.py +0 -0
  305. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_edition_publish_versions/general.py +124 -0
  306. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_editions/__init__.py +0 -0
  307. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_editions/general.py +31 -0
  308. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_pages/__init__.py +0 -0
  309. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_store_pages/general.py +1666 -0
  310. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_stores/__init__.py +0 -0
  311. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/brand_stores/general.py +49 -0
  312. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/branded_keywords_pricings/__init__.py +0 -0
  313. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/branded_keywords_pricings/sb.py +94 -0
  314. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaign_forecasts/__init__.py +0 -0
  315. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaign_forecasts/dsp.py +2938 -0
  316. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/__init__.py +0 -0
  317. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/dsp.py +561 -0
  318. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/sb.py +561 -0
  319. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/sd.py +323 -0
  320. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/sp.py +563 -0
  321. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/sp_global.py +561 -0
  322. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/campaigns/st.py +226 -0
  323. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/commitment_spends/__init__.py +0 -0
  324. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/commitment_spends/dsp.py +109 -0
  325. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/commitments/__init__.py +0 -0
  326. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/commitments/dsp.py +194 -0
  327. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/deal_preferences/__init__.py +0 -0
  328. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/deal_preferences/dsp.py +106 -0
  329. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/geo_locations/__init__.py +0 -0
  330. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/geo_locations/dsp.py +163 -0
  331. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/keyword_reservation_validations/__init__.py +0 -0
  332. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/keyword_reservation_validations/sb.py +56 -0
  333. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/location_indexes/__init__.py +0 -0
  334. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/location_indexes/dsp.py +211 -0
  335. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/manager_accounts/__init__.py +0 -0
  336. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/manager_accounts/general.py +131 -0
  337. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/recommendation_types/__init__.py +0 -0
  338. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/recommendation_types/sb.py +27 -0
  339. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/recommendations/__init__.py +0 -0
  340. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/recommendations/sb.py +146 -0
  341. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/reports/__init__.py +0 -0
  342. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/reports/general.py +371 -0
  343. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/reserved_target_pricings/__init__.py +0 -0
  344. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/reserved_target_pricings/sb.py +46 -0
  345. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/selling_accounts/__init__.py +0 -0
  346. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/selling_accounts/general.py +88 -0
  347. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_ad_product_prices/__init__.py +0 -0
  348. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_ad_product_prices/dsp.py +704 -0
  349. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_ad_products/__init__.py +0 -0
  350. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_ad_products/dsp.py +744 -0
  351. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposal_destinations/__init__.py +0 -0
  352. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposal_destinations/dsp.py +79 -0
  353. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposals/__init__.py +0 -0
  354. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposals/dsp.py +360 -0
  355. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_forecasts/__init__.py +0 -0
  356. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_forecasts/dsp.py +792 -0
  357. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_historical_versions/__init__.py +0 -0
  358. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_historical_versions/dsp.py +608 -0
  359. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_revisions/__init__.py +0 -0
  360. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deal_revisions/dsp.py +1171 -0
  361. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deals/__init__.py +0 -0
  362. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_proposed_deals/dsp.py +1075 -0
  363. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_publishers/__init__.py +0 -0
  364. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_publishers/dsp.py +701 -0
  365. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_target_items/__init__.py +0 -0
  366. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/supplier_target_items/dsp.py +132 -0
  367. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/__init__.py +0 -0
  368. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/dsp.py +1573 -0
  369. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/sb.py +480 -0
  370. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/sd.py +580 -0
  371. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/sp.py +587 -0
  372. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/sp_global.py +715 -0
  373. amazon_ads_api_v1-0.11.0/src/ads_api/models/v1/targets/st.py +230 -0
@@ -0,0 +1,38 @@
1
+ # Claude Code settings(本地,不提交)
2
+ .claude/
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # Caches
10
+ .mypy_cache/
11
+ .ruff_cache/
12
+ .pytest_cache/
13
+
14
+ # IDE
15
+ .idea/
16
+
17
+ # Virtual environments
18
+ .venv/
19
+ venv/
20
+ ENV/
21
+
22
+ # uv.lock 由 uv 管理,需提交
23
+
24
+ # OS
25
+ .DS_Store
26
+ *.swp
27
+ *.swo
28
+
29
+ # MiMoCode
30
+ .mimocode/
31
+
32
+ # Distribution / build
33
+ *.egg-info/
34
+ dist/
35
+ build/
36
+
37
+ .dist/
38
+ .cursor
@@ -0,0 +1,164 @@
1
+ Metadata-Version: 2.5
2
+ Name: amazon-ads-api-v1
3
+ Version: 0.11.0
4
+ Summary: Synchronous Amazon Ads API client — v0 and v1 (SP, SB, SD, DSP, ST, and more)
5
+ Project-URL: Homepage, https://github.com/apollosuite/async_amazon_ads_api_v1
6
+ Project-URL: Repository, https://github.com/apollosuite/async_amazon_ads_api_v1
7
+ Project-URL: Issues, https://github.com/apollosuite/async_amazon_ads_api_v1/issues
8
+ Author-email: Jack <zhangwenguang@apollosuite.com>
9
+ License-Expression: MIT
10
+ Keywords: ads,ads-api,advertising,amazon,api-v1,sponsored-brands,sponsored-display,sponsored-products
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Typing :: Typed
19
+ Requires-Python: >=3.13
20
+ Requires-Dist: httpx>=0.28.0
21
+ Requires-Dist: pydantic>=2.10.0
22
+ Provides-Extra: redis
23
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
24
+ Description-Content-Type: text/markdown
25
+
26
+ # amazon-ads-api-v1
27
+
28
+ [![PyPI version](https://img.shields.io/pypi/v/amazon-ads-api-v1)](https://pypi.org/project/amazon-ads-api-v1/)
29
+ [![Python versions](https://img.shields.io/pypi/pyversions/amazon-ads-api-v1)](https://pypi.org/project/amazon-ads-api-v1/)
30
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
31
+
32
+ 纯同步 Amazon Ads API 客户端。PyPI 安装名为 **`amazon-ads-api-v1`**,导入名为 **`ads_api`**。统一覆盖 v0 与 v1(SP、SB、SD、DSP、ST、SP Global、Accounts、Reporting、Ads Data Manager、Exports 等)。原生基于 `httpx.Client`,支持直接调用,无事件循环冲突。
33
+
34
+ ## Installation
35
+
36
+ ```bash
37
+ pip install amazon-ads-api-v1
38
+ # 或
39
+ uv add amazon-ads-api-v1
40
+ ```
41
+
42
+ Redis 缓存支持:
43
+
44
+ ```bash
45
+ pip install "amazon-ads-api-v1[redis]"
46
+ # 或
47
+ uv add "amazon-ads-api-v1[redis]"
48
+ ```
49
+
50
+ ## Quick Start
51
+
52
+ 所有 API 方法仅接受 Pydantic model 实例,不支持 dict。默认 `mode="dict"`,需要模型对象时传 `mode="pydantic"`。
53
+
54
+ ### 使用 Access Token
55
+
56
+ ```python
57
+ from ads_api import AdsClient, AmazonAdsConfig, Region
58
+ from ads_api.models.v1.campaigns.sp import SPQueryCampaignRequest
59
+
60
+
61
+ def main() -> None:
62
+ config = AmazonAdsConfig(
63
+ access_token="your-access-token",
64
+ client_id="your-client-id",
65
+ region=Region.NA,
66
+ )
67
+ body = SPQueryCampaignRequest(
68
+ adProductFilter={"include": ["SPONSORED_PRODUCTS"]},
69
+ stateFilter={"include": ["ENABLED"]},
70
+ )
71
+
72
+ with AdsClient(config) as ads:
73
+ resp = ads.v1.sp.campaigns.query_campaign(body)
74
+ print(resp)
75
+
76
+
77
+ if __name__ == "__main__":
78
+ main()
79
+ ```
80
+
81
+ ### 使用 Refresh Token(自动续期)
82
+
83
+ ```python
84
+ from ads_api import AdsClient, AmazonAdsConfig, Region
85
+ from ads_api.models.v1.campaigns.sp import SPQueryCampaignRequest
86
+
87
+
88
+ def main() -> None:
89
+ config = AmazonAdsConfig(
90
+ client_id="your-client-id",
91
+ refresh_token="your-refresh-token",
92
+ client_secret="your-client-secret",
93
+ region=Region.NA,
94
+ )
95
+ body = SPQueryCampaignRequest(
96
+ adProductFilter={"include": ["SPONSORED_PRODUCTS"]},
97
+ stateFilter={"include": ["ENABLED"]},
98
+ )
99
+
100
+ with AdsClient(config) as ads:
101
+ resp = ads.v1.sp.campaigns.query_campaign(body, mode="pydantic")
102
+ print(resp.model_dump_json(indent=2))
103
+
104
+
105
+ if __name__ == "__main__":
106
+ main()
107
+ ```
108
+
109
+ ## Token Management
110
+
111
+ SDK 内置 OAuth token 生命周期管理。提供 `refresh_token` 与 `client_secret` 后会自动续期;缓存按字段推断:
112
+
113
+ ```python
114
+ from ads_api import AmazonAdsConfig, Region
115
+
116
+ # 自动续期,不使用磁盘 / Redis 缓存
117
+ config = AmazonAdsConfig(
118
+ client_id="your-client-id",
119
+ client_secret="your-client-secret",
120
+ refresh_token="your-refresh-token",
121
+ region=Region.NA,
122
+ )
123
+
124
+ # 文件缓存
125
+ config = AmazonAdsConfig(
126
+ client_id="your-client-id",
127
+ client_secret="your-client-secret",
128
+ refresh_token="your-refresh-token",
129
+ region=Region.NA,
130
+ token_cache_dir="~/.cache/ads_api",
131
+ )
132
+
133
+ # Redis 缓存
134
+ config = AmazonAdsConfig(
135
+ client_id="your-client-id",
136
+ client_secret="your-client-secret",
137
+ refresh_token="your-refresh-token",
138
+ region=Region.NA,
139
+ redis_url="redis://localhost:6379",
140
+ )
141
+ ```
142
+
143
+ ## API 入口
144
+
145
+ ```python
146
+ with AdsClient(config) as ads:
147
+ # v1
148
+ ads.v1.sp.campaigns.query_campaign(body)
149
+ ads.v1.sb.campaigns.query_campaign(body)
150
+ ads.v1.sd.campaigns.query_campaign(body)
151
+ ads.v1.selling_accounts.query_selling_account(body)
152
+ ads.v1.reports.create_report(body)
153
+
154
+ # v0
155
+ ads.v0.accounts.profiles.list_profiles()
156
+ ads.v0.portfolios.list_portfolios()
157
+ ads.v0.sp_v3.campaigns.create_sponsored_products_campaigns(body)
158
+ ads.v0.sb_v4.budget_rules.create_budget_rules_for_sb_campaigns(body)
159
+ ads.v0.sd.creatives.create_creatives(body)
160
+ ```
161
+
162
+ ## License
163
+
164
+ [MIT](LICENSE)
@@ -0,0 +1,139 @@
1
+ # amazon-ads-api-v1
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/amazon-ads-api-v1)](https://pypi.org/project/amazon-ads-api-v1/)
4
+ [![Python versions](https://img.shields.io/pypi/pyversions/amazon-ads-api-v1)](https://pypi.org/project/amazon-ads-api-v1/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
+
7
+ 纯同步 Amazon Ads API 客户端。PyPI 安装名为 **`amazon-ads-api-v1`**,导入名为 **`ads_api`**。统一覆盖 v0 与 v1(SP、SB、SD、DSP、ST、SP Global、Accounts、Reporting、Ads Data Manager、Exports 等)。原生基于 `httpx.Client`,支持直接调用,无事件循环冲突。
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ pip install amazon-ads-api-v1
13
+ # 或
14
+ uv add amazon-ads-api-v1
15
+ ```
16
+
17
+ Redis 缓存支持:
18
+
19
+ ```bash
20
+ pip install "amazon-ads-api-v1[redis]"
21
+ # 或
22
+ uv add "amazon-ads-api-v1[redis]"
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ 所有 API 方法仅接受 Pydantic model 实例,不支持 dict。默认 `mode="dict"`,需要模型对象时传 `mode="pydantic"`。
28
+
29
+ ### 使用 Access Token
30
+
31
+ ```python
32
+ from ads_api import AdsClient, AmazonAdsConfig, Region
33
+ from ads_api.models.v1.campaigns.sp import SPQueryCampaignRequest
34
+
35
+
36
+ def main() -> None:
37
+ config = AmazonAdsConfig(
38
+ access_token="your-access-token",
39
+ client_id="your-client-id",
40
+ region=Region.NA,
41
+ )
42
+ body = SPQueryCampaignRequest(
43
+ adProductFilter={"include": ["SPONSORED_PRODUCTS"]},
44
+ stateFilter={"include": ["ENABLED"]},
45
+ )
46
+
47
+ with AdsClient(config) as ads:
48
+ resp = ads.v1.sp.campaigns.query_campaign(body)
49
+ print(resp)
50
+
51
+
52
+ if __name__ == "__main__":
53
+ main()
54
+ ```
55
+
56
+ ### 使用 Refresh Token(自动续期)
57
+
58
+ ```python
59
+ from ads_api import AdsClient, AmazonAdsConfig, Region
60
+ from ads_api.models.v1.campaigns.sp import SPQueryCampaignRequest
61
+
62
+
63
+ def main() -> None:
64
+ config = AmazonAdsConfig(
65
+ client_id="your-client-id",
66
+ refresh_token="your-refresh-token",
67
+ client_secret="your-client-secret",
68
+ region=Region.NA,
69
+ )
70
+ body = SPQueryCampaignRequest(
71
+ adProductFilter={"include": ["SPONSORED_PRODUCTS"]},
72
+ stateFilter={"include": ["ENABLED"]},
73
+ )
74
+
75
+ with AdsClient(config) as ads:
76
+ resp = ads.v1.sp.campaigns.query_campaign(body, mode="pydantic")
77
+ print(resp.model_dump_json(indent=2))
78
+
79
+
80
+ if __name__ == "__main__":
81
+ main()
82
+ ```
83
+
84
+ ## Token Management
85
+
86
+ SDK 内置 OAuth token 生命周期管理。提供 `refresh_token` 与 `client_secret` 后会自动续期;缓存按字段推断:
87
+
88
+ ```python
89
+ from ads_api import AmazonAdsConfig, Region
90
+
91
+ # 自动续期,不使用磁盘 / Redis 缓存
92
+ config = AmazonAdsConfig(
93
+ client_id="your-client-id",
94
+ client_secret="your-client-secret",
95
+ refresh_token="your-refresh-token",
96
+ region=Region.NA,
97
+ )
98
+
99
+ # 文件缓存
100
+ config = AmazonAdsConfig(
101
+ client_id="your-client-id",
102
+ client_secret="your-client-secret",
103
+ refresh_token="your-refresh-token",
104
+ region=Region.NA,
105
+ token_cache_dir="~/.cache/ads_api",
106
+ )
107
+
108
+ # Redis 缓存
109
+ config = AmazonAdsConfig(
110
+ client_id="your-client-id",
111
+ client_secret="your-client-secret",
112
+ refresh_token="your-refresh-token",
113
+ region=Region.NA,
114
+ redis_url="redis://localhost:6379",
115
+ )
116
+ ```
117
+
118
+ ## API 入口
119
+
120
+ ```python
121
+ with AdsClient(config) as ads:
122
+ # v1
123
+ ads.v1.sp.campaigns.query_campaign(body)
124
+ ads.v1.sb.campaigns.query_campaign(body)
125
+ ads.v1.sd.campaigns.query_campaign(body)
126
+ ads.v1.selling_accounts.query_selling_account(body)
127
+ ads.v1.reports.create_report(body)
128
+
129
+ # v0
130
+ ads.v0.accounts.profiles.list_profiles()
131
+ ads.v0.portfolios.list_portfolios()
132
+ ads.v0.sp_v3.campaigns.create_sponsored_products_campaigns(body)
133
+ ads.v0.sb_v4.budget_rules.create_budget_rules_for_sb_campaigns(body)
134
+ ads.v0.sd.creatives.create_creatives(body)
135
+ ```
136
+
137
+ ## License
138
+
139
+ [MIT](LICENSE)
@@ -0,0 +1,45 @@
1
+ [project]
2
+ name = "amazon-ads-api-v1"
3
+ dynamic = ["version"]
4
+ description = "Synchronous Amazon Ads API client — v0 and v1 (SP, SB, SD, DSP, ST, and more)"
5
+ readme = "README.md"
6
+ requires-python = ">=3.13"
7
+ license = "MIT"
8
+ authors = [{ name = "Jack", email = "zhangwenguang@apollosuite.com" }]
9
+ keywords = ["amazon", "ads", "ads-api", "advertising", "sponsored-products", "sponsored-brands", "sponsored-display", "api-v1"]
10
+ classifiers = [
11
+ "Development Status :: 4 - Beta",
12
+ "Intended Audience :: Developers",
13
+ "License :: OSI Approved :: MIT License",
14
+ "Operating System :: OS Independent",
15
+ "Programming Language :: Python :: 3",
16
+ "Programming Language :: Python :: 3.13",
17
+ "Programming Language :: Python :: 3.14",
18
+ "Typing :: Typed",
19
+ ]
20
+
21
+ dependencies = [
22
+ "httpx>=0.28.0",
23
+ "pydantic>=2.10.0",
24
+ ]
25
+
26
+ [project.optional-dependencies]
27
+ redis = ["redis>=5.0.0"]
28
+
29
+ [project.urls]
30
+ Homepage = "https://github.com/apollosuite/async_amazon_ads_api_v1"
31
+ Repository = "https://github.com/apollosuite/async_amazon_ads_api_v1"
32
+ Issues = "https://github.com/apollosuite/async_amazon_ads_api_v1/issues"
33
+
34
+ [build-system]
35
+ requires = ["hatchling"]
36
+ build-backend = "hatchling.build"
37
+
38
+ [tool.hatch.version]
39
+ path = "src/ads_api/__init__.py"
40
+
41
+ [tool.hatch.build.targets.wheel]
42
+ packages = ["src/ads_api"]
43
+
44
+ [tool.hatch.build.targets.sdist]
45
+ only-include = ["src/ads_api", "README.md", "pyproject.toml"]
@@ -0,0 +1,25 @@
1
+ """Amazon Ads API package (Synchronous)."""
2
+
3
+ from ads_api.base import ClientContext
4
+ from ads_api.client import AdsClient
5
+ from ads_api.client.v0 import AdsClientV0
6
+ from ads_api.client.v1 import AdsClientV1
7
+ from ads_api.config.region import Region
8
+ from ads_api.config.settings import AmazonAdsConfig
9
+ from ads_api.config.token_cache import BaseTokenCache, FileTokenCache, RedisTokenCache
10
+ from ads_api.config.token_manager import TokenCredentials, TokenManager
11
+
12
+ __all__ = [
13
+ "AdsClient",
14
+ "AdsClientV0",
15
+ "AdsClientV1",
16
+ "AmazonAdsConfig",
17
+ "BaseTokenCache",
18
+ "ClientContext",
19
+ "FileTokenCache",
20
+ "RedisTokenCache",
21
+ "Region",
22
+ "TokenCredentials",
23
+ "TokenManager",
24
+ ]
25
+ __version__ = "0.11.0"
@@ -0,0 +1,208 @@
1
+ """Shared HTTP session and base resource class (Synchronous)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import email.utils
6
+ import logging
7
+ import random
8
+ import time
9
+ from collections.abc import Sequence
10
+ from datetime import UTC, datetime
11
+ from typing import Any, Literal, cast, overload
12
+
13
+ import httpx
14
+ from pydantic import BaseModel, TypeAdapter, ValidationError
15
+
16
+ from ads_api.config.settings import AmazonAdsConfig
17
+ from ads_api.errors import raise_for_status
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+ type ResponseMode = Literal["dict", "pydantic", "raw"]
22
+
23
+
24
+ def _parse_retry_after(resp: httpx.Response | None, fallback_seconds: float, max_wait: float = 60.0) -> float:
25
+ """Parse the Retry-After header as seconds or HTTP-Date with fallback."""
26
+ if resp is None:
27
+ return fallback_seconds
28
+ headers = getattr(resp, "headers", None)
29
+ if headers is None:
30
+ return fallback_seconds
31
+ raw = headers.get("Retry-After")
32
+ if not raw:
33
+ return fallback_seconds
34
+ try:
35
+ seconds = float(raw)
36
+ if seconds >= 0:
37
+ return min(seconds + random.uniform(0, 0.5), max_wait)
38
+ except (ValueError, TypeError):
39
+ pass
40
+ try:
41
+ target_dt = email.utils.parsedate_to_datetime(str(raw))
42
+ now_dt = datetime.now(UTC)
43
+ delta = (target_dt - now_dt).total_seconds()
44
+ if delta > 0:
45
+ return min(delta + random.uniform(0, 0.5), max_wait)
46
+ except Exception:
47
+ pass
48
+ return fallback_seconds
49
+
50
+
51
+ class ClientContext:
52
+ """Shared HTTP state for all resource instances."""
53
+
54
+ __slots__ = ("config", "_client")
55
+
56
+ def __init__(self, config: AmazonAdsConfig) -> None:
57
+ self.config: AmazonAdsConfig = config
58
+ self._client: httpx.Client | None = None
59
+
60
+ def get_client(self) -> httpx.Client:
61
+ if self._client is None:
62
+ self._client = httpx.Client(base_url=self.config.base_url, timeout=httpx.Timeout(self.config.timeout))
63
+ return self._client
64
+
65
+ def close(self) -> None:
66
+ if self._client is not None:
67
+ self._client.close()
68
+ self._client = None
69
+ if self.config._token_manager is not None:
70
+ self.config._token_manager.close()
71
+
72
+ def __enter__(self) -> ClientContext:
73
+ return self
74
+
75
+ def __exit__(self, *args: Any) -> None:
76
+ self.close()
77
+
78
+
79
+ class BaseResource:
80
+ """HTTP helpers shared by generated resource classes."""
81
+
82
+ __slots__ = ("_ctx", "exclude_unset", "exclude_none")
83
+
84
+ def __init__(self, ctx: ClientContext, exclude_unset: bool = True, exclude_none: bool = True) -> None:
85
+ self._ctx: ClientContext = ctx
86
+ self.exclude_unset = exclude_unset
87
+ self.exclude_none = exclude_none
88
+
89
+ @overload
90
+ def dump_json(self, body: None) -> dict[str, Any]: ...
91
+ @overload
92
+ def dump_json(self, body: BaseModel) -> dict[str, Any]: ...
93
+ @overload
94
+ def dump_json(self, body: Sequence[BaseModel]) -> list[Any]: ...
95
+ def dump_json(self, body: BaseModel | Sequence[BaseModel] | None) -> dict[str, Any] | list[Any]:
96
+ """Serialize a request body. ``None`` becomes ``{}`` so optional OpenAPI bodies omit fields."""
97
+ if isinstance(body, BaseModel):
98
+ return body.model_dump(mode="json", exclude_unset=self.exclude_unset, exclude_none=self.exclude_none)
99
+ if body is None:
100
+ return {}
101
+ return [
102
+ item.model_dump(mode="json", exclude_unset=self.exclude_unset, exclude_none=self.exclude_none)
103
+ for item in body
104
+ ]
105
+
106
+ def _request(
107
+ self,
108
+ method: str,
109
+ path: str,
110
+ *,
111
+ params: dict[str, Any] | None = None,
112
+ json: dict[str, Any] | list[Any] | None = None,
113
+ headers: dict[str, Any] | None = None,
114
+ ) -> httpx.Response:
115
+ client = self._ctx.get_client()
116
+ if self._ctx.config._token_manager is not None:
117
+ token: str = self._ctx.config.refresh_access_token()
118
+ else:
119
+ token = self._ctx.config.access_token or ""
120
+ headers = {
121
+ "Authorization": f"Bearer {token}",
122
+ "Accept": "application/json",
123
+ "Amazon-Ads-ClientId": self._ctx.config.client_id,
124
+ "Amazon-Advertising-API-ClientId": self._ctx.config.client_id,
125
+ **(headers or {}),
126
+ }
127
+ if self._ctx.config.profile_id is not None:
128
+ headers["Amazon-Advertising-API-Scope"] = self._ctx.config.profile_id
129
+ if self._ctx.config.account_id is not None:
130
+ headers["Amazon-Ads-AccountId"] = self._ctx.config.account_id
131
+ for attempt in range(self._ctx.config.max_retries):
132
+ try:
133
+ resp = client.request(
134
+ method=method,
135
+ url=path,
136
+ params=params,
137
+ json=json,
138
+ headers=headers,
139
+ )
140
+ if resp.is_error:
141
+ if resp.status_code == 401 and self._ctx.config._token_manager is not None and attempt == 0:
142
+ token = self._ctx.config.refresh_access_token(force=True)
143
+ headers["Authorization"] = f"Bearer {token}"
144
+ continue
145
+ if resp.status_code in (429, 503, 504) and attempt < self._ctx.config.max_retries - 1:
146
+ fallback = 2**attempt + random.uniform(0, 1)
147
+ wait_time = _parse_retry_after(resp, fallback_seconds=fallback)
148
+ logger.warning("Rate limit exceeded, retrying in %.2f seconds %s", wait_time, resp.status_code)
149
+ time.sleep(wait_time)
150
+ continue
151
+ logger.error("%s %s", resp.status_code, resp.text)
152
+ raise_for_status(resp)
153
+ return resp
154
+ except (httpx.ConnectError, httpx.TimeoutException, httpx.RemoteProtocolError):
155
+ if attempt < self._ctx.config.max_retries - 1:
156
+ time.sleep(2**attempt + random.uniform(0, 1))
157
+ continue
158
+ raise
159
+ raise RuntimeError("Retry loop exited unexpectedly")
160
+
161
+ @overload
162
+ def _response[T: BaseModel](
163
+ self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["dict"] = "dict"
164
+ ) -> dict[str, Any]: ...
165
+ @overload
166
+ def _response[T: BaseModel](self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["pydantic"]) -> T: ...
167
+ @overload
168
+ def _response[T: BaseModel](
169
+ self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["raw"]
170
+ ) -> httpx.Response: ...
171
+ def _response[T: BaseModel](
172
+ self, model_cls: type[T], resp: httpx.Response, *, mode: ResponseMode = "dict"
173
+ ) -> T | dict[str, Any] | httpx.Response:
174
+ if mode == "raw":
175
+ return resp
176
+ if mode == "dict":
177
+ return cast(dict[str, Any], resp.json())
178
+ try:
179
+ return model_cls.model_validate_json(resp.text)
180
+ except ValidationError:
181
+ logger.error("Failed to parse response as %s: %s", model_cls.__name__, resp.text)
182
+ raise
183
+
184
+ @overload
185
+ def _response_list[T: BaseModel](
186
+ self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["dict"] = "dict"
187
+ ) -> list[dict[str, Any]]: ...
188
+ @overload
189
+ def _response_list[T: BaseModel](
190
+ self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["pydantic"]
191
+ ) -> list[T]: ...
192
+ @overload
193
+ def _response_list[T: BaseModel](
194
+ self, model_cls: type[T], resp: httpx.Response, *, mode: Literal["raw"]
195
+ ) -> httpx.Response: ...
196
+ def _response_list[T: BaseModel](
197
+ self, model_cls: type[T], resp: httpx.Response, *, mode: ResponseMode = "dict"
198
+ ) -> list[T] | list[dict[str, Any]] | httpx.Response:
199
+ if mode == "raw":
200
+ return resp
201
+ if mode == "dict":
202
+ return cast(list[dict[str, Any]], resp.json())
203
+ try:
204
+ list_type: Any = list[model_cls] # type: ignore[valid-type]
205
+ return TypeAdapter[list[T]](list_type).validate_json(resp.text)
206
+ except ValidationError:
207
+ logger.error("Failed to parse response list as %s: %s", model_cls.__name__, resp.text)
208
+ raise