peddler 2.4.4 → 3.0.0.beta1

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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +406 -134
  3. data/lib/peddler/access_token.rb +76 -0
  4. data/lib/peddler/api/amazon_warehousing_and_distribution_2024_05_09.rb +80 -0
  5. data/lib/peddler/api/aplus_content_2020_11_01.rb +208 -0
  6. data/lib/peddler/api/application_management_2023_11_30.rb +25 -0
  7. data/lib/peddler/api/catalog_items_2020_12_01.rb +70 -0
  8. data/lib/peddler/api/catalog_items_2022_04_01.rb +83 -0
  9. data/lib/peddler/api/catalog_items_v0.rb +90 -0
  10. data/lib/peddler/api/data_kiosk_2023_11_15.rb +92 -0
  11. data/lib/peddler/api/easy_ship_2022_03_23.rb +108 -0
  12. data/lib/peddler/api/fba_inbound_eligibility_v1.rb +36 -0
  13. data/lib/peddler/api/fba_inventory_v1.rb +106 -0
  14. data/lib/peddler/api/feeds_2021_06_30.rb +104 -0
  15. data/lib/peddler/api/finances_v0.rb +121 -0
  16. data/lib/peddler/api/fulfillment_inbound_2024_03_20.rb +660 -0
  17. data/lib/peddler/api/fulfillment_inbound_v0.rb +314 -0
  18. data/lib/peddler/api/fulfillment_outbound_2020_07_01.rb +222 -0
  19. data/lib/peddler/api/listings_items_2020_09_01.rb +84 -0
  20. data/lib/peddler/api/listings_items_2021_08_01.rb +154 -0
  21. data/lib/peddler/api/listings_restrictions_2021_08_01.rb +37 -0
  22. data/lib/peddler/api/merchant_fulfillment_v0.rb +64 -0
  23. data/lib/peddler/api/messaging_v1.rb +241 -0
  24. data/lib/peddler/api/notifications_v1.rb +114 -0
  25. data/lib/peddler/api/orders_v0.rb +264 -0
  26. data/lib/peddler/api/product_fees_v0.rb +69 -0
  27. data/lib/peddler/api/product_pricing_2022_05_01.rb +43 -0
  28. data/lib/peddler/api/product_pricing_v0.rb +144 -0
  29. data/lib/peddler/api/product_type_definitions_2020_09_01.rb +75 -0
  30. data/lib/peddler/api/replenishment_2022_11_07.rb +45 -0
  31. data/lib/peddler/api/reports_2021_06_30.rb +139 -0
  32. data/lib/peddler/api/sales_v1.rb +69 -0
  33. data/lib/peddler/api/sellers_v1.rb +33 -0
  34. data/lib/peddler/api/services_v1.rb +308 -0
  35. data/lib/peddler/api/shipment_invoicing_v0.rb +46 -0
  36. data/lib/peddler/api/shipping_v1.rb +107 -0
  37. data/lib/peddler/api/shipping_v2.rb +267 -0
  38. data/lib/peddler/api/solicitations_v1.rb +53 -0
  39. data/lib/peddler/api/supply_sources_2020_07_01.rb +82 -0
  40. data/lib/peddler/api/tokens_2021_03_01.rb +30 -0
  41. data/lib/peddler/api/uploads_2020_11_01.rb +40 -0
  42. data/lib/peddler/api/vendor_direct_fulfillment_inventory_v1.rb +24 -0
  43. data/lib/peddler/api/vendor_direct_fulfillment_orders_2021_12_28.rb +72 -0
  44. data/lib/peddler/api/vendor_direct_fulfillment_orders_v1.rb +72 -0
  45. data/lib/peddler/api/vendor_direct_fulfillment_payments_v1.rb +23 -0
  46. data/lib/peddler/api/vendor_direct_fulfillment_sandbox_test_data_2021_10_28.rb +35 -0
  47. data/lib/peddler/api/vendor_direct_fulfillment_shipping_2021_12_28.rb +177 -0
  48. data/lib/peddler/api/vendor_direct_fulfillment_shipping_v1.rb +165 -0
  49. data/lib/peddler/api/vendor_direct_fulfillment_transactions_2021_12_28.rb +24 -0
  50. data/lib/peddler/api/vendor_direct_fulfillment_transactions_v1.rb +24 -0
  51. data/lib/peddler/api/vendor_invoices_v1.rb +22 -0
  52. data/lib/peddler/api/vendor_orders_v1.rb +148 -0
  53. data/lib/peddler/api/vendor_shipments_v1.rb +120 -0
  54. data/lib/peddler/api/vendor_transaction_status_v1.rb +24 -0
  55. data/lib/peddler/api.rb +115 -0
  56. data/lib/peddler/error.rb +30 -0
  57. data/lib/peddler/region.rb +30 -0
  58. data/lib/peddler/version.rb +1 -1
  59. data/lib/peddler.rb +52 -1
  60. metadata +70 -80
  61. data/lib/mws/easy_ship/client.rb +0 -93
  62. data/lib/mws/easy_ship.rb +0 -3
  63. data/lib/mws/feeds/client.rb +0 -122
  64. data/lib/mws/feeds.rb +0 -3
  65. data/lib/mws/finances/client.rb +0 -82
  66. data/lib/mws/finances.rb +0 -3
  67. data/lib/mws/fulfillment_inbound_shipment/client.rb +0 -388
  68. data/lib/mws/fulfillment_inbound_shipment.rb +0 -3
  69. data/lib/mws/fulfillment_inventory/client.rb +0 -57
  70. data/lib/mws/fulfillment_inventory.rb +0 -3
  71. data/lib/mws/fulfillment_outbound_shipment/client.rb +0 -211
  72. data/lib/mws/fulfillment_outbound_shipment.rb +0 -3
  73. data/lib/mws/merchant_fulfillment/client.rb +0 -87
  74. data/lib/mws/merchant_fulfillment.rb +0 -3
  75. data/lib/mws/off_amazon_payments.rb +0 -3
  76. data/lib/mws/orders/client.rb +0 -120
  77. data/lib/mws/orders.rb +0 -3
  78. data/lib/mws/products/client.rb +0 -268
  79. data/lib/mws/products.rb +0 -3
  80. data/lib/mws/recommendations/client.rb +0 -72
  81. data/lib/mws/recommendations.rb +0 -3
  82. data/lib/mws/reports/client.rb +0 -236
  83. data/lib/mws/reports.rb +0 -3
  84. data/lib/mws/sellers/client.rb +0 -44
  85. data/lib/mws/sellers.rb +0 -3
  86. data/lib/mws/shipment_invoicing/client.rb +0 -74
  87. data/lib/mws/shipment_invoicing.rb +0 -3
  88. data/lib/mws/subscriptions/client.rb +0 -179
  89. data/lib/mws/subscriptions.rb +0 -3
  90. data/lib/mws.rb +0 -29
  91. data/lib/peddler/client.rb +0 -159
  92. data/lib/peddler/errors/builder.rb +0 -64
  93. data/lib/peddler/errors/class_generator.rb +0 -40
  94. data/lib/peddler/errors/error.rb +0 -45
  95. data/lib/peddler/errors/parser.rb +0 -28
  96. data/lib/peddler/flat_file_parser.rb +0 -56
  97. data/lib/peddler/headers.rb +0 -102
  98. data/lib/peddler/marketplace.rb +0 -78
  99. data/lib/peddler/operation.rb +0 -78
  100. data/lib/peddler/parser.rb +0 -33
  101. data/lib/peddler/structured_list.rb +0 -23
  102. data/lib/peddler/vcr_matcher.rb +0 -97
  103. data/lib/peddler/xml_parser.rb +0 -38
  104. data/lib/peddler/xml_response_parser.rb +0 -25
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "http"
4
+
5
+ module Peddler
6
+ # Requests a Login with Amazon (LWA) access token that authorizes your application to take actions on behalf of a
7
+ # selling partner. An LWA access token expires one hour after it is issued.
8
+ #
9
+ # @see https://developer-docs.amazon.com/sp-api/docs/connecting-to-the-selling-partner-api
10
+ class AccessToken
11
+ URL = "https://api.amazon.com/auth/o2/token"
12
+
13
+ attr_reader :client_id, :client_secret, :refresh_token, :scope
14
+
15
+ class << self
16
+ # Requests an access token
17
+ #
18
+ # @param client_id [String]
19
+ # @param client_secret [String]
20
+ # @param refresh_token [String]
21
+ # @param scope [String]
22
+ def request(client_id: ENV["LWA_CLIENT_ID"], client_secret: ENV["LWA_CLIENT_SECRET"], refresh_token: nil,
23
+ scope: nil)
24
+ new(client_id: client_id, client_secret: client_secret, refresh_token: refresh_token, scope: scope).request
25
+ end
26
+ end
27
+
28
+ # @param client_id [String]
29
+ # @param client_secret [String]
30
+ # @param refresh_token [String]
31
+ # @param scope [String]
32
+ def initialize(client_id: ENV["LWA_CLIENT_ID"], client_secret: ENV["LWA_CLIENT_SECRET"], refresh_token: nil,
33
+ scope: nil)
34
+ @client_id = client_id
35
+ @client_secret = client_secret
36
+ @refresh_token = refresh_token
37
+ @scope = scope
38
+
39
+ validate_lwa_credentials!
40
+ validate_exclusive_token_or_scope!
41
+ end
42
+
43
+ def request
44
+ response = HTTP.post(URL, form: params)
45
+ response.parse.fetch("access_token")
46
+ end
47
+
48
+ private
49
+
50
+ def validate_lwa_credentials!
51
+ if client_id.nil? || client_secret.nil?
52
+ raise ArgumentError, "Provide client_id and client_secret."
53
+ end
54
+ end
55
+
56
+ def validate_exclusive_token_or_scope!
57
+ if @refresh_token.nil? == @scope.nil?
58
+ raise ArgumentError, "Provide either refresh_token or scope, not both."
59
+ end
60
+ end
61
+
62
+ def params
63
+ {
64
+ grant_type: grant_type,
65
+ refresh_token: refresh_token,
66
+ scope: scope,
67
+ client_id: client_id,
68
+ client_secret: client_secret,
69
+ }.compact
70
+ end
71
+
72
+ def grant_type
73
+ scope ? "client_credentials" : "refresh_token"
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # The Selling Partner API for Amazon Warehousing and Distribution
8
+ #
9
+ # The Selling Partner API for Amazon Warehousing and Distribution (AWD) provides programmatic access to information
10
+ # about AWD shipments and inventory.
11
+ class AmazonWarehousingAndDistribution20240509 < API
12
+ # Retrieves an AWD inbound shipment.
13
+ #
14
+ # @param [String] shipment_id ID for the shipment. A shipment contains the cases being inbounded.
15
+ # @param [String] sku_quantities If equal to `SHOW`, the response includes the shipment SKU quantity details.
16
+ # Defaults to `HIDE`, in which case the response does not contain SKU quantities
17
+ # @return [Hash] The API response
18
+ def get_inbound_shipment(shipment_id, sku_quantities: nil)
19
+ path = "/awd/2024-05-09/inboundShipments/#{shipment_id}"
20
+ params = {
21
+ "skuQuantities" => sku_quantities,
22
+ }.compact
23
+
24
+ rate_limit(2.0).get(path, params:)
25
+ end
26
+
27
+ # Retrieves a summary of all the inbound AWD shipments associated with a merchant, with the ability to apply
28
+ # optional filters.
29
+ #
30
+ # @param [String] sort_by Field to sort results by. By default, the response will be sorted by UPDATED_AT.
31
+ # @param [String] sort_order Sort the response in ASCENDING or DESCENDING order. By default, the response will be
32
+ # sorted in DESCENDING order.
33
+ # @param [String] shipment_status Filter by inbound shipment status.
34
+ # @param [String] updated_after List the inbound shipments that were updated after a certain time (inclusive). The
35
+ # date must be in [ISO 8601](https://developer-docs.amazon.com/sp-api/docs/iso-8601) format.
36
+ # @param [String] updated_before List the inbound shipments that were updated before a certain time (inclusive).
37
+ # The date must be in [ISO 8601](https://developer-docs.amazon.com/sp-api/docs/iso-8601) format.
38
+ # @param [Integer] max_results Maximum number of results to return.
39
+ # @param [String] next_token Token to retrieve the next set of paginated results.
40
+ # @return [Hash] The API response
41
+ def list_inbound_shipments(sort_by: nil, sort_order: nil, shipment_status: nil, updated_after: nil,
42
+ updated_before: nil, max_results: nil, next_token: nil)
43
+ path = "/awd/2024-05-09/inboundShipments"
44
+ params = {
45
+ "sortBy" => sort_by,
46
+ "sortOrder" => sort_order,
47
+ "shipmentStatus" => shipment_status,
48
+ "updatedAfter" => updated_after,
49
+ "updatedBefore" => updated_before,
50
+ "maxResults" => max_results,
51
+ "nextToken" => next_token,
52
+ }.compact
53
+
54
+ rate_limit(1.0).get(path, params:)
55
+ end
56
+
57
+ # Lists AWD inventory associated with a merchant with the ability to apply optional filters.
58
+ #
59
+ # @param [String] sku Filter by seller or merchant SKU for the item.
60
+ # @param [String] sort_order Sort the response in `ASCENDING` or `DESCENDING` order.
61
+ # @param [String] details Set to `SHOW` to return summaries with additional inventory details. Defaults to `HIDE,`
62
+ # which returns only inventory summary totals.
63
+ # @param [String] next_token Token to retrieve the next set of paginated results.
64
+ # @param [Integer] max_results Maximum number of results to return.
65
+ # @return [Hash] The API response
66
+ def list_inventory(sku: nil, sort_order: nil, details: nil, next_token: nil, max_results: nil)
67
+ path = "/awd/2024-05-09/inventory"
68
+ params = {
69
+ "sku" => sku,
70
+ "sortOrder" => sort_order,
71
+ "details" => details,
72
+ "nextToken" => next_token,
73
+ "maxResults" => max_results,
74
+ }.compact
75
+
76
+ rate_limit(2.0).get(path, params:)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,208 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # Selling Partner API for A+ Content Management
8
+ #
9
+ # With the A+ Content API, you can build applications that help selling partners add rich marketing content to their
10
+ # Amazon product detail pages. A+ content helps selling partners share their brand and product story, which helps
11
+ # buyers make informed purchasing decisions. Selling partners assemble content by choosing from content modules and
12
+ # adding images and text.
13
+ class AplusContent20201101 < API
14
+ # Returns a list of all A+ Content documents assigned to a selling partner. This operation returns only the
15
+ # metadata of the A+ Content documents. Call the getContentDocument operation to get the actual contents of the A+
16
+ # Content documents.
17
+ #
18
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
19
+ # @param [String] page_token A page token from the nextPageToken response element returned by your previous call
20
+ # to this operation. nextPageToken is returned when the results of a call exceed the page size. To get the next
21
+ # page of results, call the operation and include pageToken as the only parameter. Specifying pageToken with any
22
+ # other parameter will cause the request to fail. When no nextPageToken value is returned there are no more
23
+ # pages to return. A pageToken value is not usable across different operations.
24
+ # @return [Hash] The API response
25
+ def search_content_documents(marketplace_id, page_token: nil)
26
+ path = "/aplus/2020-11-01/contentDocuments"
27
+ params = {
28
+ "marketplaceId" => marketplace_id,
29
+ "pageToken" => page_token,
30
+ }.compact
31
+
32
+ rate_limit(10.0).get(path, params:)
33
+ end
34
+
35
+ # Creates a new A+ Content document.
36
+ #
37
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
38
+ # @param [Hash] post_content_document_request The content document request details.
39
+ # @return [Hash] The API response
40
+ def create_content_document(marketplace_id, post_content_document_request)
41
+ path = "/aplus/2020-11-01/contentDocuments"
42
+ body = post_content_document_request
43
+ params = {
44
+ "marketplaceId" => marketplace_id,
45
+ }.compact
46
+
47
+ rate_limit(10.0).post(path, body:, params:)
48
+ end
49
+
50
+ # Returns an A+ Content document, if available.
51
+ #
52
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
53
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
54
+ # any A+ Content identifier.
55
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
56
+ # @param [Array<String>] included_data_set The set of A+ Content data types to include in the response.
57
+ # @return [Hash] The API response
58
+ def get_content_document(content_reference_key, marketplace_id, included_data_set)
59
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}"
60
+ params = {
61
+ "marketplaceId" => marketplace_id,
62
+ "includedDataSet" => included_data_set,
63
+ }.compact
64
+
65
+ rate_limit(10.0).get(path, params:)
66
+ end
67
+
68
+ # Updates an existing A+ Content document.
69
+ #
70
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
71
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
72
+ # any A+ Content identifier.
73
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
74
+ # @param [Hash] post_content_document_request The content document request details.
75
+ # @return [Hash] The API response
76
+ def update_content_document(content_reference_key, marketplace_id, post_content_document_request)
77
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}"
78
+ body = post_content_document_request
79
+ params = {
80
+ "marketplaceId" => marketplace_id,
81
+ }.compact
82
+
83
+ rate_limit(10.0).post(path, body:, params:)
84
+ end
85
+
86
+ # Returns a list of ASINs related to the specified A+ Content document, if available. If you do not include the
87
+ # asinSet parameter, the operation returns all ASINs related to the content document.
88
+ #
89
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
90
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
91
+ # any A+ Content identifier.
92
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
93
+ # @param [Array<String>] included_data_set The set of A+ Content data types to include in the response. If you do
94
+ # not include this parameter, the operation returns the related ASINs without metadata.
95
+ # @param [Array<String>] asin_set The set of ASINs.
96
+ # @param [String] page_token A page token from the nextPageToken response element returned by your previous call
97
+ # to this operation. nextPageToken is returned when the results of a call exceed the page size. To get the next
98
+ # page of results, call the operation and include pageToken as the only parameter. Specifying pageToken with any
99
+ # other parameter will cause the request to fail. When no nextPageToken value is returned there are no more
100
+ # pages to return. A pageToken value is not usable across different operations.
101
+ # @return [Hash] The API response
102
+ def list_content_document_asin_relations(content_reference_key, marketplace_id, included_data_set: nil,
103
+ asin_set: nil, page_token: nil)
104
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}/asins"
105
+ params = {
106
+ "marketplaceId" => marketplace_id,
107
+ "includedDataSet" => included_data_set,
108
+ "asinSet" => asin_set,
109
+ "pageToken" => page_token,
110
+ }.compact
111
+
112
+ rate_limit(10.0).get(path, params:)
113
+ end
114
+
115
+ # Replaces all ASINs related to the specified A+ Content document, if available. This may add or remove ASINs,
116
+ # depending on the current set of related ASINs. Removing an ASIN has the side effect of suspending the content
117
+ # document from that ASIN.
118
+ #
119
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
120
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
121
+ # any A+ content identifier.
122
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
123
+ # @param [Hash] post_content_document_asin_relations_request The content document ASIN relations request details.
124
+ # @return [Hash] The API response
125
+ def post_content_document_asin_relations(content_reference_key, marketplace_id,
126
+ post_content_document_asin_relations_request)
127
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}/asins"
128
+ body = post_content_document_asin_relations_request
129
+ params = {
130
+ "marketplaceId" => marketplace_id,
131
+ }.compact
132
+
133
+ rate_limit(10.0).post(path, body:, params:)
134
+ end
135
+
136
+ # Checks if the A+ Content document is valid for use on a set of ASINs.
137
+ #
138
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
139
+ # @param [Array<String>] asin_set The set of ASINs.
140
+ # @param [Hash] post_content_document_request The content document request details.
141
+ # @return [Hash] The API response
142
+ def validate_content_document_asin_relations(marketplace_id, post_content_document_request, asin_set: nil)
143
+ path = "/aplus/2020-11-01/contentAsinValidations"
144
+ body = post_content_document_request
145
+ params = {
146
+ "marketplaceId" => marketplace_id,
147
+ "asinSet" => asin_set,
148
+ }.compact
149
+
150
+ rate_limit(10.0).post(path, body:, params:)
151
+ end
152
+
153
+ # Searches for A+ Content publishing records, if available.
154
+ #
155
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
156
+ # @param [String] asin The Amazon Standard Identification Number (ASIN).
157
+ # @param [String] page_token A page token from the nextPageToken response element returned by your previous call
158
+ # to this operation. nextPageToken is returned when the results of a call exceed the page size. To get the next
159
+ # page of results, call the operation and include pageToken as the only parameter. Specifying pageToken with any
160
+ # other parameter will cause the request to fail. When no nextPageToken value is returned there are no more
161
+ # pages to return. A pageToken value is not usable across different operations.
162
+ # @return [Hash] The API response
163
+ def search_content_publish_records(marketplace_id, asin, page_token: nil)
164
+ path = "/aplus/2020-11-01/contentPublishRecords"
165
+ params = {
166
+ "marketplaceId" => marketplace_id,
167
+ "asin" => asin,
168
+ "pageToken" => page_token,
169
+ }.compact
170
+
171
+ rate_limit(10.0).get(path, params:)
172
+ end
173
+
174
+ # Submits an A+ Content document for review, approval, and publishing.
175
+ #
176
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
177
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
178
+ # any A+ content identifier.
179
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
180
+ # @return [Hash] The API response
181
+ def post_content_document_approval_submission(content_reference_key, marketplace_id)
182
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}/approvalSubmissions"
183
+ params = {
184
+ "marketplaceId" => marketplace_id,
185
+ }.compact
186
+
187
+ rate_limit(10.0).post(path, params:)
188
+ end
189
+
190
+ # Submits a request to suspend visible A+ Content. This neither deletes the content document nor the ASIN
191
+ # relations.
192
+ #
193
+ # @param [String] content_reference_key The unique reference key for the A+ Content document. A content reference
194
+ # key cannot form a permalink and may change in the future. A content reference key is not guaranteed to match
195
+ # any A+ content identifier.
196
+ # @param [String] marketplace_id The identifier for the marketplace where the A+ Content is published.
197
+ # @return [Hash] The API response
198
+ def post_content_document_suspend_submission(content_reference_key, marketplace_id)
199
+ path = "/aplus/2020-11-01/contentDocuments/#{content_reference_key}/suspendSubmissions"
200
+ params = {
201
+ "marketplaceId" => marketplace_id,
202
+ }.compact
203
+
204
+ rate_limit(10.0).post(path, params:)
205
+ end
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # Selling Partner API for Application Management
8
+ #
9
+ # The Selling Partner API for Application Management lets you programmatically update the client secret on
10
+ # registered applications.
11
+ class ApplicationManagement20231130 < API
12
+ # Rotates application client secrets for a developer application. Developers must register a destination queue in
13
+ # the developer console before calling this operation. When this operation is called a new client secret is
14
+ # generated and sent to the developer-registered queue. For more information, refer to [Rotate your application
15
+ # client
16
+ # secret](https://developer-docs.amazon.com/sp-api/v0/docs/application-management-api-v2023-11-30-use-case-guide#tutorial-rotate-your-applications-client-secret).
17
+ # @return [Hash] The API response
18
+ def rotate_application_client_secret
19
+ path = "/applications/2023-11-30/clientSecret"
20
+
21
+ rate_limit(0.0167).post(path)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # Selling Partner API for Catalog Items
8
+ #
9
+ # The Selling Partner API for Catalog Items provides programmatic access to information about items in the Amazon
10
+ # catalog. For more information, see the [Catalog Items API Use Case
11
+ # Guide](doc:catalog-items-api-v2020-12-01-use-case-guide).
12
+ class CatalogItems20201201 < API
13
+ # Search for and return a list of Amazon catalog items and associated information.
14
+ #
15
+ # @param [Array<String>] keywords A comma-delimited list of words or item identifiers to search the Amazon catalog
16
+ # for.
17
+ # @param [Array<String>] marketplace_ids A comma-delimited list of Amazon marketplace identifiers for the request.
18
+ # @param [Array<String>] included_data A comma-delimited list of data sets to include in the response. Default:
19
+ # summaries.
20
+ # @param [Array<String>] brand_names A comma-delimited list of brand names to limit the search to.
21
+ # @param [Array<String>] classification_ids A comma-delimited list of classification identifiers to limit the
22
+ # search to.
23
+ # @param [Integer] page_size Number of results to be returned per page.
24
+ # @param [String] page_token A token to fetch a certain page when there are multiple pages worth of results.
25
+ # @param [String] keywords_locale The language the keywords are provided in. Defaults to the primary locale of the
26
+ # marketplace.
27
+ # @param [String] locale Locale for retrieving localized summaries. Defaults to the primary locale of the
28
+ # marketplace.
29
+ # @return [Hash] The API response
30
+ def search_catalog_items(keywords, marketplace_ids, included_data: nil, brand_names: nil,
31
+ classification_ids: nil, page_size: nil, page_token: nil, keywords_locale: nil, locale: nil)
32
+ path = "/catalog/2020-12-01/items"
33
+ params = {
34
+ "keywords" => keywords,
35
+ "marketplaceIds" => marketplace_ids,
36
+ "includedData" => included_data,
37
+ "brandNames" => brand_names,
38
+ "classificationIds" => classification_ids,
39
+ "pageSize" => page_size,
40
+ "pageToken" => page_token,
41
+ "keywordsLocale" => keywords_locale,
42
+ "locale" => locale,
43
+ }.compact
44
+
45
+ rate_limit(2.0).get(path, params:)
46
+ end
47
+
48
+ # Retrieves details for an item in the Amazon catalog.
49
+ #
50
+ # @param [String] asin The Amazon Standard Identification Number (ASIN) of the item.
51
+ # @param [Array<String>] marketplace_ids A comma-delimited list of Amazon marketplace identifiers. Data sets in
52
+ # the response contain data only for the specified marketplaces.
53
+ # @param [Array<String>] included_data A comma-delimited list of data sets to include in the response. Default:
54
+ # summaries.
55
+ # @param [String] locale Locale for retrieving localized summaries. Defaults to the primary locale of the
56
+ # marketplace.
57
+ # @return [Hash] The API response
58
+ def get_catalog_item(asin, marketplace_ids, included_data: nil, locale: nil)
59
+ path = "/catalog/2020-12-01/items/#{asin}"
60
+ params = {
61
+ "marketplaceIds" => marketplace_ids,
62
+ "includedData" => included_data,
63
+ "locale" => locale,
64
+ }.compact
65
+
66
+ rate_limit(2.0).get(path, params:)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # Selling Partner API for Catalog Items
8
+ #
9
+ # The Selling Partner API for Catalog Items provides programmatic access to information about items in the Amazon
10
+ # catalog. For more information, refer to the [Catalog Items API Use Case
11
+ # Guide](doc:catalog-items-api-v2022-04-01-use-case-guide).
12
+ class CatalogItems20220401 < API
13
+ # Search for and return a list of Amazon catalog items and associated information either by identifier or by
14
+ # keywords.
15
+ #
16
+ # @param [Array<String>] identifiers A comma-delimited list of product identifiers to search the Amazon catalog
17
+ # for. **Note:** Cannot be used with `keywords`.
18
+ # @param [String] identifiers_type Type of product identifiers to search the Amazon catalog for. **Note:**
19
+ # Required when `identifiers` are provided.
20
+ # @param [Array<String>] marketplace_ids A comma-delimited list of Amazon marketplace identifiers for the request.
21
+ # @param [Array<String>] included_data A comma-delimited list of data sets to include in the response. Default:
22
+ # `summaries`.
23
+ # @param [String] locale Locale for retrieving localized summaries. Defaults to the primary locale of the
24
+ # marketplace.
25
+ # @param [String] seller_id A selling partner identifier, such as a seller account or vendor code. **Note:**
26
+ # Required when `identifiersType` is `SKU`.
27
+ # @param [Array<String>] keywords A comma-delimited list of words to search the Amazon catalog for. **Note:**
28
+ # Cannot be used with `identifiers`.
29
+ # @param [Array<String>] brand_names A comma-delimited list of brand names to limit the search for
30
+ # `keywords`-based queries. **Note:** Cannot be used with `identifiers`.
31
+ # @param [Array<String>] classification_ids A comma-delimited list of classification identifiers to limit the
32
+ # search for `keywords`-based queries. **Note:** Cannot be used with `identifiers`.
33
+ # @param [Integer] page_size Number of results to be returned per page.
34
+ # @param [String] page_token A token to fetch a certain page when there are multiple pages worth of results.
35
+ # @param [String] keywords_locale The language of the keywords provided for `keywords`-based queries. Defaults to
36
+ # the primary locale of the marketplace. **Note:** Cannot be used with `identifiers`.
37
+ # @return [Hash] The API response
38
+ def search_catalog_items(
39
+ marketplace_ids, identifiers: nil, identifiers_type: nil, included_data: nil, locale: nil, seller_id: nil,
40
+ keywords: nil, brand_names: nil, classification_ids: nil, page_size: nil, page_token: nil, keywords_locale: nil
41
+ )
42
+ path = "/catalog/2022-04-01/items"
43
+ params = {
44
+ "identifiers" => identifiers,
45
+ "identifiersType" => identifiers_type,
46
+ "marketplaceIds" => marketplace_ids,
47
+ "includedData" => included_data,
48
+ "locale" => locale,
49
+ "sellerId" => seller_id,
50
+ "keywords" => keywords,
51
+ "brandNames" => brand_names,
52
+ "classificationIds" => classification_ids,
53
+ "pageSize" => page_size,
54
+ "pageToken" => page_token,
55
+ "keywordsLocale" => keywords_locale,
56
+ }.compact
57
+
58
+ rate_limit(2.0).get(path, params:)
59
+ end
60
+
61
+ # Retrieves details for an item in the Amazon catalog.
62
+ #
63
+ # @param [String] asin The Amazon Standard Identification Number (ASIN) of the item.
64
+ # @param [Array<String>] marketplace_ids A comma-delimited list of Amazon marketplace identifiers. Data sets in
65
+ # the response contain data only for the specified marketplaces.
66
+ # @param [Array<String>] included_data A comma-delimited list of data sets to include in the response. Default:
67
+ # `summaries`.
68
+ # @param [String] locale Locale for retrieving localized summaries. Defaults to the primary locale of the
69
+ # marketplace.
70
+ # @return [Hash] The API response
71
+ def get_catalog_item(asin, marketplace_ids, included_data: nil, locale: nil)
72
+ path = "/catalog/2022-04-01/items/#{asin}"
73
+ params = {
74
+ "marketplaceIds" => marketplace_ids,
75
+ "includedData" => included_data,
76
+ "locale" => locale,
77
+ }.compact
78
+
79
+ rate_limit(2.0).get(path, params:)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "peddler/api"
4
+
5
+ module Peddler
6
+ class API
7
+ # Selling Partner API for Catalog Items
8
+ #
9
+ # The Selling Partner API for Catalog Items helps you programmatically retrieve item details for items in the
10
+ # catalog.
11
+ class CatalogItemsV0 < API
12
+ # Effective September 30, 2022, the `listCatalogItems` operation will no longer be available in the Selling
13
+ # Partner API for Catalog Items v0. As an alternative, `searchCatalogItems` is available in the latest version of
14
+ # the [Selling Partner API for Catalog Items v2022-04-01](doc:catalog-items-api-v2022-04-01-reference).
15
+ # Integrations that rely on the `listCatalogItems` operation should migrate to the `searchCatalogItems`operation
16
+ # to avoid service disruption. _Note:_ The [`listCatalogCategories`](#get-catalogv0categories) operation is not
17
+ # being deprecated and you can continue to make calls to it.
18
+ #
19
+ # @param [String] marketplace_id A marketplace identifier. Specifies the marketplace for which items are returned.
20
+ # @param [String] query Keyword(s) to use to search for items in the catalog. Example: 'harry potter books'.
21
+ # @param [String] query_context_id An identifier for the context within which the given search will be performed.
22
+ # A marketplace might provide mechanisms for constraining a search to a subset of potential items. For example,
23
+ # the retail marketplace allows queries to be constrained to a specific category. The QueryContextId parameter
24
+ # specifies such a subset. If it is omitted, the search will be performed using the default context for the
25
+ # marketplace, which will typically contain the largest set of items.
26
+ # @param [String] seller_sku Used to identify an item in the given marketplace. SellerSKU is qualified by the
27
+ # seller's SellerId, which is included with every operation that you submit.
28
+ # @param [String] upc A 12-digit bar code used for retail packaging.
29
+ # @param [String] ean A European article number that uniquely identifies the catalog item, manufacturer, and its
30
+ # attributes.
31
+ # @param [String] isbn The unique commercial book identifier used to identify books internationally.
32
+ # @param [String] jan A Japanese article number that uniquely identifies the product, manufacturer, and its
33
+ # attributes.
34
+ # @return [Hash] The API response
35
+ def list_catalog_items(marketplace_id, query: nil, query_context_id: nil, seller_sku: nil, upc: nil, ean: nil,
36
+ isbn: nil, jan: nil)
37
+ path = "/catalog/v0/items"
38
+ params = {
39
+ "MarketplaceId" => marketplace_id,
40
+ "Query" => query,
41
+ "QueryContextId" => query_context_id,
42
+ "SellerSKU" => seller_sku,
43
+ "UPC" => upc,
44
+ "EAN" => ean,
45
+ "ISBN" => isbn,
46
+ "JAN" => jan,
47
+ }.compact
48
+
49
+ get(path, params:)
50
+ end
51
+
52
+ # Effective September 30, 2022, the `getCatalogItem` operation will no longer be available in the Selling Partner
53
+ # API for Catalog Items v0. This operation is available in the latest version of the [Selling Partner API for
54
+ # Catalog Items v2022-04-01](doc:catalog-items-api-v2022-04-01-reference). Integrations that rely on this
55
+ # operation should migrate to the latest version to avoid service disruption. _Note:_ The
56
+ # [`listCatalogCategories`](#get-catalogv0categories) operation is not being deprecated and you can continue to
57
+ # make calls to it.
58
+ #
59
+ # @param [String] marketplace_id A marketplace identifier. Specifies the marketplace for the item.
60
+ # @param [String] asin The Amazon Standard Identification Number (ASIN) of the item.
61
+ # @return [Hash] The API response
62
+ def get_catalog_item(marketplace_id, asin)
63
+ path = "/catalog/v0/items/#{asin}"
64
+ params = {
65
+ "MarketplaceId" => marketplace_id,
66
+ }.compact
67
+
68
+ get(path, params:)
69
+ end
70
+
71
+ # Returns the parent categories to which an item belongs, based on the specified ASIN or SellerSKU.
72
+ #
73
+ # @param [String] marketplace_id A marketplace identifier. Specifies the marketplace for the item.
74
+ # @param [String] asin The Amazon Standard Identification Number (ASIN) of the item.
75
+ # @param [String] seller_sku Used to identify items in the given marketplace. SellerSKU is qualified by the
76
+ # seller's SellerId, which is included with every operation that you submit.
77
+ # @return [Hash] The API response
78
+ def list_catalog_categories(marketplace_id, asin: nil, seller_sku: nil)
79
+ path = "/catalog/v0/categories"
80
+ params = {
81
+ "MarketplaceId" => marketplace_id,
82
+ "ASIN" => asin,
83
+ "SellerSKU" => seller_sku,
84
+ }.compact
85
+
86
+ rate_limit(1.0).get(path, params:)
87
+ end
88
+ end
89
+ end
90
+ end