shopify_api 13.0.0 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (643) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/workflows/build.yml +4 -1
  4. data/.rubocop.yml +2 -0
  5. data/BREAKING_CHANGES_FOR_V10.md +231 -0
  6. data/CHANGELOG.md +38 -1
  7. data/CODE_OF_CONDUCT.md +46 -0
  8. data/CONTRIBUTING.md +25 -0
  9. data/Gemfile.lock +56 -54
  10. data/README.md +10 -41
  11. data/ROADMAP.md +10 -0
  12. data/dev.yml +3 -2
  13. data/docs/README.md +0 -1
  14. data/docs/getting_started.md +21 -11
  15. data/docs/usage/custom_apps.md +75 -0
  16. data/docs/usage/graphql.md +91 -17
  17. data/docs/usage/oauth.md +160 -27
  18. data/docs/usage/rest.md +269 -59
  19. data/docs/usage/webhooks.md +54 -11
  20. data/lib/shopify_api/admin_versions.rb +4 -1
  21. data/lib/shopify_api/auth/jwt_payload.rb +2 -2
  22. data/lib/shopify_api/auth/oauth/access_token_response.rb +37 -0
  23. data/lib/shopify_api/auth/oauth.rb +17 -38
  24. data/lib/shopify_api/auth/session.rb +31 -0
  25. data/lib/shopify_api/auth/token_exchange.rb +80 -0
  26. data/lib/shopify_api/clients/graphql/client.rb +1 -0
  27. data/lib/shopify_api/clients/http_client.rb +12 -3
  28. data/lib/shopify_api/clients/http_response.rb +29 -2
  29. data/lib/shopify_api/context.rb +19 -5
  30. data/lib/shopify_api/logger.rb +1 -1
  31. data/lib/shopify_api/rest/base.rb +112 -29
  32. data/lib/shopify_api/rest/resources/2022_04/abandoned_checkout.rb +7 -3
  33. data/lib/shopify_api/rest/resources/2022_04/access_scope.rb +7 -3
  34. data/lib/shopify_api/rest/resources/2022_04/android_pay_key.rb +7 -3
  35. data/lib/shopify_api/rest/resources/2022_04/apple_pay_certificate.rb +7 -3
  36. data/lib/shopify_api/rest/resources/2022_04/application_charge.rb +7 -3
  37. data/lib/shopify_api/rest/resources/2022_04/application_credit.rb +7 -3
  38. data/lib/shopify_api/rest/resources/2022_04/article.rb +7 -3
  39. data/lib/shopify_api/rest/resources/2022_04/asset.rb +7 -3
  40. data/lib/shopify_api/rest/resources/2022_04/assigned_fulfillment_order.rb +12 -6
  41. data/lib/shopify_api/rest/resources/2022_04/balance.rb +6 -3
  42. data/lib/shopify_api/rest/resources/2022_04/blog.rb +7 -3
  43. data/lib/shopify_api/rest/resources/2022_04/cancellation_request.rb +7 -3
  44. data/lib/shopify_api/rest/resources/2022_04/carrier_service.rb +7 -3
  45. data/lib/shopify_api/rest/resources/2022_04/checkout.rb +7 -3
  46. data/lib/shopify_api/rest/resources/2022_04/collect.rb +7 -3
  47. data/lib/shopify_api/rest/resources/2022_04/collection.rb +7 -3
  48. data/lib/shopify_api/rest/resources/2022_04/collection_listing.rb +7 -3
  49. data/lib/shopify_api/rest/resources/2022_04/comment.rb +7 -3
  50. data/lib/shopify_api/rest/resources/2022_04/country.rb +7 -3
  51. data/lib/shopify_api/rest/resources/2022_04/currency.rb +7 -3
  52. data/lib/shopify_api/rest/resources/2022_04/custom_collection.rb +7 -3
  53. data/lib/shopify_api/rest/resources/2022_04/customer.rb +7 -3
  54. data/lib/shopify_api/rest/resources/2022_04/customer_address.rb +17 -3
  55. data/lib/shopify_api/rest/resources/2022_04/customer_saved_search.rb +7 -3
  56. data/lib/shopify_api/rest/resources/2022_04/deprecated_api_call.rb +7 -3
  57. data/lib/shopify_api/rest/resources/2022_04/discount_code.rb +7 -3
  58. data/lib/shopify_api/rest/resources/2022_04/dispute.rb +7 -3
  59. data/lib/shopify_api/rest/resources/2022_04/draft_order.rb +7 -3
  60. data/lib/shopify_api/rest/resources/2022_04/event.rb +7 -3
  61. data/lib/shopify_api/rest/resources/2022_04/fulfillment.rb +7 -3
  62. data/lib/shopify_api/rest/resources/2022_04/fulfillment_event.rb +7 -3
  63. data/lib/shopify_api/rest/resources/2022_04/fulfillment_order.rb +10 -10
  64. data/lib/shopify_api/rest/resources/2022_04/fulfillment_request.rb +17 -3
  65. data/lib/shopify_api/rest/resources/2022_04/fulfillment_service.rb +7 -3
  66. data/lib/shopify_api/rest/resources/2022_04/gift_card.rb +7 -3
  67. data/lib/shopify_api/rest/resources/2022_04/gift_card_adjustment.rb +7 -3
  68. data/lib/shopify_api/rest/resources/2022_04/image.rb +7 -3
  69. data/lib/shopify_api/rest/resources/2022_04/inventory_item.rb +7 -3
  70. data/lib/shopify_api/rest/resources/2022_04/inventory_level.rb +7 -3
  71. data/lib/shopify_api/rest/resources/2022_04/location.rb +7 -3
  72. data/lib/shopify_api/rest/resources/2022_04/locations_for_move.rb +7 -3
  73. data/lib/shopify_api/rest/resources/2022_04/marketing_event.rb +7 -3
  74. data/lib/shopify_api/rest/resources/2022_04/metafield.rb +7 -3
  75. data/lib/shopify_api/rest/resources/2022_04/mobile_platform_application.rb +7 -3
  76. data/lib/shopify_api/rest/resources/2022_04/order.rb +7 -3
  77. data/lib/shopify_api/rest/resources/2022_04/order_risk.rb +12 -6
  78. data/lib/shopify_api/rest/resources/2022_04/page.rb +7 -3
  79. data/lib/shopify_api/rest/resources/2022_04/payment.rb +7 -3
  80. data/lib/shopify_api/rest/resources/2022_04/payment_gateway.rb +7 -3
  81. data/lib/shopify_api/rest/resources/2022_04/payment_transaction.rb +7 -3
  82. data/lib/shopify_api/rest/resources/2022_04/payout.rb +7 -3
  83. data/lib/shopify_api/rest/resources/2022_04/policy.rb +7 -3
  84. data/lib/shopify_api/rest/resources/2022_04/price_rule.rb +7 -3
  85. data/lib/shopify_api/rest/resources/2022_04/product.rb +7 -3
  86. data/lib/shopify_api/rest/resources/2022_04/product_listing.rb +7 -3
  87. data/lib/shopify_api/rest/resources/2022_04/product_resource_feedback.rb +7 -3
  88. data/lib/shopify_api/rest/resources/2022_04/province.rb +7 -3
  89. data/lib/shopify_api/rest/resources/2022_04/recurring_application_charge.rb +7 -3
  90. data/lib/shopify_api/rest/resources/2022_04/redirect.rb +7 -3
  91. data/lib/shopify_api/rest/resources/2022_04/refund.rb +7 -3
  92. data/lib/shopify_api/rest/resources/2022_04/report.rb +7 -3
  93. data/lib/shopify_api/rest/resources/2022_04/resource_feedback.rb +7 -3
  94. data/lib/shopify_api/rest/resources/2022_04/script_tag.rb +7 -3
  95. data/lib/shopify_api/rest/resources/2022_04/shipping_zone.rb +7 -3
  96. data/lib/shopify_api/rest/resources/2022_04/shop.rb +9 -5
  97. data/lib/shopify_api/rest/resources/2022_04/smart_collection.rb +7 -3
  98. data/lib/shopify_api/rest/resources/2022_04/storefront_access_token.rb +7 -3
  99. data/lib/shopify_api/rest/resources/2022_04/tender_transaction.rb +7 -3
  100. data/lib/shopify_api/rest/resources/2022_04/theme.rb +7 -3
  101. data/lib/shopify_api/rest/resources/2022_04/transaction.rb +7 -3
  102. data/lib/shopify_api/rest/resources/2022_04/usage_charge.rb +7 -3
  103. data/lib/shopify_api/rest/resources/2022_04/user.rb +7 -3
  104. data/lib/shopify_api/rest/resources/2022_04/variant.rb +7 -3
  105. data/lib/shopify_api/rest/resources/2022_04/webhook.rb +7 -3
  106. data/lib/shopify_api/rest/resources/2022_07/abandoned_checkout.rb +7 -3
  107. data/lib/shopify_api/rest/resources/2022_07/access_scope.rb +7 -3
  108. data/lib/shopify_api/rest/resources/2022_07/android_pay_key.rb +7 -3
  109. data/lib/shopify_api/rest/resources/2022_07/apple_pay_certificate.rb +7 -3
  110. data/lib/shopify_api/rest/resources/2022_07/application_charge.rb +7 -3
  111. data/lib/shopify_api/rest/resources/2022_07/application_credit.rb +7 -3
  112. data/lib/shopify_api/rest/resources/2022_07/article.rb +7 -3
  113. data/lib/shopify_api/rest/resources/2022_07/asset.rb +7 -3
  114. data/lib/shopify_api/rest/resources/2022_07/assigned_fulfillment_order.rb +12 -6
  115. data/lib/shopify_api/rest/resources/2022_07/balance.rb +11 -3
  116. data/lib/shopify_api/rest/resources/2022_07/blog.rb +7 -3
  117. data/lib/shopify_api/rest/resources/2022_07/cancellation_request.rb +7 -3
  118. data/lib/shopify_api/rest/resources/2022_07/carrier_service.rb +7 -3
  119. data/lib/shopify_api/rest/resources/2022_07/checkout.rb +7 -3
  120. data/lib/shopify_api/rest/resources/2022_07/collect.rb +7 -3
  121. data/lib/shopify_api/rest/resources/2022_07/collection.rb +7 -3
  122. data/lib/shopify_api/rest/resources/2022_07/collection_listing.rb +7 -3
  123. data/lib/shopify_api/rest/resources/2022_07/comment.rb +7 -3
  124. data/lib/shopify_api/rest/resources/2022_07/country.rb +7 -3
  125. data/lib/shopify_api/rest/resources/2022_07/currency.rb +7 -3
  126. data/lib/shopify_api/rest/resources/2022_07/custom_collection.rb +7 -3
  127. data/lib/shopify_api/rest/resources/2022_07/customer.rb +7 -3
  128. data/lib/shopify_api/rest/resources/2022_07/customer_address.rb +17 -3
  129. data/lib/shopify_api/rest/resources/2022_07/deprecated_api_call.rb +7 -3
  130. data/lib/shopify_api/rest/resources/2022_07/discount_code.rb +7 -3
  131. data/lib/shopify_api/rest/resources/2022_07/dispute.rb +7 -3
  132. data/lib/shopify_api/rest/resources/2022_07/dispute_evidence.rb +7 -3
  133. data/lib/shopify_api/rest/resources/2022_07/dispute_file_upload.rb +7 -3
  134. data/lib/shopify_api/rest/resources/2022_07/draft_order.rb +7 -3
  135. data/lib/shopify_api/rest/resources/2022_07/event.rb +7 -3
  136. data/lib/shopify_api/rest/resources/2022_07/fulfillment.rb +7 -3
  137. data/lib/shopify_api/rest/resources/2022_07/fulfillment_event.rb +7 -3
  138. data/lib/shopify_api/rest/resources/2022_07/fulfillment_order.rb +10 -10
  139. data/lib/shopify_api/rest/resources/2022_07/fulfillment_request.rb +17 -3
  140. data/lib/shopify_api/rest/resources/2022_07/fulfillment_service.rb +7 -3
  141. data/lib/shopify_api/rest/resources/2022_07/gift_card.rb +7 -3
  142. data/lib/shopify_api/rest/resources/2022_07/gift_card_adjustment.rb +7 -3
  143. data/lib/shopify_api/rest/resources/2022_07/image.rb +7 -3
  144. data/lib/shopify_api/rest/resources/2022_07/inventory_item.rb +7 -3
  145. data/lib/shopify_api/rest/resources/2022_07/inventory_level.rb +7 -3
  146. data/lib/shopify_api/rest/resources/2022_07/location.rb +7 -3
  147. data/lib/shopify_api/rest/resources/2022_07/locations_for_move.rb +7 -3
  148. data/lib/shopify_api/rest/resources/2022_07/marketing_event.rb +7 -3
  149. data/lib/shopify_api/rest/resources/2022_07/metafield.rb +7 -3
  150. data/lib/shopify_api/rest/resources/2022_07/mobile_platform_application.rb +7 -3
  151. data/lib/shopify_api/rest/resources/2022_07/order.rb +10 -3
  152. data/lib/shopify_api/rest/resources/2022_07/order_risk.rb +12 -6
  153. data/lib/shopify_api/rest/resources/2022_07/page.rb +7 -3
  154. data/lib/shopify_api/rest/resources/2022_07/payment.rb +7 -3
  155. data/lib/shopify_api/rest/resources/2022_07/payment_gateway.rb +7 -3
  156. data/lib/shopify_api/rest/resources/2022_07/payment_transaction.rb +7 -3
  157. data/lib/shopify_api/rest/resources/2022_07/payout.rb +7 -3
  158. data/lib/shopify_api/rest/resources/2022_07/policy.rb +7 -3
  159. data/lib/shopify_api/rest/resources/2022_07/price_rule.rb +7 -3
  160. data/lib/shopify_api/rest/resources/2022_07/product.rb +7 -3
  161. data/lib/shopify_api/rest/resources/2022_07/product_listing.rb +7 -3
  162. data/lib/shopify_api/rest/resources/2022_07/product_resource_feedback.rb +7 -3
  163. data/lib/shopify_api/rest/resources/2022_07/province.rb +7 -3
  164. data/lib/shopify_api/rest/resources/2022_07/recurring_application_charge.rb +7 -3
  165. data/lib/shopify_api/rest/resources/2022_07/redirect.rb +7 -3
  166. data/lib/shopify_api/rest/resources/2022_07/refund.rb +7 -3
  167. data/lib/shopify_api/rest/resources/2022_07/report.rb +7 -3
  168. data/lib/shopify_api/rest/resources/2022_07/resource_feedback.rb +7 -3
  169. data/lib/shopify_api/rest/resources/2022_07/script_tag.rb +7 -3
  170. data/lib/shopify_api/rest/resources/2022_07/shipping_zone.rb +7 -3
  171. data/lib/shopify_api/rest/resources/2022_07/shop.rb +9 -5
  172. data/lib/shopify_api/rest/resources/2022_07/smart_collection.rb +7 -3
  173. data/lib/shopify_api/rest/resources/2022_07/storefront_access_token.rb +7 -3
  174. data/lib/shopify_api/rest/resources/2022_07/tender_transaction.rb +7 -3
  175. data/lib/shopify_api/rest/resources/2022_07/theme.rb +7 -3
  176. data/lib/shopify_api/rest/resources/2022_07/transaction.rb +7 -3
  177. data/lib/shopify_api/rest/resources/2022_07/usage_charge.rb +7 -3
  178. data/lib/shopify_api/rest/resources/2022_07/user.rb +7 -3
  179. data/lib/shopify_api/rest/resources/2022_07/variant.rb +7 -3
  180. data/lib/shopify_api/rest/resources/2022_07/webhook.rb +7 -3
  181. data/lib/shopify_api/rest/resources/2022_10/abandoned_checkout.rb +7 -3
  182. data/lib/shopify_api/rest/resources/2022_10/access_scope.rb +7 -3
  183. data/lib/shopify_api/rest/resources/2022_10/android_pay_key.rb +7 -3
  184. data/lib/shopify_api/rest/resources/2022_10/apple_pay_certificate.rb +7 -3
  185. data/lib/shopify_api/rest/resources/2022_10/application_charge.rb +7 -3
  186. data/lib/shopify_api/rest/resources/2022_10/application_credit.rb +7 -3
  187. data/lib/shopify_api/rest/resources/2022_10/article.rb +7 -3
  188. data/lib/shopify_api/rest/resources/2022_10/asset.rb +7 -3
  189. data/lib/shopify_api/rest/resources/2022_10/assigned_fulfillment_order.rb +12 -6
  190. data/lib/shopify_api/rest/resources/2022_10/balance.rb +11 -3
  191. data/lib/shopify_api/rest/resources/2022_10/blog.rb +7 -3
  192. data/lib/shopify_api/rest/resources/2022_10/cancellation_request.rb +7 -3
  193. data/lib/shopify_api/rest/resources/2022_10/carrier_service.rb +7 -3
  194. data/lib/shopify_api/rest/resources/2022_10/checkout.rb +7 -3
  195. data/lib/shopify_api/rest/resources/2022_10/collect.rb +7 -3
  196. data/lib/shopify_api/rest/resources/2022_10/collection.rb +7 -3
  197. data/lib/shopify_api/rest/resources/2022_10/collection_listing.rb +7 -3
  198. data/lib/shopify_api/rest/resources/2022_10/comment.rb +7 -3
  199. data/lib/shopify_api/rest/resources/2022_10/country.rb +7 -3
  200. data/lib/shopify_api/rest/resources/2022_10/currency.rb +7 -3
  201. data/lib/shopify_api/rest/resources/2022_10/custom_collection.rb +7 -3
  202. data/lib/shopify_api/rest/resources/2022_10/customer.rb +7 -3
  203. data/lib/shopify_api/rest/resources/2022_10/customer_address.rb +17 -3
  204. data/lib/shopify_api/rest/resources/2022_10/deprecated_api_call.rb +7 -3
  205. data/lib/shopify_api/rest/resources/2022_10/discount_code.rb +7 -3
  206. data/lib/shopify_api/rest/resources/2022_10/dispute.rb +7 -3
  207. data/lib/shopify_api/rest/resources/2022_10/dispute_evidence.rb +7 -3
  208. data/lib/shopify_api/rest/resources/2022_10/dispute_file_upload.rb +7 -3
  209. data/lib/shopify_api/rest/resources/2022_10/draft_order.rb +7 -3
  210. data/lib/shopify_api/rest/resources/2022_10/event.rb +7 -3
  211. data/lib/shopify_api/rest/resources/2022_10/fulfillment.rb +7 -3
  212. data/lib/shopify_api/rest/resources/2022_10/fulfillment_event.rb +7 -3
  213. data/lib/shopify_api/rest/resources/2022_10/fulfillment_order.rb +10 -10
  214. data/lib/shopify_api/rest/resources/2022_10/fulfillment_request.rb +17 -3
  215. data/lib/shopify_api/rest/resources/2022_10/fulfillment_service.rb +7 -3
  216. data/lib/shopify_api/rest/resources/2022_10/gift_card.rb +7 -3
  217. data/lib/shopify_api/rest/resources/2022_10/gift_card_adjustment.rb +7 -3
  218. data/lib/shopify_api/rest/resources/2022_10/image.rb +7 -3
  219. data/lib/shopify_api/rest/resources/2022_10/inventory_item.rb +7 -3
  220. data/lib/shopify_api/rest/resources/2022_10/inventory_level.rb +7 -3
  221. data/lib/shopify_api/rest/resources/2022_10/location.rb +7 -3
  222. data/lib/shopify_api/rest/resources/2022_10/locations_for_move.rb +7 -3
  223. data/lib/shopify_api/rest/resources/2022_10/marketing_event.rb +7 -3
  224. data/lib/shopify_api/rest/resources/2022_10/metafield.rb +7 -3
  225. data/lib/shopify_api/rest/resources/2022_10/mobile_platform_application.rb +7 -3
  226. data/lib/shopify_api/rest/resources/2022_10/order.rb +10 -3
  227. data/lib/shopify_api/rest/resources/2022_10/order_risk.rb +12 -6
  228. data/lib/shopify_api/rest/resources/2022_10/page.rb +7 -3
  229. data/lib/shopify_api/rest/resources/2022_10/payment.rb +7 -3
  230. data/lib/shopify_api/rest/resources/2022_10/payment_gateway.rb +7 -3
  231. data/lib/shopify_api/rest/resources/2022_10/payment_transaction.rb +7 -3
  232. data/lib/shopify_api/rest/resources/2022_10/payout.rb +7 -3
  233. data/lib/shopify_api/rest/resources/2022_10/policy.rb +7 -3
  234. data/lib/shopify_api/rest/resources/2022_10/price_rule.rb +7 -3
  235. data/lib/shopify_api/rest/resources/2022_10/product.rb +7 -3
  236. data/lib/shopify_api/rest/resources/2022_10/product_listing.rb +7 -3
  237. data/lib/shopify_api/rest/resources/2022_10/product_resource_feedback.rb +7 -3
  238. data/lib/shopify_api/rest/resources/2022_10/province.rb +7 -3
  239. data/lib/shopify_api/rest/resources/2022_10/recurring_application_charge.rb +7 -3
  240. data/lib/shopify_api/rest/resources/2022_10/redirect.rb +7 -3
  241. data/lib/shopify_api/rest/resources/2022_10/refund.rb +7 -3
  242. data/lib/shopify_api/rest/resources/2022_10/report.rb +7 -3
  243. data/lib/shopify_api/rest/resources/2022_10/resource_feedback.rb +7 -3
  244. data/lib/shopify_api/rest/resources/2022_10/script_tag.rb +7 -3
  245. data/lib/shopify_api/rest/resources/2022_10/shipping_zone.rb +7 -3
  246. data/lib/shopify_api/rest/resources/2022_10/shop.rb +9 -8
  247. data/lib/shopify_api/rest/resources/2022_10/smart_collection.rb +7 -3
  248. data/lib/shopify_api/rest/resources/2022_10/storefront_access_token.rb +7 -3
  249. data/lib/shopify_api/rest/resources/2022_10/tender_transaction.rb +7 -3
  250. data/lib/shopify_api/rest/resources/2022_10/theme.rb +7 -3
  251. data/lib/shopify_api/rest/resources/2022_10/transaction.rb +7 -3
  252. data/lib/shopify_api/rest/resources/2022_10/usage_charge.rb +7 -3
  253. data/lib/shopify_api/rest/resources/2022_10/user.rb +7 -3
  254. data/lib/shopify_api/rest/resources/2022_10/variant.rb +8 -8
  255. data/lib/shopify_api/rest/resources/2022_10/webhook.rb +7 -3
  256. data/lib/shopify_api/rest/resources/2023_01/abandoned_checkout.rb +7 -3
  257. data/lib/shopify_api/rest/resources/2023_01/access_scope.rb +7 -3
  258. data/lib/shopify_api/rest/resources/2023_01/apple_pay_certificate.rb +7 -3
  259. data/lib/shopify_api/rest/resources/2023_01/application_charge.rb +7 -3
  260. data/lib/shopify_api/rest/resources/2023_01/application_credit.rb +7 -3
  261. data/lib/shopify_api/rest/resources/2023_01/article.rb +7 -3
  262. data/lib/shopify_api/rest/resources/2023_01/asset.rb +7 -3
  263. data/lib/shopify_api/rest/resources/2023_01/assigned_fulfillment_order.rb +12 -6
  264. data/lib/shopify_api/rest/resources/2023_01/balance.rb +11 -3
  265. data/lib/shopify_api/rest/resources/2023_01/blog.rb +7 -3
  266. data/lib/shopify_api/rest/resources/2023_01/cancellation_request.rb +7 -3
  267. data/lib/shopify_api/rest/resources/2023_01/carrier_service.rb +7 -3
  268. data/lib/shopify_api/rest/resources/2023_01/checkout.rb +7 -3
  269. data/lib/shopify_api/rest/resources/2023_01/collect.rb +7 -3
  270. data/lib/shopify_api/rest/resources/2023_01/collection.rb +7 -3
  271. data/lib/shopify_api/rest/resources/2023_01/collection_listing.rb +7 -3
  272. data/lib/shopify_api/rest/resources/2023_01/comment.rb +7 -3
  273. data/lib/shopify_api/rest/resources/2023_01/country.rb +7 -3
  274. data/lib/shopify_api/rest/resources/2023_01/currency.rb +7 -3
  275. data/lib/shopify_api/rest/resources/2023_01/custom_collection.rb +7 -3
  276. data/lib/shopify_api/rest/resources/2023_01/customer.rb +7 -3
  277. data/lib/shopify_api/rest/resources/2023_01/customer_address.rb +17 -3
  278. data/lib/shopify_api/rest/resources/2023_01/customer_saved_search.rb +7 -3
  279. data/lib/shopify_api/rest/resources/2023_01/deprecated_api_call.rb +7 -3
  280. data/lib/shopify_api/rest/resources/2023_01/discount_code.rb +7 -3
  281. data/lib/shopify_api/rest/resources/2023_01/dispute.rb +7 -3
  282. data/lib/shopify_api/rest/resources/2023_01/dispute_evidence.rb +7 -3
  283. data/lib/shopify_api/rest/resources/2023_01/dispute_file_upload.rb +7 -3
  284. data/lib/shopify_api/rest/resources/2023_01/draft_order.rb +7 -3
  285. data/lib/shopify_api/rest/resources/2023_01/event.rb +7 -3
  286. data/lib/shopify_api/rest/resources/2023_01/fulfillment.rb +7 -3
  287. data/lib/shopify_api/rest/resources/2023_01/fulfillment_event.rb +7 -3
  288. data/lib/shopify_api/rest/resources/2023_01/fulfillment_order.rb +15 -13
  289. data/lib/shopify_api/rest/resources/2023_01/fulfillment_request.rb +17 -3
  290. data/lib/shopify_api/rest/resources/2023_01/fulfillment_service.rb +7 -3
  291. data/lib/shopify_api/rest/resources/2023_01/gift_card.rb +7 -3
  292. data/lib/shopify_api/rest/resources/2023_01/gift_card_adjustment.rb +7 -3
  293. data/lib/shopify_api/rest/resources/2023_01/image.rb +7 -3
  294. data/lib/shopify_api/rest/resources/2023_01/inventory_item.rb +7 -3
  295. data/lib/shopify_api/rest/resources/2023_01/inventory_level.rb +7 -3
  296. data/lib/shopify_api/rest/resources/2023_01/location.rb +7 -3
  297. data/lib/shopify_api/rest/resources/2023_01/locations_for_move.rb +7 -3
  298. data/lib/shopify_api/rest/resources/2023_01/marketing_event.rb +7 -3
  299. data/lib/shopify_api/rest/resources/2023_01/metafield.rb +7 -3
  300. data/lib/shopify_api/rest/resources/2023_01/mobile_platform_application.rb +7 -3
  301. data/lib/shopify_api/rest/resources/2023_01/order.rb +10 -3
  302. data/lib/shopify_api/rest/resources/2023_01/order_risk.rb +12 -6
  303. data/lib/shopify_api/rest/resources/2023_01/page.rb +7 -3
  304. data/lib/shopify_api/rest/resources/2023_01/payment.rb +7 -3
  305. data/lib/shopify_api/rest/resources/2023_01/payment_gateway.rb +7 -3
  306. data/lib/shopify_api/rest/resources/2023_01/payment_transaction.rb +12 -5
  307. data/lib/shopify_api/rest/resources/2023_01/payout.rb +7 -3
  308. data/lib/shopify_api/rest/resources/2023_01/policy.rb +7 -3
  309. data/lib/shopify_api/rest/resources/2023_01/price_rule.rb +7 -3
  310. data/lib/shopify_api/rest/resources/2023_01/product.rb +7 -3
  311. data/lib/shopify_api/rest/resources/2023_01/product_listing.rb +7 -3
  312. data/lib/shopify_api/rest/resources/2023_01/product_resource_feedback.rb +7 -3
  313. data/lib/shopify_api/rest/resources/2023_01/province.rb +7 -3
  314. data/lib/shopify_api/rest/resources/2023_01/recurring_application_charge.rb +7 -3
  315. data/lib/shopify_api/rest/resources/2023_01/redirect.rb +7 -3
  316. data/lib/shopify_api/rest/resources/2023_01/refund.rb +7 -3
  317. data/lib/shopify_api/rest/resources/2023_01/report.rb +7 -3
  318. data/lib/shopify_api/rest/resources/2023_01/resource_feedback.rb +7 -3
  319. data/lib/shopify_api/rest/resources/2023_01/script_tag.rb +7 -3
  320. data/lib/shopify_api/rest/resources/2023_01/shipping_zone.rb +7 -3
  321. data/lib/shopify_api/rest/resources/2023_01/shop.rb +9 -8
  322. data/lib/shopify_api/rest/resources/2023_01/smart_collection.rb +7 -3
  323. data/lib/shopify_api/rest/resources/2023_01/storefront_access_token.rb +7 -3
  324. data/lib/shopify_api/rest/resources/2023_01/tender_transaction.rb +7 -3
  325. data/lib/shopify_api/rest/resources/2023_01/theme.rb +7 -3
  326. data/lib/shopify_api/rest/resources/2023_01/transaction.rb +7 -3
  327. data/lib/shopify_api/rest/resources/2023_01/usage_charge.rb +7 -3
  328. data/lib/shopify_api/rest/resources/2023_01/user.rb +7 -3
  329. data/lib/shopify_api/rest/resources/2023_01/variant.rb +8 -8
  330. data/lib/shopify_api/rest/resources/2023_01/webhook.rb +7 -3
  331. data/lib/shopify_api/rest/resources/2023_04/abandoned_checkout.rb +7 -3
  332. data/lib/shopify_api/rest/resources/2023_04/access_scope.rb +7 -3
  333. data/lib/shopify_api/rest/resources/2023_04/apple_pay_certificate.rb +7 -3
  334. data/lib/shopify_api/rest/resources/2023_04/application_charge.rb +7 -3
  335. data/lib/shopify_api/rest/resources/2023_04/application_credit.rb +7 -3
  336. data/lib/shopify_api/rest/resources/2023_04/article.rb +7 -3
  337. data/lib/shopify_api/rest/resources/2023_04/asset.rb +7 -3
  338. data/lib/shopify_api/rest/resources/2023_04/assigned_fulfillment_order.rb +12 -6
  339. data/lib/shopify_api/rest/resources/2023_04/balance.rb +11 -3
  340. data/lib/shopify_api/rest/resources/2023_04/blog.rb +7 -3
  341. data/lib/shopify_api/rest/resources/2023_04/cancellation_request.rb +7 -3
  342. data/lib/shopify_api/rest/resources/2023_04/carrier_service.rb +7 -3
  343. data/lib/shopify_api/rest/resources/2023_04/checkout.rb +7 -3
  344. data/lib/shopify_api/rest/resources/2023_04/collect.rb +7 -3
  345. data/lib/shopify_api/rest/resources/2023_04/collection.rb +7 -3
  346. data/lib/shopify_api/rest/resources/2023_04/collection_listing.rb +7 -3
  347. data/lib/shopify_api/rest/resources/2023_04/comment.rb +7 -3
  348. data/lib/shopify_api/rest/resources/2023_04/country.rb +7 -3
  349. data/lib/shopify_api/rest/resources/2023_04/currency.rb +7 -3
  350. data/lib/shopify_api/rest/resources/2023_04/custom_collection.rb +7 -3
  351. data/lib/shopify_api/rest/resources/2023_04/customer.rb +7 -3
  352. data/lib/shopify_api/rest/resources/2023_04/customer_address.rb +17 -3
  353. data/lib/shopify_api/rest/resources/2023_04/customer_saved_search.rb +7 -3
  354. data/lib/shopify_api/rest/resources/2023_04/deprecated_api_call.rb +7 -3
  355. data/lib/shopify_api/rest/resources/2023_04/discount_code.rb +7 -3
  356. data/lib/shopify_api/rest/resources/2023_04/dispute.rb +7 -3
  357. data/lib/shopify_api/rest/resources/2023_04/dispute_evidence.rb +7 -3
  358. data/lib/shopify_api/rest/resources/2023_04/dispute_file_upload.rb +7 -3
  359. data/lib/shopify_api/rest/resources/2023_04/draft_order.rb +7 -3
  360. data/lib/shopify_api/rest/resources/2023_04/event.rb +7 -3
  361. data/lib/shopify_api/rest/resources/2023_04/fulfillment.rb +7 -3
  362. data/lib/shopify_api/rest/resources/2023_04/fulfillment_event.rb +7 -3
  363. data/lib/shopify_api/rest/resources/2023_04/fulfillment_order.rb +12 -6
  364. data/lib/shopify_api/rest/resources/2023_04/fulfillment_request.rb +17 -3
  365. data/lib/shopify_api/rest/resources/2023_04/fulfillment_service.rb +7 -3
  366. data/lib/shopify_api/rest/resources/2023_04/gift_card.rb +7 -3
  367. data/lib/shopify_api/rest/resources/2023_04/gift_card_adjustment.rb +7 -3
  368. data/lib/shopify_api/rest/resources/2023_04/image.rb +7 -3
  369. data/lib/shopify_api/rest/resources/2023_04/inventory_item.rb +7 -3
  370. data/lib/shopify_api/rest/resources/2023_04/inventory_level.rb +7 -3
  371. data/lib/shopify_api/rest/resources/2023_04/location.rb +7 -3
  372. data/lib/shopify_api/rest/resources/2023_04/locations_for_move.rb +7 -3
  373. data/lib/shopify_api/rest/resources/2023_04/marketing_event.rb +7 -3
  374. data/lib/shopify_api/rest/resources/2023_04/metafield.rb +7 -3
  375. data/lib/shopify_api/rest/resources/2023_04/mobile_platform_application.rb +7 -3
  376. data/lib/shopify_api/rest/resources/2023_04/order.rb +10 -9
  377. data/lib/shopify_api/rest/resources/2023_04/order_risk.rb +12 -6
  378. data/lib/shopify_api/rest/resources/2023_04/page.rb +7 -3
  379. data/lib/shopify_api/rest/resources/2023_04/payment.rb +7 -3
  380. data/lib/shopify_api/rest/resources/2023_04/payment_gateway.rb +7 -3
  381. data/lib/shopify_api/rest/resources/2023_04/payment_transaction.rb +12 -5
  382. data/lib/shopify_api/rest/resources/2023_04/payout.rb +7 -3
  383. data/lib/shopify_api/rest/resources/2023_04/policy.rb +7 -3
  384. data/lib/shopify_api/rest/resources/2023_04/price_rule.rb +7 -3
  385. data/lib/shopify_api/rest/resources/2023_04/product.rb +7 -3
  386. data/lib/shopify_api/rest/resources/2023_04/product_listing.rb +7 -3
  387. data/lib/shopify_api/rest/resources/2023_04/product_resource_feedback.rb +7 -3
  388. data/lib/shopify_api/rest/resources/2023_04/province.rb +7 -3
  389. data/lib/shopify_api/rest/resources/2023_04/recurring_application_charge.rb +7 -3
  390. data/lib/shopify_api/rest/resources/2023_04/redirect.rb +7 -3
  391. data/lib/shopify_api/rest/resources/2023_04/refund.rb +7 -3
  392. data/lib/shopify_api/rest/resources/2023_04/report.rb +7 -3
  393. data/lib/shopify_api/rest/resources/2023_04/resource_feedback.rb +7 -3
  394. data/lib/shopify_api/rest/resources/2023_04/script_tag.rb +7 -3
  395. data/lib/shopify_api/rest/resources/2023_04/shipping_zone.rb +7 -3
  396. data/lib/shopify_api/rest/resources/2023_04/shop.rb +9 -8
  397. data/lib/shopify_api/rest/resources/2023_04/smart_collection.rb +7 -3
  398. data/lib/shopify_api/rest/resources/2023_04/storefront_access_token.rb +7 -3
  399. data/lib/shopify_api/rest/resources/2023_04/tender_transaction.rb +7 -3
  400. data/lib/shopify_api/rest/resources/2023_04/theme.rb +7 -3
  401. data/lib/shopify_api/rest/resources/2023_04/transaction.rb +7 -3
  402. data/lib/shopify_api/rest/resources/2023_04/usage_charge.rb +7 -3
  403. data/lib/shopify_api/rest/resources/2023_04/user.rb +7 -3
  404. data/lib/shopify_api/rest/resources/2023_04/variant.rb +8 -8
  405. data/lib/shopify_api/rest/resources/2023_04/webhook.rb +7 -3
  406. data/lib/shopify_api/rest/resources/2023_07/abandoned_checkout.rb +194 -0
  407. data/lib/shopify_api/rest/resources/2023_07/access_scope.rb +62 -0
  408. data/lib/shopify_api/rest/resources/2023_07/apple_pay_certificate.rb +109 -0
  409. data/lib/shopify_api/rest/resources/2023_07/application_charge.rb +113 -0
  410. data/lib/shopify_api/rest/resources/2023_07/application_credit.rb +95 -0
  411. data/lib/shopify_api/rest/resources/2023_07/article.rb +269 -0
  412. data/lib/shopify_api/rest/resources/2023_07/asset.rb +122 -0
  413. data/lib/shopify_api/rest/resources/2023_07/assigned_fulfillment_order.rb +92 -0
  414. data/lib/shopify_api/rest/resources/2023_07/balance.rb +58 -0
  415. data/lib/shopify_api/rest/resources/2023_07/blog.rb +166 -0
  416. data/lib/shopify_api/rest/resources/2023_07/cancellation_request.rb +87 -0
  417. data/lib/shopify_api/rest/resources/2023_07/carrier_service.rb +120 -0
  418. data/lib/shopify_api/rest/resources/2023_07/checkout.rb +213 -0
  419. data/lib/shopify_api/rest/resources/{2022_07/customer_saved_search.rb → 2023_07/collect.rb} +29 -52
  420. data/lib/shopify_api/rest/resources/2023_07/collection.rb +114 -0
  421. data/lib/shopify_api/rest/resources/2023_07/collection_listing.rb +159 -0
  422. data/lib/shopify_api/rest/resources/2023_07/comment.rb +287 -0
  423. data/lib/shopify_api/rest/resources/2023_07/country.rb +141 -0
  424. data/lib/shopify_api/rest/resources/2023_07/currency.rb +61 -0
  425. data/lib/shopify_api/rest/resources/2023_07/custom_collection.rb +191 -0
  426. data/lib/shopify_api/rest/resources/2023_07/customer.rb +333 -0
  427. data/lib/shopify_api/rest/resources/2023_07/customer_address.rb +215 -0
  428. data/lib/shopify_api/rest/resources/{2022_10 → 2023_07}/customer_saved_search.rb +7 -3
  429. data/lib/shopify_api/rest/resources/2023_07/deprecated_api_call.rb +61 -0
  430. data/lib/shopify_api/rest/resources/2023_07/discount_code.rb +226 -0
  431. data/lib/shopify_api/rest/resources/2023_07/dispute.rb +115 -0
  432. data/lib/shopify_api/rest/resources/2023_07/dispute_evidence.rb +121 -0
  433. data/lib/shopify_api/rest/resources/2023_07/dispute_file_upload.rb +85 -0
  434. data/lib/shopify_api/rest/resources/2023_07/draft_order.rb +279 -0
  435. data/lib/shopify_api/rest/resources/2023_07/event.rb +152 -0
  436. data/lib/shopify_api/rest/resources/2023_07/fulfillment.rb +235 -0
  437. data/lib/shopify_api/rest/resources/2023_07/fulfillment_event.rb +170 -0
  438. data/lib/shopify_api/rest/resources/2023_07/fulfillment_order.rb +318 -0
  439. data/lib/shopify_api/rest/resources/2023_07/fulfillment_request.rb +101 -0
  440. data/lib/shopify_api/rest/resources/2023_07/fulfillment_service.rb +134 -0
  441. data/lib/shopify_api/rest/resources/2023_07/gift_card.rb +222 -0
  442. data/lib/shopify_api/rest/resources/2023_07/gift_card_adjustment.rb +122 -0
  443. data/lib/shopify_api/rest/resources/2023_07/image.rb +161 -0
  444. data/lib/shopify_api/rest/resources/2023_07/inventory_item.rb +112 -0
  445. data/lib/shopify_api/rest/resources/2023_07/inventory_level.rb +183 -0
  446. data/lib/shopify_api/rest/resources/2023_07/location.rb +171 -0
  447. data/lib/shopify_api/rest/resources/2023_07/locations_for_move.rb +60 -0
  448. data/lib/shopify_api/rest/resources/2023_07/marketing_event.rb +213 -0
  449. data/lib/shopify_api/rest/resources/2023_07/metafield.rb +348 -0
  450. data/lib/shopify_api/rest/resources/2023_07/mobile_platform_application.rb +114 -0
  451. data/lib/shopify_api/rest/resources/2023_07/order.rb +489 -0
  452. data/lib/shopify_api/rest/resources/2023_07/order_risk.rb +148 -0
  453. data/lib/shopify_api/rest/resources/2023_07/page.rb +198 -0
  454. data/lib/shopify_api/rest/resources/2023_07/payment.rb +144 -0
  455. data/lib/shopify_api/rest/resources/2023_07/payment_gateway.rb +147 -0
  456. data/lib/shopify_api/rest/resources/2023_07/payment_transaction.rb +114 -0
  457. data/lib/shopify_api/rest/resources/2023_07/payout.rb +101 -0
  458. data/lib/shopify_api/rest/resources/2023_07/policy.rb +73 -0
  459. data/lib/shopify_api/rest/resources/2023_07/price_rule.rb +227 -0
  460. data/lib/shopify_api/rest/resources/2023_07/product.rb +227 -0
  461. data/lib/shopify_api/rest/resources/2023_07/product_listing.rb +200 -0
  462. data/lib/shopify_api/rest/resources/2023_07/product_resource_feedback.rb +92 -0
  463. data/lib/shopify_api/rest/resources/2023_07/province.rb +136 -0
  464. data/lib/shopify_api/rest/resources/2023_07/recurring_application_charge.rb +176 -0
  465. data/lib/shopify_api/rest/resources/2023_07/redirect.rb +143 -0
  466. data/lib/shopify_api/rest/resources/2023_07/refund.rb +155 -0
  467. data/lib/shopify_api/rest/resources/2023_07/report.rb +125 -0
  468. data/lib/shopify_api/rest/resources/2023_07/resource_feedback.rb +77 -0
  469. data/lib/shopify_api/rest/resources/2023_07/script_tag.rb +159 -0
  470. data/lib/shopify_api/rest/resources/2023_07/shipping_zone.rb +87 -0
  471. data/lib/shopify_api/rest/resources/2023_07/shop.rb +222 -0
  472. data/lib/shopify_api/rest/resources/2023_07/smart_collection.rb +220 -0
  473. data/lib/shopify_api/rest/resources/2023_07/storefront_access_token.rb +91 -0
  474. data/lib/shopify_api/rest/resources/2023_07/tender_transaction.rb +97 -0
  475. data/lib/shopify_api/rest/resources/2023_07/theme.rb +127 -0
  476. data/lib/shopify_api/rest/resources/2023_07/transaction.rb +188 -0
  477. data/lib/shopify_api/rest/resources/2023_07/usage_charge.rb +106 -0
  478. data/lib/shopify_api/rest/resources/2023_07/user.rb +142 -0
  479. data/lib/shopify_api/rest/resources/2023_07/variant.rb +212 -0
  480. data/lib/shopify_api/rest/resources/2023_07/webhook.rb +172 -0
  481. data/lib/shopify_api/rest/resources/2023_10/abandoned_checkout.rb +194 -0
  482. data/lib/shopify_api/rest/resources/2023_10/access_scope.rb +62 -0
  483. data/lib/shopify_api/rest/resources/2023_10/apple_pay_certificate.rb +109 -0
  484. data/lib/shopify_api/rest/resources/2023_10/application_charge.rb +113 -0
  485. data/lib/shopify_api/rest/resources/2023_10/application_credit.rb +95 -0
  486. data/lib/shopify_api/rest/resources/2023_10/article.rb +269 -0
  487. data/lib/shopify_api/rest/resources/2023_10/asset.rb +122 -0
  488. data/lib/shopify_api/rest/resources/2023_10/assigned_fulfillment_order.rb +92 -0
  489. data/lib/shopify_api/rest/resources/2023_10/balance.rb +58 -0
  490. data/lib/shopify_api/rest/resources/2023_10/blog.rb +166 -0
  491. data/lib/shopify_api/rest/resources/2023_10/cancellation_request.rb +87 -0
  492. data/lib/shopify_api/rest/resources/2023_10/carrier_service.rb +120 -0
  493. data/lib/shopify_api/rest/resources/2023_10/checkout.rb +213 -0
  494. data/lib/shopify_api/rest/resources/2023_10/collect.rb +146 -0
  495. data/lib/shopify_api/rest/resources/2023_10/collection.rb +114 -0
  496. data/lib/shopify_api/rest/resources/2023_10/collection_listing.rb +159 -0
  497. data/lib/shopify_api/rest/resources/2023_10/comment.rb +287 -0
  498. data/lib/shopify_api/rest/resources/2023_10/country.rb +141 -0
  499. data/lib/shopify_api/rest/resources/2023_10/currency.rb +61 -0
  500. data/lib/shopify_api/rest/resources/2023_10/custom_collection.rb +191 -0
  501. data/lib/shopify_api/rest/resources/2023_10/customer.rb +333 -0
  502. data/lib/shopify_api/rest/resources/2023_10/customer_address.rb +215 -0
  503. data/lib/shopify_api/rest/resources/2023_10/deprecated_api_call.rb +61 -0
  504. data/lib/shopify_api/rest/resources/2023_10/discount_code.rb +226 -0
  505. data/lib/shopify_api/rest/resources/2023_10/dispute.rb +115 -0
  506. data/lib/shopify_api/rest/resources/2023_10/dispute_evidence.rb +121 -0
  507. data/lib/shopify_api/rest/resources/2023_10/dispute_file_upload.rb +85 -0
  508. data/lib/shopify_api/rest/resources/2023_10/draft_order.rb +279 -0
  509. data/lib/shopify_api/rest/resources/2023_10/event.rb +152 -0
  510. data/lib/shopify_api/rest/resources/2023_10/fulfillment.rb +235 -0
  511. data/lib/shopify_api/rest/resources/2023_10/fulfillment_event.rb +170 -0
  512. data/lib/shopify_api/rest/resources/2023_10/fulfillment_order.rb +318 -0
  513. data/lib/shopify_api/rest/resources/2023_10/fulfillment_request.rb +101 -0
  514. data/lib/shopify_api/rest/resources/2023_10/fulfillment_service.rb +134 -0
  515. data/lib/shopify_api/rest/resources/2023_10/gift_card.rb +222 -0
  516. data/lib/shopify_api/rest/resources/2023_10/gift_card_adjustment.rb +122 -0
  517. data/lib/shopify_api/rest/resources/2023_10/image.rb +161 -0
  518. data/lib/shopify_api/rest/resources/2023_10/inventory_item.rb +112 -0
  519. data/lib/shopify_api/rest/resources/2023_10/inventory_level.rb +183 -0
  520. data/lib/shopify_api/rest/resources/2023_10/location.rb +171 -0
  521. data/lib/shopify_api/rest/resources/2023_10/locations_for_move.rb +60 -0
  522. data/lib/shopify_api/rest/resources/2023_10/marketing_event.rb +213 -0
  523. data/lib/shopify_api/rest/resources/2023_10/metafield.rb +348 -0
  524. data/lib/shopify_api/rest/resources/2023_10/mobile_platform_application.rb +114 -0
  525. data/lib/shopify_api/rest/resources/2023_10/order.rb +489 -0
  526. data/lib/shopify_api/rest/resources/2023_10/order_risk.rb +148 -0
  527. data/lib/shopify_api/rest/resources/2023_10/page.rb +198 -0
  528. data/lib/shopify_api/rest/resources/2023_10/payment.rb +144 -0
  529. data/lib/shopify_api/rest/resources/2023_10/payment_gateway.rb +147 -0
  530. data/lib/shopify_api/rest/resources/2023_10/payment_transaction.rb +114 -0
  531. data/lib/shopify_api/rest/resources/2023_10/payout.rb +101 -0
  532. data/lib/shopify_api/rest/resources/2023_10/policy.rb +73 -0
  533. data/lib/shopify_api/rest/resources/2023_10/price_rule.rb +227 -0
  534. data/lib/shopify_api/rest/resources/2023_10/product.rb +227 -0
  535. data/lib/shopify_api/rest/resources/2023_10/product_listing.rb +200 -0
  536. data/lib/shopify_api/rest/resources/2023_10/product_resource_feedback.rb +92 -0
  537. data/lib/shopify_api/rest/resources/2023_10/province.rb +136 -0
  538. data/lib/shopify_api/rest/resources/2023_10/recurring_application_charge.rb +176 -0
  539. data/lib/shopify_api/rest/resources/2023_10/redirect.rb +143 -0
  540. data/lib/shopify_api/rest/resources/2023_10/refund.rb +155 -0
  541. data/lib/shopify_api/rest/resources/2023_10/report.rb +125 -0
  542. data/lib/shopify_api/rest/resources/2023_10/resource_feedback.rb +77 -0
  543. data/lib/shopify_api/rest/resources/2023_10/script_tag.rb +159 -0
  544. data/lib/shopify_api/rest/resources/2023_10/shipping_zone.rb +87 -0
  545. data/lib/shopify_api/rest/resources/2023_10/shop.rb +222 -0
  546. data/lib/shopify_api/rest/resources/2023_10/smart_collection.rb +220 -0
  547. data/lib/shopify_api/rest/resources/2023_10/storefront_access_token.rb +91 -0
  548. data/lib/shopify_api/rest/resources/2023_10/tender_transaction.rb +97 -0
  549. data/lib/shopify_api/rest/resources/2023_10/theme.rb +127 -0
  550. data/lib/shopify_api/rest/resources/2023_10/transaction.rb +188 -0
  551. data/lib/shopify_api/rest/resources/2023_10/usage_charge.rb +106 -0
  552. data/lib/shopify_api/rest/resources/2023_10/user.rb +142 -0
  553. data/lib/shopify_api/rest/resources/2023_10/variant.rb +212 -0
  554. data/lib/shopify_api/rest/resources/2023_10/webhook.rb +172 -0
  555. data/lib/shopify_api/rest/resources/2024_01/abandoned_checkout.rb +194 -0
  556. data/lib/shopify_api/rest/resources/2024_01/access_scope.rb +62 -0
  557. data/lib/shopify_api/rest/resources/2024_01/apple_pay_certificate.rb +109 -0
  558. data/lib/shopify_api/rest/resources/2024_01/application_charge.rb +113 -0
  559. data/lib/shopify_api/rest/resources/2024_01/application_credit.rb +95 -0
  560. data/lib/shopify_api/rest/resources/2024_01/article.rb +269 -0
  561. data/lib/shopify_api/rest/resources/2024_01/asset.rb +122 -0
  562. data/lib/shopify_api/rest/resources/2024_01/assigned_fulfillment_order.rb +92 -0
  563. data/lib/shopify_api/rest/resources/2024_01/balance.rb +58 -0
  564. data/lib/shopify_api/rest/resources/2024_01/blog.rb +166 -0
  565. data/lib/shopify_api/rest/resources/2024_01/cancellation_request.rb +87 -0
  566. data/lib/shopify_api/rest/resources/2024_01/carrier_service.rb +120 -0
  567. data/lib/shopify_api/rest/resources/2024_01/checkout.rb +213 -0
  568. data/lib/shopify_api/rest/resources/2024_01/collect.rb +146 -0
  569. data/lib/shopify_api/rest/resources/2024_01/collection.rb +114 -0
  570. data/lib/shopify_api/rest/resources/2024_01/collection_listing.rb +159 -0
  571. data/lib/shopify_api/rest/resources/2024_01/comment.rb +287 -0
  572. data/lib/shopify_api/rest/resources/2024_01/country.rb +141 -0
  573. data/lib/shopify_api/rest/resources/2024_01/currency.rb +61 -0
  574. data/lib/shopify_api/rest/resources/2024_01/custom_collection.rb +191 -0
  575. data/lib/shopify_api/rest/resources/2024_01/customer.rb +333 -0
  576. data/lib/shopify_api/rest/resources/2024_01/customer_address.rb +215 -0
  577. data/lib/shopify_api/rest/resources/2024_01/deprecated_api_call.rb +61 -0
  578. data/lib/shopify_api/rest/resources/2024_01/discount_code.rb +226 -0
  579. data/lib/shopify_api/rest/resources/2024_01/dispute.rb +115 -0
  580. data/lib/shopify_api/rest/resources/2024_01/dispute_evidence.rb +121 -0
  581. data/lib/shopify_api/rest/resources/2024_01/dispute_file_upload.rb +85 -0
  582. data/lib/shopify_api/rest/resources/2024_01/draft_order.rb +279 -0
  583. data/lib/shopify_api/rest/resources/2024_01/event.rb +152 -0
  584. data/lib/shopify_api/rest/resources/2024_01/fulfillment.rb +235 -0
  585. data/lib/shopify_api/rest/resources/2024_01/fulfillment_event.rb +170 -0
  586. data/lib/shopify_api/rest/resources/2024_01/fulfillment_order.rb +326 -0
  587. data/lib/shopify_api/rest/resources/2024_01/fulfillment_request.rb +101 -0
  588. data/lib/shopify_api/rest/resources/2024_01/fulfillment_service.rb +134 -0
  589. data/lib/shopify_api/rest/resources/2024_01/gift_card.rb +222 -0
  590. data/lib/shopify_api/rest/resources/2024_01/gift_card_adjustment.rb +122 -0
  591. data/lib/shopify_api/rest/resources/2024_01/image.rb +161 -0
  592. data/lib/shopify_api/rest/resources/2024_01/inventory_item.rb +112 -0
  593. data/lib/shopify_api/rest/resources/2024_01/inventory_level.rb +183 -0
  594. data/lib/shopify_api/rest/resources/2024_01/location.rb +171 -0
  595. data/lib/shopify_api/rest/resources/2024_01/locations_for_move.rb +60 -0
  596. data/lib/shopify_api/rest/resources/2024_01/marketing_event.rb +213 -0
  597. data/lib/shopify_api/rest/resources/2024_01/metafield.rb +348 -0
  598. data/lib/shopify_api/rest/resources/2024_01/mobile_platform_application.rb +114 -0
  599. data/lib/shopify_api/rest/resources/2024_01/order.rb +489 -0
  600. data/lib/shopify_api/rest/resources/2024_01/order_risk.rb +148 -0
  601. data/lib/shopify_api/rest/resources/2024_01/page.rb +198 -0
  602. data/lib/shopify_api/rest/resources/2024_01/payment.rb +144 -0
  603. data/lib/shopify_api/rest/resources/2024_01/payment_gateway.rb +147 -0
  604. data/lib/shopify_api/rest/resources/2024_01/payment_transaction.rb +114 -0
  605. data/lib/shopify_api/rest/resources/2024_01/payout.rb +101 -0
  606. data/lib/shopify_api/rest/resources/2024_01/policy.rb +73 -0
  607. data/lib/shopify_api/rest/resources/2024_01/price_rule.rb +227 -0
  608. data/lib/shopify_api/rest/resources/2024_01/product.rb +227 -0
  609. data/lib/shopify_api/rest/resources/2024_01/product_listing.rb +200 -0
  610. data/lib/shopify_api/rest/resources/2024_01/product_resource_feedback.rb +92 -0
  611. data/lib/shopify_api/rest/resources/2024_01/province.rb +136 -0
  612. data/lib/shopify_api/rest/resources/2024_01/recurring_application_charge.rb +176 -0
  613. data/lib/shopify_api/rest/resources/2024_01/redirect.rb +143 -0
  614. data/lib/shopify_api/rest/resources/2024_01/refund.rb +155 -0
  615. data/lib/shopify_api/rest/resources/2024_01/report.rb +125 -0
  616. data/lib/shopify_api/rest/resources/2024_01/resource_feedback.rb +77 -0
  617. data/lib/shopify_api/rest/resources/2024_01/script_tag.rb +159 -0
  618. data/lib/shopify_api/rest/resources/2024_01/shipping_zone.rb +87 -0
  619. data/lib/shopify_api/rest/resources/2024_01/shop.rb +222 -0
  620. data/lib/shopify_api/rest/resources/2024_01/smart_collection.rb +220 -0
  621. data/lib/shopify_api/rest/resources/2024_01/storefront_access_token.rb +91 -0
  622. data/lib/shopify_api/rest/resources/2024_01/tender_transaction.rb +97 -0
  623. data/lib/shopify_api/rest/resources/2024_01/theme.rb +127 -0
  624. data/lib/shopify_api/rest/resources/2024_01/transaction.rb +188 -0
  625. data/lib/shopify_api/rest/resources/2024_01/usage_charge.rb +106 -0
  626. data/lib/shopify_api/rest/resources/2024_01/user.rb +142 -0
  627. data/lib/shopify_api/rest/resources/2024_01/variant.rb +212 -0
  628. data/lib/shopify_api/rest/resources/2024_01/webhook.rb +172 -0
  629. data/lib/shopify_api/utils/attributes_comparator.rb +85 -0
  630. data/lib/shopify_api/utils/hmac_validator.rb +2 -2
  631. data/lib/shopify_api/version.rb +1 -1
  632. data/lib/shopify_api/webhooks/handler.rb +24 -1
  633. data/lib/shopify_api/webhooks/registration.rb +21 -6
  634. data/lib/shopify_api/webhooks/registrations/event_bridge.rb +1 -1
  635. data/lib/shopify_api/webhooks/registrations/http.rb +1 -1
  636. data/lib/shopify_api/webhooks/registrations/pub_sub.rb +2 -1
  637. data/lib/shopify_api/webhooks/registry.rb +49 -7
  638. data/lib/shopify_api/webhooks/request.rb +10 -0
  639. data/shopify_api.gemspec +2 -3
  640. metadata +234 -29
  641. data/.github/workflows/stale.yml +0 -43
  642. data/docs/issues.md +0 -39
  643. data/docs/usage/session_storage.md +0 -46
data/docs/usage/oauth.md CHANGED
@@ -5,17 +5,81 @@ Once the library is set up for your project, you'll be able to use it to start a
5
5
  To do this, you can follow the steps below.
6
6
  For more information on authenticating a Shopify app please see the [Types of Authentication](https://shopify.dev/docs/apps/auth#types-of-authentication) page.
7
7
 
8
- ## Add a route to start OAuth
8
+ ## Session Persistence
9
+ Session persistence is deprecated from the `ShopifyAPI` library gem since [version 12.3.0](https://github.com/Shopify/shopify-api-ruby/blob/main/CHANGELOG.md#version-1230). The responsibility of session storage typically is fulfilled by the web framework middleware.
10
+ This API library's focus is on making requests and facilitate session creation.
9
11
 
10
- The route for starting the OAuth process (in this case `/login`) will use the library's `begin_auth` method. The method will return an `auth_route` URI that will be used for redirecting the user to the Shopify Authentication screen and a session cookie to store on the user's browser. These return values will be a hash in the form of {`auth_route`: `String`, `cookie`: `ShopifyAPI::Auth::Oauth::SessionCookie`}
12
+ ⚠️ If you're not using the [ShopifyApp](https://github.com/Shopify/shopify_app) gem, you may use ShopifyAPI to perform OAuth to create sessions, but you must implement your own session storage method to persist the session information to be used in authenticated API calls.
11
13
 
14
+ ## Note about Rails
15
+ If using in the Rails framework, we highly recommend you use the [shopify_app](https://github.com/Shopify/shopify_app) gem to perform OAuth, you won't have to follow the instructions below to start your own OAuth flow.
16
+ - See `ShopifyApp`'s [documentation on session storage](https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md#sessions)
17
+
18
+ If you aren't using Rails, you can look at how the `ShopifyApp` gem handles OAuth flow for further examples:
19
+ - [Session Controller](https://github.com/Shopify/shopify_app/blob/main/app/controllers/shopify_app/sessions_controller.rb)
20
+ - Triggering and redirecting user to **begin** OAuth flow
21
+ - [Callback Controller](https://github.com/Shopify/shopify_app/blob/main/app/controllers/shopify_app/callback_controller.rb)
22
+ - Creating / storing sessions to **complete** the OAuth flow
23
+
24
+ ## Performing OAuth
25
+ #### Steps
26
+ 1. [Add a route to start OAuth](#1-add-a-route-to-start-oauth)
27
+ 2. [Add an Oauth callback route](#2-add-an-oauth-callback-route)
28
+ 3. [Begin OAuth](#3-begin-oauth)
29
+ 4. [Handle OAuth Callback](#4-handle-oauth-callback)
30
+ 5. [Using OAuth Session to make authenticated API calls](#5-using-oauth-session-to-make-authenticated-api-calls)
31
+
32
+ ### 1. Add a route to start OAuth
33
+ Add a route to your app to start the OAuth process.
34
+
35
+ ```ruby
36
+ class ShopifyAuthController < ApplicationController
37
+ def login
38
+ # This method will trigger the start of the OAuth process
39
+ end
40
+ end
41
+ ```
42
+
43
+ ### 2. Add an OAuth callback route
44
+ After the app is authenticated with Shopify, the Shopify platform will send a request back to your app using this route
45
+ (which you will provide as the `redirect_path` parameter to `begin_auth` method, in [step 3 - Begin OAuth](#3-begin-oauth)).
46
+ ```ruby
47
+ class ShopifyCallbackController < ApplicationController
48
+ def callback
49
+ # This callback method will be called once user grants permission to this app from Shopify Admin.
50
+ end
51
+ ```
52
+
53
+ ### 3. Begin OAuth
54
+ Use [`ShopifyAPI::Auth::Oauth.begin_auth`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/auth/oauth.rb#L22) method to start OAuth process for your app.
55
+
56
+ #### Input
12
57
  | Parameter | Type | Required? | Default Value | Notes |
13
58
  | -------------- | ---------------------- | :-------: | :-----------: | ----------------------------------------------------------------------------------------------------------- |
14
59
  | `shop` | `String` | Yes | - | A Shopify domain name in the form `{exampleshop}.myshopify.com`. |
15
60
  | `redirect_path` | `String` | Yes | - | The redirect path used for callback with a leading `/`. The route should be allowed under the app settings. |
16
61
  | `is_online` | `Boolean` | No | `true` | `true` if the session is online and `false` otherwise. |
17
62
 
18
- Your app should take the returned values from the `begin_auth` function and redirect the user to url defined by `auth_route` and set the cookie in the user's browser. We strongly recommend that you use secure, httpOnly cookies for this to help prevent session hijacking.
63
+ #### Output
64
+ `begin_auth` method will return a hash result in the form of:
65
+ ```ruby
66
+ {
67
+ auth_route: String,
68
+ cookie: ShopifyAPI::Auth::Oauth::SessionCookie,
69
+ }
70
+ ```
71
+
72
+ | Key | Type | Notes |
73
+ |-----|------|-------|
74
+ |`auth_route`|`String`|URI that will be used for redirecting the user to the Shopify Authentication screen|
75
+ |`cookie`|`ShopifyAPI::Auth::Oauth::SessionCookie`|A session cookie to store on the user's browser. |
76
+
77
+ #### Example
78
+ Your app should take the returned values from the `begin_auth` method and:
79
+
80
+ 1. Set the cookie in the user's browser. We strongly recommend that you use secure, httpOnly cookies for this to help prevent session hijacking.
81
+ 2. Redirect the user to authorization url defined by `auth_route`.
82
+ - This will redirect the user to the Shopify Admin page to authorize/grant permission to the app.
19
83
 
20
84
  An example is shown below in a Rails app but these steps could be applied in any framework:
21
85
 
@@ -24,8 +88,10 @@ class ShopifyAuthController < ApplicationController
24
88
  def login
25
89
  shop = request.headers["Shop"]
26
90
 
91
+ # Builds the authorization URL route to redirect the user to
27
92
  auth_response = ShopifyAPI::Auth::Oauth.begin_auth(shop: domain, redirect_path: "/auth/callback")
28
93
 
94
+ # Store the authorization cookie
29
95
  cookies[auth_response[:cookie].name] = {
30
96
  expires: auth_response[:cookie].expires,
31
97
  secure: true,
@@ -33,26 +99,65 @@ class ShopifyAuthController < ApplicationController
33
99
  value: auth_response[:cookie].value
34
100
  }
35
101
 
102
+ # Redirect the user to "auth_response[:auth_route]" to allow user to grant the app permission
103
+ # This will lead the user to the Shopify Authorization page
36
104
  head 307
37
105
  response.set_header("Location", auth_response[:auth_route])
38
106
  end
39
107
  end
40
108
  ```
41
109
 
42
- ## Add your OAuth callback route
110
+ ⚠️ You can see a concrete example in the `ShopifyApp` gem's [SessionController](https://github.com/Shopify/shopify_app/blob/main/app/controllers/shopify_app/sessions_controller.rb).
43
111
 
44
- After the app is authenticated with Shopify, the Shopify platform will send a request back to your app using this route (which you provided as a parameter to `begin_auth`, above). Your app will now use the provided `validate_auth_callback` method to finalize the OAuth process. This method returns a hash containing the new session and a cookie to be set in the browser in form of {`session`: `ShopifyAPI::Auth::Session`, `cookie`: `ShopifyAPI::Auth::Oauth::SessionCookie`}.
112
+ ### 4. Handle OAuth Callback
113
+ When the user grants permission to the app in Shopify admin, they'll be redirected back to the app's callback route
114
+ (configured in [Step 2 - Add an OAuth callback route](#2-add-an-oauth-callback-route)).
115
+
116
+ Use [`ShopifyAPI::AuthL::Oauth.validate_auth_callback`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/auth/oauth.rb#L60) method to finalize the OAuth process.
117
+
118
+ #### Input
119
+ | Parameter | Type | Notes |
120
+ | ------------ | --------| ----------------------------------------------------------------------------------------------------------- |
121
+ | `cookies` | `Hash` | All browser cookies in a hash format with key and value as `String` |
122
+ | `auth_query` | `ShopifyAPI::Auth::Oauth::AuthQuery`| An `AuthQuery` containing the authorization request information used to validate the request.|
123
+
124
+ #### Output
125
+ This method returns a hash containing the new session and a cookie to be set in the browser in form of:
126
+ ```ruby
127
+ {
128
+ session: ShopifyAPI::Auth::Session,
129
+ cookie: ShopifyAPI::Auth::Oauth::SessionCookie,
130
+ }
131
+ ```
132
+ | Key | Type | Notes |
133
+ |-----|------|-------|
134
+ |`session`|`ShopifyAPI::Auth::Session`|A session object that contains necessary information to identify the session like `shop`, `access_token`, `scope`, etc.|
135
+ |`cookie` |`ShopifyAPI::Auth::Oauth::SessionCookie`|A session cookie to store on the user's browser. |
136
+
137
+ #### Example
138
+ Your app should call `validate_auth_callback` to construct the `Session` object and cookie that will be used later for authenticated API requests.
139
+
140
+ 1. Call `validate_auth_callback` to construct `Session` and `SessionCookie`.
141
+ 2. Update browser cookies with the new value for the session.
142
+ 3. Store the `Session` object to be used later when making authenticated API calls.
143
+ - See [Make a GraphQL API call](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/graphql.md), or
144
+ [Make a REST API call](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/rest.md) for examples on how to use the result `Session` object.
45
145
 
46
146
  An example is shown below in a Rails app but these steps could be applied in any framework:
47
147
 
48
148
  ```ruby
49
149
  def callback
50
150
  begin
151
+ # Create an AuthQuery object from the request parameters,
152
+ # and pass the list of cookies to `validate_auth_callback`
51
153
  auth_result = ShopifyAPI::Auth::Oauth.validate_auth_callback(
52
154
  cookies: cookies.to_h,
53
- auth_query: ShopifyAPI::Auth::Oauth::AuthQuery.new(request.parameters.symbolize_keys.except(:controller, :action))
155
+ auth_query: ShopifyAPI::Auth::Oauth::AuthQuery.new(
156
+ request.parameters.symbolize_keys.except(:controller, :action)
157
+ )
54
158
  )
55
159
 
160
+ # Update cookies with the authorized access token from result
56
161
  cookies[auth_result[:cookie].name] = {
57
162
  expires: auth_result[:cookie].expires,
58
163
  secure: true,
@@ -60,6 +165,10 @@ def callback
60
165
  value: auth_result[:cookie].value
61
166
  }
62
167
 
168
+ # Store the Session object if your app has a DB/file storage for session persistence
169
+ # This session object could be retrieved later to make authenticated API requests to Shopify
170
+ MyApp::SessionRepository.store_session(auth_result[:session])
171
+
63
172
  puts("OAuth complete! New access token: #{auth_result[:session].access_token}")
64
173
 
65
174
  head 307
@@ -70,35 +179,59 @@ def callback
70
179
  end
71
180
  end
72
181
  ```
73
- ## Fetching sessions
74
182
 
75
- You can use the OAuth methods to create both offline and online sessions. Once the process is completed, the session will be stored as per your `Context.session_storage`, and can be retrieved with `SessionUtils` class methods.
183
+ ⚠️ You can see a concrete example in the `ShopifyApp` gem's [CallbackController](https://github.com/Shopify/shopify_app/blob/main/app/controllers/shopify_app/callback_controller.rb).
76
184
 
77
- - To load current session, you can use the following method:
185
+ ### 5. Using OAuth Session to make authenticated API calls
186
+ Once your OAuth flow is complete, and you have stored your `Session` object from [Step 4 - Handle OAuth Callback](#4-handle-oauth-callback), you may use that `Session` object to make authenticated API calls.
78
187
 
188
+ Example:
79
189
  ```ruby
80
- ShopifyAPI::Utils::SessionUtils.load_current_session(auth_header: <auth-header>, cookies: <cookies>, is_online: <true|false>)
81
- ```
190
+ def make_api_request(shop)
191
+ # 1. Retrieve the Session object stored from previous step
192
+ session = MyApp::SessionRepository.retrieve_session_for_shop(shop)
193
+
194
+ # 2. Create API client with the session information
195
+ # session must be type `ShopifyAPI::Auth::Session`
196
+ graphql_client = ShopifyAPI::Clients::Graphql::Admin.new(session: session)
82
197
 
83
- Accepted arguments:
84
- | Parameter | Type | Notes |
85
- | ----------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
86
- | `auth_header` | `String` | JWT token will be extracted from `auth_header` to load session for embedded apps. If JWT token is not provided this methods will try with `cookies`. Only required if trying to load, an embedded session. |
87
- | `cookies` | `Hash(String, String)` | The cookies from the HTTP request. A session cookie named `shopify_app_session` is used to load session for non-embedded apps. Can be omitted if loading and embedded session without falling back on cookies |
88
- | `is_online` | `Boolean` | Whether to load online or offline sessions. Defaults to `false` |
198
+ # 3. Use API client to make queries
199
+ response = graphql_client.query(query: MY_API_QUERY)
89
200
 
90
- This method will return a `ShopifyAPI::Auth::Session` if a session exists. Either a proper token or a proper cookie must be present.
201
+ # 4. Use the response for your app
202
+ ...
203
+ end
204
+ ```
91
205
 
92
- - To load offline session, you can use the following method:
206
+ #### Setting `active_session`
207
+ Alternatively, if you don't want to keep having to retrieve a Session object for a shop, you may set [`ShopifyAPI::Context.active_session`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/context.rb#L144).
208
+ All of the API client classes will [use the `active_session`](https://github.com/Shopify/shopify-api-ruby/blob/c3bb9d8f8b6053756149a4cf9299e059ec337544/lib/shopify_api/clients/http_client.rb#L13) if the `session` passed in is `nil`.
93
209
 
210
+ Example:
94
211
  ```ruby
95
- ShopifyAPI::Utils::SessionUtils.load_offline_session(shop)
96
- ```
212
+ #### Configuration
213
+ def configure_app
214
+ # This method is called before making authenticated API calls
215
+ session = retrieve_session_from_file # your implementation of retrieving a session
216
+
217
+ # Activate session to be used in all API calls
218
+ # session must be type `ShopifyAPI::Auth::Session`
219
+ ShopifyAPI::Context.activate_session(session)
220
+
221
+ end
222
+
223
+ #### Using clients to make authenticated API calls
224
+ def make_api_request
225
+ # 1. Create API client without session information
226
+ # The graphql_client will use `ShopifyAPI::Context.active_session` when making API calls
227
+ graphql_client = ShopifyAPI::Clients::Graphql::Admin.new
97
228
 
98
- Accepted arguments:
99
- | Parameter | Type | Notes |
100
- | ------------------- | --------- | --------------------------------------------- |
101
- | `shop` | `String` | The shop url to find the offline session for. |
102
- | `include_expired` | `Boolean` | Include expired sessions or not. |
229
+ # 2. Use API client to make queries
230
+ ...
231
+ end
232
+
233
+ ```
103
234
 
104
- This method will return a `ShopifyAPI::Auth::Session` if a session exists and `nil` otherwise. This method **does not** perform any validation on the shop domain, so it **must not** rely on user input for the domain. This method is typically meant to be used in background tasks like webhooks, where the data is expected to have been validated when the task was enqueued.
235
+ ⚠️ See following docs on how to use the API clients:
236
+ - [Make a GraphQL API call](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/graphql.md)
237
+ - [Make a REST API call](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/rest.md)
data/docs/usage/rest.md CHANGED
@@ -1,10 +1,206 @@
1
1
  # Make a REST API call
2
2
 
3
- Once OAuth is complete, we can use the `ShopifyAPI::Clients::Rest::Admin` client to make an API call to the Shopify Admin API. To do this, you can create an instance of `ShopifyAPI::Clients::Rest::Admin` using the current session to make requests to the Admin API.
3
+ Once OAuth is complete, we can use `ShopifyAPI`'s REST library to make authenticated API calls to the Shopify Admin API.
4
+ #### Required Session
5
+ Every API request requires a valid
6
+ [ShopifyAPI::Auth::Session](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/auth/session.rb).
7
+
8
+ To instantiate a session, we recommend you either use the `shopify_app` if working in Rails, or refer to our OAuth docs on constructing a session:
9
+ - ["Custom Apps"](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/custom_apps.md) - documentation on how to create Session from a custom app API token.
10
+ - ["Performing OAuth"](https://github.com/Shopify/shopify-api-ruby/blob/main/docs/usage/oauth.md) - documentation on how to create new sessions
11
+ - [[ShopifyApp] - "Session"](https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md) - documentation on session handling if you're using the [`ShopifyApp`](https://github.com/Shopify/shopify_app) gem.
12
+
13
+ #### There are 2 methods you can use to make REST API calls to Shopify:
14
+ - [Using REST Resources](#using-rest-resources)
15
+ - Resource classes with similar syntax as `ActiveResource`, and follows our REST convention. Example:
16
+ ``` ruby
17
+ # Update product title
18
+ product = ShopifyAPI::Product.find(id: <product_id>)
19
+ product.title = "My awesome product"
20
+ product.save!
21
+ ```
22
+
23
+ - [Using REST Admin Client](#using-rest-admin-client)
24
+ - More manual input method to make the API call. Example:
25
+ ```ruby
26
+ # Create a new client.
27
+ rest_client = ShopifyAPI::Clients::Rest::Admin.new
28
+
29
+ # Update product title
30
+ body = {
31
+ product: {
32
+ title: "My cool product"
33
+ }
34
+ }
35
+
36
+ # Use `client.put` to send your request to the specified Shopify Admin REST API endpoint.
37
+ rest_client.put(path: "products/<id>.json", body: body)
38
+ ```
39
+
40
+ ## Using REST Resources
41
+ We provide a templated class library to access REST resources similar to `ActiveResource`. Format of the methods closely resemble our [REST API schema](https://shopify.dev/docs/api/admin-rest).
42
+
43
+ The version of REST resource that's loaded and used is set from [`ShopifyAPI::Context.setup`](https://github.com/Shopify/shopify-api-ruby/blob/main/README.md#setup-shopify-context)
44
+
45
+ ### Instantiation
46
+ Create an instance of the REST resource you'd like to use and optionally provide the following parameters.
47
+ #### Constructor parameters
48
+ | Parameter | Type | Notes |
49
+ | ----------|------|-------|
50
+ | `session` | `ShopifyAPI::Auth::Session` | Default value is `nil`. <br><br>When `nil` is passed in, active session information is inferred from `ShopifyAPI::Context.active_session`. <br>To set active session, use `ShopifyAPI::Context.activate_session`. <br><br>This is handled automatically behind the scenes if you use ShopifyApp's [session controllers](https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md). |
51
+ | `from_hash` | `Hash` | Default value is `nil`. Sets the resource properties to the values provided from the hash. |
52
+
53
+ Examples:
54
+
55
+ ```ruby
56
+ # To construct an Orders object using default session
57
+ # This creates a new order object with properties provided from the hash
58
+ order = ShopifyAPI::Orders.new(from_hash: {property: value})
59
+ order.save!
60
+ ```
61
+
62
+ ### Methods
63
+ Typical methods provided for each resources are:
64
+ - `find`
65
+ - `delete`
66
+ - `all`
67
+ - `count`
68
+
69
+ Full list of methods can be found on each of the resource class.
70
+ - Path:
71
+ - https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/rest/resources/#{version}/#{resource}.rb
72
+ - Example for `Order` resource on `2024-01` version:
73
+ - https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/rest/resources/2024_01/order.rb
74
+
75
+ ### The `save` method
76
+
77
+ The `save` or `save!` method on a resource allows you to `create` or `update` that resource.
78
+
79
+ #### Create a new resource
80
+
81
+ To create a new resource using the `save` or `save!` method, you can initialize the resource with a hash of values or simply assigning them manually. For example:
82
+
83
+ ```Ruby
84
+ # Create a new product from hash
85
+ product_properties = {
86
+ title: "My awesome product"
87
+ }
88
+ product = ShopifyAPI::Product.new(from_hash: product_properties)
89
+ product.save!
90
+
91
+ # Create a new product manually
92
+ product = ShopifyAPI::Product.new
93
+ product.title = "Another one"
94
+ product.save!
95
+ ```
96
+
97
+ #### Update an existing resource
98
+
99
+ To update an existing resource using the `save` or `save!` method, you'll need to fetch the resource from Shopify first. Then, you can manually assign new values to the resource before calling `save` or `save!`. For example:
100
+
101
+ ```Ruby
102
+ # Update a product's title
103
+ product = ShopifyAPI::Product.find(id: product_id)
104
+ product.title = "My new title"
105
+ product.save!
106
+
107
+ # Remove a line item from a draft order
108
+ draft_order = ShopifyAPI::DraftOrder.find(id: draft_order_id)
109
+
110
+ new_line_items = draft_order.line_items.reject { |line_item| line_item["id"] == 12345 }
111
+ draft_order.line_items = new_line_items
112
+
113
+ draft_order.save!
114
+ ```
115
+
116
+ > [!IMPORTANT]
117
+ > If you need to unset an existing value,
118
+ > please explicitly set that attribute to `nil` or empty values such as `[]` or `{}`. For example:
119
+ >
120
+ > ```Ruby
121
+ > # Removes shipping address from draft_order
122
+ > draft_order.shipping_address = {}
123
+ > draft_order.save!
124
+ > ```
125
+ >
126
+ > This is because only modified values are sent to the API, so if `shipping_address` is not "modified" to `{}`. It won't be part of the PUT request payload
127
+
128
+ When updating a resource, only the modified attributes, the resource's primary key, and required parameters are sent to the API. The primary key is usually the `id` attribute of the resource, but it can vary if the `primary_key` method is overwritten in the resource's class. The required parameters are identified using the path parameters of the `PUT` endpoint of the resource.
129
+
130
+ ### Headers
131
+ You can add custom headers to the HTTP calls made by methods like `find`, `delete`, `all`, `count`
132
+ by setting the `headers` attribute on the `ShopifyAPI::Rest::Base` class in an initializer, like so:
133
+
134
+ ```ruby
135
+ ShopifyAPI::Rest::Base.headers = { "X-Custom-Header" => "Custom Value" }
136
+ # `find` will call the API endpoint with the custom header
137
+ ShopifyAPI::Customer.find(id: customer_id)
138
+ ```
139
+
140
+ ### Usage Examples
141
+ ⚠️ The [API reference documentation](https://shopify.dev/docs/api/admin-rest) contains more examples on how to use each REST Resources.
142
+
143
+ ```Ruby
144
+ # Find and update a customer email
145
+ customer = ShopifyAPI::Customer.find(id: customer_id)
146
+ customer.email = "steve-lastnameson@example.com"
147
+ customer.save!
148
+
149
+ # Get all orders
150
+ orders = ShopifyAPI::Orders.all
151
+
152
+ # Retrieve a specific fulfillment order
153
+ fulfillment_order_id = 123456789
154
+ fulfillment_order = ShopifyAPI::FulfillmentOrder.find(id: fulfillment_order_id)
155
+
156
+ # Remove an existing product image
157
+ product_id = 1234567
158
+ image_id = 1233211234567
159
+ ShopifyAPI::Image.delete(product_id: product_id, id: image_id)
160
+ ```
161
+
162
+ More examples can be found in each resource's documentation on [shopify.dev](https://shopify.dev/docs/api/admin-rest), e.g.:
163
+ - [Order](https://shopify.dev/docs/api/admin-rest/current/resources/order)
164
+ - [Product](https://shopify.dev/docs/api/admin-rest/current/resources/product)
165
+
166
+ ## Using REST Admin Client
167
+
168
+ ### Instantiation
169
+ Create an instance of [`ShopifyAPI::Clients::Rest::Admin`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/clients/rest/admin.rb) using the current session to make requests to the Admin API.
170
+ #### Constructor parameters
171
+ | Parameter | Type | Notes |
172
+ | ----------|------|-------|
173
+ | `session` | `ShopifyAPI::Auth::Session` | Default value is `nil`. <br><br>When `nil` is passed in, active session information is inferred from `ShopifyAPI::Context.active_session`. <br>To set active session, use `ShopifyAPI::Context.activate_session`. <br><br>This is handled automatically behind the scenes if you use ShopifyApp's [session controllers](https://github.com/Shopify/shopify_app/blob/main/docs/shopify_app/sessions.md). |
174
+ | `api_version` | `String` | Default value is `nil`. When `nil` is passed in, api version is inferred from [`ShopifyAPI::Context.setup`](https://github.com/Shopify/shopify-api-ruby/blob/main/README.md#setup-shopify-context).|
175
+
176
+ Examples:
177
+ ```ruby
178
+ # Create a default client with `ShopifyAPI::Context.api_version`
179
+ # and the active session from `ShopifyAPI::Context.active_session`
180
+ client = ShopifyAPI::Clients::Rest::Admin.new
181
+
182
+ # Create a client with a specific session "my_session"
183
+ client = ShopifyAPI::Clients::Rest::Admin.new(session: my_session)
184
+
185
+ # Create a client with active session from `ShopifyAPI::Context.active_session`
186
+ # and a specific api_version - "unstable"
187
+ client = ShopifyAPI::Clients::Rest::Admin.new(api_version: "unstable")
188
+
189
+ # Create a client with a specific session "my_session" and api_version "unstable"
190
+ client = ShopifyAPI::Clients::Rest::Admin.new(session: my_session, api_version: "unstable")
191
+ ```
4
192
 
5
- ## Methods
193
+ ### Methods
6
194
 
7
- The Rest Admin client offers the 4 core request methods: `get`, `delete`, `post`, and `put`. These methods each take the parameters outlined in the table below. If the request is successful these methods will all return a `ShopifyAPI::Clients::HttpResponse` object, which has properties `code`, `headers`, and `body` otherwise an error will be raised describing what went wrong.
195
+ The `ShopifyAPI::Clients::Rest::Admin` client offers the 4 core request methods:
196
+ - `get`
197
+ - `delete`
198
+ - `post`
199
+ - `put`
200
+
201
+ #### Input Parameters
202
+
203
+ Each method can take the parameters outlined in the table below.
8
204
 
9
205
  | Parameter | Type | Required in Methods | Default Value | Notes |
10
206
  | -------------- | -------------------------------------------------------- | :-----------------: | :-----------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -14,16 +210,40 @@ The Rest Admin client offers the 4 core request methods: `get`, `delete`, `post`
14
210
  | `extraHeaders` | `Hash(any(Symbol, String), any(String, Integer, Float))` | none | none | Any additional headers you want to send with your request |
15
211
  | `tries` | `Integer` | None | `1` | The maximum number of times to try the request _(must be >= 0)_ |
16
212
 
17
- **Note:** _These paramaters can still be used in all methods regardless of if they are required._
213
+ **Note:** _These parameters can still be used in all methods regardless of if they are required._
214
+
215
+ #### Output
216
+ ##### Success
217
+ If the request is successful these methods will all return a [`ShopifyAPI::Clients::HttpResponse`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/clients/http_response.rb) object, which has the following methods:
218
+ | Methods | Type | Notes |
219
+ |---------|------|-------|
220
+ | `code` |`Integer`| HTTP Response code, e.g. `200`|
221
+ | `header` |`Hash{String, [String]}` | HTTP Response headers |
222
+ | `body` | `Hash{String, Untyped}` | HTTP Response body |
223
+ | `prev_page_info` | `String` | See [Pagination](#pagination)|
224
+ | `next_page_info` | `String` | See [Pagination](#pagination)|
18
225
 
19
- ## Usage Examples:
226
+ ##### Failure
227
+ If the request has failed, an error will be raised describing what went wrong.
228
+ You can rescue [`ShopifyAPI::Errors::HttpResponseError`](https://github.com/Shopify/shopify-api-ruby/blob/main/lib/shopify_api/errors/http_response_error.rb)
229
+ and output error messages with `errors.full_messages`
20
230
 
21
- ### Perform a `GET` request:
231
+ See example:
22
232
 
23
233
  ```ruby
24
- # Load the current session to get the `accessToken`.
25
- session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
234
+ client = ShopifyAPI::Clients::Rest::Admin.new(session: session)
235
+ response = client.get(path: "NOT-REAL")
236
+ some_function(response.body)
237
+ rescue ShopifyAPI::Errors::HttpResponseError => e
238
+ puts fulfillment.errors.full_messages
239
+ # {"errors"=>"Not Found"}
240
+ # If you report this error, please include this id: bce76672-40c6-4047-b598-46208ab076f0.
241
+ ```
242
+ ### Usage Examples
243
+
244
+ #### Perform a `GET` request
26
245
 
246
+ ```ruby
27
247
  # Create a new client.
28
248
  client = ShopifyAPI::Clients::Rest::Admin.new(session: session)
29
249
 
@@ -33,13 +253,11 @@ response = client.get(path: "products")
33
253
  # Do something with the returned data
34
254
  some_function(response.body)
35
255
  ```
256
+ _For more information on the `products` endpoint, [check out our API reference guide](https://shopify.dev/docs/api/admin-rest/latest/resources/product)._
36
257
 
37
- ### Perform a `POST` request:
258
+ #### Perform a `POST` request
38
259
 
39
260
  ```ruby
40
- # Load the current session to get the `accessToken`.
41
- session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
42
-
43
261
  # Create a new client.
44
262
  client = ShopifyAPI::Clients::Rest::Admin.new(session: session)
45
263
 
@@ -54,64 +272,59 @@ body = {
54
272
  }
55
273
 
56
274
  # Use `client.post` to send your request to the specified Shopify Admin REST API endpoint.
275
+ # This POST request will create a new product.
57
276
  client.post({
58
277
  path: "products",
59
278
  body: body,
60
279
  });
61
280
  ```
62
281
 
63
- _for more information on the `products` endpoint, [check out our API reference guide](https://shopify.dev/docs/api/admin-rest/unstable/resources/product)._
282
+ _For more information on the `products` endpoint, [check out our API reference guide](https://shopify.dev/docs/api/admin-rest/latest/resources/product)._
64
283
 
65
- ### Override the `api_version`:
284
+ #### Perform a `PUT` request
285
+ ```ruby
286
+ # Create a new client.
287
+ client = ShopifyAPI::Clients::Rest::Admin.new
66
288
 
67
- ```ruby
68
- # To experiment with prerelease features, pass the api_version "unstable".
69
- client = ShopifyAPI::Clients::Rest::Admin.new(session: session, api_version: "unstable")
70
- ```
289
+ # Update product title
290
+ body = {
291
+ product: {
292
+ title: "My cool product"
293
+ }
294
+ }
71
295
 
72
- ## Pagination
296
+ # Use `client.put` to send your request to the specified Shopify Admin REST API endpoint.
297
+ # This will update product title for product with ID <id>
298
+ client.put(path: "products/<id>.json", body: body)
299
+ ```
73
300
 
74
- This library also supports cursor-based pagination for REST Admin API requests. [Learn more about REST request pagination](https://shopify.dev/docs/api/usage/pagination-rest).
301
+ _For more information on the `products` endpoint, [check out our API reference guide](https://shopify.dev/docs/api/admin-rest/latest/resources/product)._
75
302
 
76
- After making a request, the `next_page_info` and `prev_page_info` can be found on the response object and passed as the page_info query param in other requests.
303
+ #### Accessing Rate Limit information
77
304
 
78
- An example of this is shown below:
305
+ The REST resources have `api_call_limit` and `retry_after` can be found on the Resource class. These values correspond to the `X-Shopify-Shop-Api-Call-Limit` and `Retry-After` [headers](https://shopify.dev/docs/api/usage/rate-limits#rest-admin-api-rate-limits) respectively.
79
306
 
80
307
  ```ruby
81
- session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
82
- client = ShopifyAPI::Clients::Rest::Admin.new(session: session)
83
-
84
- response = client.get(path: "products", query: { limit: 10 })
85
-
86
- loop do
87
- some_function(response.body)
88
- break unless response.next_page_info
89
- response = client.get(path: "products", query: { limit: 10, page_info: response.next_page_info })
90
- end
91
- ```
308
+ product = ShopifyAPI::Product.find(session: session, id: 12345)
92
309
 
93
- Similarly, when using REST resources the `next_page_info` and `prev_page_info` can be found on the Resource class and passed as the page_info query param in other requests.
310
+ # X-Shopify-Shop-Api-Call-Limit: 32/40
311
+ request_count = ShopifyAPI::Product.api_call_limit[:request_count] # 32
312
+ bucket_size = ShopifyAPI::Product.api_call_limit[:bucket_size] # 40
94
313
 
95
- An example of this is shown below:
314
+ retry_after = ShopifyAPI::Product.retry_request_after
96
315
 
97
- ```ruby
98
- session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
316
+ ```
99
317
 
100
- products = ShopifyAPI::Product.all(session: session, limit: 10)
318
+ ### Pagination
101
319
 
102
- loop do
103
- some_function(products)
104
- break unless ShopifyAPI::Product.next_page?
105
- products = ShopifyAPI::Product.all(session: session, limit: 10, page_info: ShopifyAPI::Product.next_page_info)
106
- end
107
- ```
320
+ This library also supports cursor-based pagination for REST Admin API requests. [Learn more about REST request pagination](https://shopify.dev/docs/api/usage/pagination-rest).
108
321
 
109
- The next/previous page_info strings can also be retrieved from the response object and added to a request query to retrieve the next/previous pages.
322
+ #### REST Admin Client
323
+ After making a request, the `next_page_info` and `prev_page_info` can be found on the response object and passed as the `page_info` query param in other requests.
110
324
 
111
325
  An example of this is shown below:
112
326
 
113
327
  ```ruby
114
- session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
115
328
  client = ShopifyAPI::Clients::Rest::Admin.new(session: session)
116
329
 
117
330
  response = client.get(path: "products", query: { limit: 10 })
@@ -123,22 +336,19 @@ if next_page_info
123
336
  end
124
337
  ```
125
338
 
126
- ### Error Messages
127
-
128
- You can rescue `ShopifyAPI::Errors::HttpResponseError` and output error messages with `errors.full_messages`
339
+ #### REST Resource
340
+ Similarly, when using REST resources the `next_page_info` and `prev_page_info` can be found on the Resource class and passed as the `page_info` query param in other requests.
129
341
 
130
- See example:
342
+ An example of this is shown below:
131
343
 
132
344
  ```ruby
133
- fulfillment = ShopifyAPI::Fulfillment.new(session: @session)
134
- fulfillment.order_id = 2776493818000
135
- ...
136
- fulfillment.tracking_company = "Jack Black's Pack, Stack and Track"
137
- fulfillment.save()
138
- rescue ShopifyAPI::Errors::HttpResponseError => e
139
- puts fulfillment.errors.full_messages
140
- # {"base"=>["Line items are already fulfilled"]}
141
- # If you report this error, please include this id: e712dde0-1270-4258-8cdb-d198792c917e.
345
+ products = ShopifyAPI::Product.all(session: session, limit: 10)
346
+
347
+ loop do
348
+ some_function(products)
349
+ break unless ShopifyAPI::Product.next_page?
350
+ products = ShopifyAPI::Product.all(session: session, limit: 10, page_info: ShopifyAPI::Product.next_page_info)
351
+ end
142
352
  ```
143
353
 
144
354
  [Back to guide index](../README.md)