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.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -1
- data/.github/workflows/build.yml +4 -1
- data/.rubocop.yml +2 -0
- data/BREAKING_CHANGES_FOR_V10.md +231 -0
- data/CHANGELOG.md +38 -1
- data/CODE_OF_CONDUCT.md +46 -0
- data/CONTRIBUTING.md +25 -0
- data/Gemfile.lock +56 -54
- data/README.md +10 -41
- data/ROADMAP.md +10 -0
- data/dev.yml +3 -2
- data/docs/README.md +0 -1
- data/docs/getting_started.md +21 -11
- data/docs/usage/custom_apps.md +75 -0
- data/docs/usage/graphql.md +91 -17
- data/docs/usage/oauth.md +160 -27
- data/docs/usage/rest.md +269 -59
- data/docs/usage/webhooks.md +54 -11
- data/lib/shopify_api/admin_versions.rb +4 -1
- data/lib/shopify_api/auth/jwt_payload.rb +2 -2
- data/lib/shopify_api/auth/oauth/access_token_response.rb +37 -0
- data/lib/shopify_api/auth/oauth.rb +17 -38
- data/lib/shopify_api/auth/session.rb +31 -0
- data/lib/shopify_api/auth/token_exchange.rb +80 -0
- data/lib/shopify_api/clients/graphql/client.rb +1 -0
- data/lib/shopify_api/clients/http_client.rb +12 -3
- data/lib/shopify_api/clients/http_response.rb +29 -2
- data/lib/shopify_api/context.rb +19 -5
- data/lib/shopify_api/logger.rb +1 -1
- data/lib/shopify_api/rest/base.rb +112 -29
- data/lib/shopify_api/rest/resources/2022_04/abandoned_checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/access_scope.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/android_pay_key.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/apple_pay_certificate.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/application_credit.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/article.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/asset.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/assigned_fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_04/balance.rb +6 -3
- data/lib/shopify_api/rest/resources/2022_04/blog.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/cancellation_request.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/carrier_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/collect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/collection_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/comment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/country.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/currency.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/custom_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/customer.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/customer_address.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_04/customer_saved_search.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/deprecated_api_call.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/discount_code.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/dispute.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/draft_order.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/fulfillment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/fulfillment_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/fulfillment_order.rb +10 -10
- data/lib/shopify_api/rest/resources/2022_04/fulfillment_request.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_04/fulfillment_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/gift_card.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/gift_card_adjustment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/image.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/inventory_item.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/inventory_level.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/location.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/locations_for_move.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/marketing_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/metafield.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/mobile_platform_application.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/order.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/order_risk.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_04/page.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/payment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/payment_gateway.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/payment_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/payout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/policy.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/price_rule.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/product.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/product_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/product_resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/province.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/recurring_application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/redirect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/refund.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/report.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/script_tag.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/shipping_zone.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/shop.rb +9 -5
- data/lib/shopify_api/rest/resources/2022_04/smart_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/storefront_access_token.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/tender_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/theme.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/usage_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/user.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/variant.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_04/webhook.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/abandoned_checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/access_scope.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/android_pay_key.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/apple_pay_certificate.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/application_credit.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/article.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/asset.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/assigned_fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_07/balance.rb +11 -3
- data/lib/shopify_api/rest/resources/2022_07/blog.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/cancellation_request.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/carrier_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/collect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/collection_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/comment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/country.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/currency.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/custom_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/customer.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/customer_address.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_07/deprecated_api_call.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/discount_code.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/dispute.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/dispute_evidence.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/dispute_file_upload.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/draft_order.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/fulfillment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/fulfillment_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/fulfillment_order.rb +10 -10
- data/lib/shopify_api/rest/resources/2022_07/fulfillment_request.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_07/fulfillment_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/gift_card.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/gift_card_adjustment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/image.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/inventory_item.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/inventory_level.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/location.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/locations_for_move.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/marketing_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/metafield.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/mobile_platform_application.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/order.rb +10 -3
- data/lib/shopify_api/rest/resources/2022_07/order_risk.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_07/page.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/payment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/payment_gateway.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/payment_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/payout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/policy.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/price_rule.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/product.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/product_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/product_resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/province.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/recurring_application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/redirect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/refund.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/report.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/script_tag.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/shipping_zone.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/shop.rb +9 -5
- data/lib/shopify_api/rest/resources/2022_07/smart_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/storefront_access_token.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/tender_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/theme.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/usage_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/user.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/variant.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_07/webhook.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/abandoned_checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/access_scope.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/android_pay_key.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/apple_pay_certificate.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/application_credit.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/article.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/asset.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/assigned_fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_10/balance.rb +11 -3
- data/lib/shopify_api/rest/resources/2022_10/blog.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/cancellation_request.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/carrier_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/collect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/collection_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/comment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/country.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/currency.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/custom_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/customer.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/customer_address.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_10/deprecated_api_call.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/discount_code.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/dispute.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/dispute_evidence.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/dispute_file_upload.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/draft_order.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/fulfillment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/fulfillment_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/fulfillment_order.rb +10 -10
- data/lib/shopify_api/rest/resources/2022_10/fulfillment_request.rb +17 -3
- data/lib/shopify_api/rest/resources/2022_10/fulfillment_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/gift_card.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/gift_card_adjustment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/image.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/inventory_item.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/inventory_level.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/location.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/locations_for_move.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/marketing_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/metafield.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/mobile_platform_application.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/order.rb +10 -3
- data/lib/shopify_api/rest/resources/2022_10/order_risk.rb +12 -6
- data/lib/shopify_api/rest/resources/2022_10/page.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/payment.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/payment_gateway.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/payment_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/payout.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/policy.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/price_rule.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/product.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/product_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/product_resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/province.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/recurring_application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/redirect.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/refund.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/report.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/script_tag.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/shipping_zone.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/shop.rb +9 -8
- data/lib/shopify_api/rest/resources/2022_10/smart_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/storefront_access_token.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/tender_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/theme.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/usage_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/user.rb +7 -3
- data/lib/shopify_api/rest/resources/2022_10/variant.rb +8 -8
- data/lib/shopify_api/rest/resources/2022_10/webhook.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/abandoned_checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/access_scope.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/apple_pay_certificate.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/application_credit.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/article.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/asset.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/assigned_fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2023_01/balance.rb +11 -3
- data/lib/shopify_api/rest/resources/2023_01/blog.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/cancellation_request.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/carrier_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/collect.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/collection_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/comment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/country.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/currency.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/custom_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/customer.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/customer_address.rb +17 -3
- data/lib/shopify_api/rest/resources/2023_01/customer_saved_search.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/deprecated_api_call.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/discount_code.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/dispute.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/dispute_evidence.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/dispute_file_upload.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/draft_order.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/fulfillment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/fulfillment_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/fulfillment_order.rb +15 -13
- data/lib/shopify_api/rest/resources/2023_01/fulfillment_request.rb +17 -3
- data/lib/shopify_api/rest/resources/2023_01/fulfillment_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/gift_card.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/gift_card_adjustment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/image.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/inventory_item.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/inventory_level.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/location.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/locations_for_move.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/marketing_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/metafield.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/mobile_platform_application.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/order.rb +10 -3
- data/lib/shopify_api/rest/resources/2023_01/order_risk.rb +12 -6
- data/lib/shopify_api/rest/resources/2023_01/page.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/payment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/payment_gateway.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/payment_transaction.rb +12 -5
- data/lib/shopify_api/rest/resources/2023_01/payout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/policy.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/price_rule.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/product.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/product_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/product_resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/province.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/recurring_application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/redirect.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/refund.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/report.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/script_tag.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/shipping_zone.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/shop.rb +9 -8
- data/lib/shopify_api/rest/resources/2023_01/smart_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/storefront_access_token.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/tender_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/theme.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/usage_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/user.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_01/variant.rb +8 -8
- data/lib/shopify_api/rest/resources/2023_01/webhook.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/abandoned_checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/access_scope.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/apple_pay_certificate.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/application_credit.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/article.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/asset.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/assigned_fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2023_04/balance.rb +11 -3
- data/lib/shopify_api/rest/resources/2023_04/blog.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/cancellation_request.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/carrier_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/checkout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/collect.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/collection_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/comment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/country.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/currency.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/custom_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/customer.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/customer_address.rb +17 -3
- data/lib/shopify_api/rest/resources/2023_04/customer_saved_search.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/deprecated_api_call.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/discount_code.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/dispute.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/dispute_evidence.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/dispute_file_upload.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/draft_order.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/fulfillment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/fulfillment_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/fulfillment_order.rb +12 -6
- data/lib/shopify_api/rest/resources/2023_04/fulfillment_request.rb +17 -3
- data/lib/shopify_api/rest/resources/2023_04/fulfillment_service.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/gift_card.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/gift_card_adjustment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/image.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/inventory_item.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/inventory_level.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/location.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/locations_for_move.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/marketing_event.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/metafield.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/mobile_platform_application.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/order.rb +10 -9
- data/lib/shopify_api/rest/resources/2023_04/order_risk.rb +12 -6
- data/lib/shopify_api/rest/resources/2023_04/page.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/payment.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/payment_gateway.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/payment_transaction.rb +12 -5
- data/lib/shopify_api/rest/resources/2023_04/payout.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/policy.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/price_rule.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/product.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/product_listing.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/product_resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/province.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/recurring_application_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/redirect.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/refund.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/report.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/resource_feedback.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/script_tag.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/shipping_zone.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/shop.rb +9 -8
- data/lib/shopify_api/rest/resources/2023_04/smart_collection.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/storefront_access_token.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/tender_transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/theme.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/transaction.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/usage_charge.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/user.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_04/variant.rb +8 -8
- data/lib/shopify_api/rest/resources/2023_04/webhook.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_07/abandoned_checkout.rb +194 -0
- data/lib/shopify_api/rest/resources/2023_07/access_scope.rb +62 -0
- data/lib/shopify_api/rest/resources/2023_07/apple_pay_certificate.rb +109 -0
- data/lib/shopify_api/rest/resources/2023_07/application_charge.rb +113 -0
- data/lib/shopify_api/rest/resources/2023_07/application_credit.rb +95 -0
- data/lib/shopify_api/rest/resources/2023_07/article.rb +269 -0
- data/lib/shopify_api/rest/resources/2023_07/asset.rb +122 -0
- data/lib/shopify_api/rest/resources/2023_07/assigned_fulfillment_order.rb +92 -0
- data/lib/shopify_api/rest/resources/2023_07/balance.rb +58 -0
- data/lib/shopify_api/rest/resources/2023_07/blog.rb +166 -0
- data/lib/shopify_api/rest/resources/2023_07/cancellation_request.rb +87 -0
- data/lib/shopify_api/rest/resources/2023_07/carrier_service.rb +120 -0
- data/lib/shopify_api/rest/resources/2023_07/checkout.rb +213 -0
- data/lib/shopify_api/rest/resources/{2022_07/customer_saved_search.rb → 2023_07/collect.rb} +29 -52
- data/lib/shopify_api/rest/resources/2023_07/collection.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_07/collection_listing.rb +159 -0
- data/lib/shopify_api/rest/resources/2023_07/comment.rb +287 -0
- data/lib/shopify_api/rest/resources/2023_07/country.rb +141 -0
- data/lib/shopify_api/rest/resources/2023_07/currency.rb +61 -0
- data/lib/shopify_api/rest/resources/2023_07/custom_collection.rb +191 -0
- data/lib/shopify_api/rest/resources/2023_07/customer.rb +333 -0
- data/lib/shopify_api/rest/resources/2023_07/customer_address.rb +215 -0
- data/lib/shopify_api/rest/resources/{2022_10 → 2023_07}/customer_saved_search.rb +7 -3
- data/lib/shopify_api/rest/resources/2023_07/deprecated_api_call.rb +61 -0
- data/lib/shopify_api/rest/resources/2023_07/discount_code.rb +226 -0
- data/lib/shopify_api/rest/resources/2023_07/dispute.rb +115 -0
- data/lib/shopify_api/rest/resources/2023_07/dispute_evidence.rb +121 -0
- data/lib/shopify_api/rest/resources/2023_07/dispute_file_upload.rb +85 -0
- data/lib/shopify_api/rest/resources/2023_07/draft_order.rb +279 -0
- data/lib/shopify_api/rest/resources/2023_07/event.rb +152 -0
- data/lib/shopify_api/rest/resources/2023_07/fulfillment.rb +235 -0
- data/lib/shopify_api/rest/resources/2023_07/fulfillment_event.rb +170 -0
- data/lib/shopify_api/rest/resources/2023_07/fulfillment_order.rb +318 -0
- data/lib/shopify_api/rest/resources/2023_07/fulfillment_request.rb +101 -0
- data/lib/shopify_api/rest/resources/2023_07/fulfillment_service.rb +134 -0
- data/lib/shopify_api/rest/resources/2023_07/gift_card.rb +222 -0
- data/lib/shopify_api/rest/resources/2023_07/gift_card_adjustment.rb +122 -0
- data/lib/shopify_api/rest/resources/2023_07/image.rb +161 -0
- data/lib/shopify_api/rest/resources/2023_07/inventory_item.rb +112 -0
- data/lib/shopify_api/rest/resources/2023_07/inventory_level.rb +183 -0
- data/lib/shopify_api/rest/resources/2023_07/location.rb +171 -0
- data/lib/shopify_api/rest/resources/2023_07/locations_for_move.rb +60 -0
- data/lib/shopify_api/rest/resources/2023_07/marketing_event.rb +213 -0
- data/lib/shopify_api/rest/resources/2023_07/metafield.rb +348 -0
- data/lib/shopify_api/rest/resources/2023_07/mobile_platform_application.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_07/order.rb +489 -0
- data/lib/shopify_api/rest/resources/2023_07/order_risk.rb +148 -0
- data/lib/shopify_api/rest/resources/2023_07/page.rb +198 -0
- data/lib/shopify_api/rest/resources/2023_07/payment.rb +144 -0
- data/lib/shopify_api/rest/resources/2023_07/payment_gateway.rb +147 -0
- data/lib/shopify_api/rest/resources/2023_07/payment_transaction.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_07/payout.rb +101 -0
- data/lib/shopify_api/rest/resources/2023_07/policy.rb +73 -0
- data/lib/shopify_api/rest/resources/2023_07/price_rule.rb +227 -0
- data/lib/shopify_api/rest/resources/2023_07/product.rb +227 -0
- data/lib/shopify_api/rest/resources/2023_07/product_listing.rb +200 -0
- data/lib/shopify_api/rest/resources/2023_07/product_resource_feedback.rb +92 -0
- data/lib/shopify_api/rest/resources/2023_07/province.rb +136 -0
- data/lib/shopify_api/rest/resources/2023_07/recurring_application_charge.rb +176 -0
- data/lib/shopify_api/rest/resources/2023_07/redirect.rb +143 -0
- data/lib/shopify_api/rest/resources/2023_07/refund.rb +155 -0
- data/lib/shopify_api/rest/resources/2023_07/report.rb +125 -0
- data/lib/shopify_api/rest/resources/2023_07/resource_feedback.rb +77 -0
- data/lib/shopify_api/rest/resources/2023_07/script_tag.rb +159 -0
- data/lib/shopify_api/rest/resources/2023_07/shipping_zone.rb +87 -0
- data/lib/shopify_api/rest/resources/2023_07/shop.rb +222 -0
- data/lib/shopify_api/rest/resources/2023_07/smart_collection.rb +220 -0
- data/lib/shopify_api/rest/resources/2023_07/storefront_access_token.rb +91 -0
- data/lib/shopify_api/rest/resources/2023_07/tender_transaction.rb +97 -0
- data/lib/shopify_api/rest/resources/2023_07/theme.rb +127 -0
- data/lib/shopify_api/rest/resources/2023_07/transaction.rb +188 -0
- data/lib/shopify_api/rest/resources/2023_07/usage_charge.rb +106 -0
- data/lib/shopify_api/rest/resources/2023_07/user.rb +142 -0
- data/lib/shopify_api/rest/resources/2023_07/variant.rb +212 -0
- data/lib/shopify_api/rest/resources/2023_07/webhook.rb +172 -0
- data/lib/shopify_api/rest/resources/2023_10/abandoned_checkout.rb +194 -0
- data/lib/shopify_api/rest/resources/2023_10/access_scope.rb +62 -0
- data/lib/shopify_api/rest/resources/2023_10/apple_pay_certificate.rb +109 -0
- data/lib/shopify_api/rest/resources/2023_10/application_charge.rb +113 -0
- data/lib/shopify_api/rest/resources/2023_10/application_credit.rb +95 -0
- data/lib/shopify_api/rest/resources/2023_10/article.rb +269 -0
- data/lib/shopify_api/rest/resources/2023_10/asset.rb +122 -0
- data/lib/shopify_api/rest/resources/2023_10/assigned_fulfillment_order.rb +92 -0
- data/lib/shopify_api/rest/resources/2023_10/balance.rb +58 -0
- data/lib/shopify_api/rest/resources/2023_10/blog.rb +166 -0
- data/lib/shopify_api/rest/resources/2023_10/cancellation_request.rb +87 -0
- data/lib/shopify_api/rest/resources/2023_10/carrier_service.rb +120 -0
- data/lib/shopify_api/rest/resources/2023_10/checkout.rb +213 -0
- data/lib/shopify_api/rest/resources/2023_10/collect.rb +146 -0
- data/lib/shopify_api/rest/resources/2023_10/collection.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_10/collection_listing.rb +159 -0
- data/lib/shopify_api/rest/resources/2023_10/comment.rb +287 -0
- data/lib/shopify_api/rest/resources/2023_10/country.rb +141 -0
- data/lib/shopify_api/rest/resources/2023_10/currency.rb +61 -0
- data/lib/shopify_api/rest/resources/2023_10/custom_collection.rb +191 -0
- data/lib/shopify_api/rest/resources/2023_10/customer.rb +333 -0
- data/lib/shopify_api/rest/resources/2023_10/customer_address.rb +215 -0
- data/lib/shopify_api/rest/resources/2023_10/deprecated_api_call.rb +61 -0
- data/lib/shopify_api/rest/resources/2023_10/discount_code.rb +226 -0
- data/lib/shopify_api/rest/resources/2023_10/dispute.rb +115 -0
- data/lib/shopify_api/rest/resources/2023_10/dispute_evidence.rb +121 -0
- data/lib/shopify_api/rest/resources/2023_10/dispute_file_upload.rb +85 -0
- data/lib/shopify_api/rest/resources/2023_10/draft_order.rb +279 -0
- data/lib/shopify_api/rest/resources/2023_10/event.rb +152 -0
- data/lib/shopify_api/rest/resources/2023_10/fulfillment.rb +235 -0
- data/lib/shopify_api/rest/resources/2023_10/fulfillment_event.rb +170 -0
- data/lib/shopify_api/rest/resources/2023_10/fulfillment_order.rb +318 -0
- data/lib/shopify_api/rest/resources/2023_10/fulfillment_request.rb +101 -0
- data/lib/shopify_api/rest/resources/2023_10/fulfillment_service.rb +134 -0
- data/lib/shopify_api/rest/resources/2023_10/gift_card.rb +222 -0
- data/lib/shopify_api/rest/resources/2023_10/gift_card_adjustment.rb +122 -0
- data/lib/shopify_api/rest/resources/2023_10/image.rb +161 -0
- data/lib/shopify_api/rest/resources/2023_10/inventory_item.rb +112 -0
- data/lib/shopify_api/rest/resources/2023_10/inventory_level.rb +183 -0
- data/lib/shopify_api/rest/resources/2023_10/location.rb +171 -0
- data/lib/shopify_api/rest/resources/2023_10/locations_for_move.rb +60 -0
- data/lib/shopify_api/rest/resources/2023_10/marketing_event.rb +213 -0
- data/lib/shopify_api/rest/resources/2023_10/metafield.rb +348 -0
- data/lib/shopify_api/rest/resources/2023_10/mobile_platform_application.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_10/order.rb +489 -0
- data/lib/shopify_api/rest/resources/2023_10/order_risk.rb +148 -0
- data/lib/shopify_api/rest/resources/2023_10/page.rb +198 -0
- data/lib/shopify_api/rest/resources/2023_10/payment.rb +144 -0
- data/lib/shopify_api/rest/resources/2023_10/payment_gateway.rb +147 -0
- data/lib/shopify_api/rest/resources/2023_10/payment_transaction.rb +114 -0
- data/lib/shopify_api/rest/resources/2023_10/payout.rb +101 -0
- data/lib/shopify_api/rest/resources/2023_10/policy.rb +73 -0
- data/lib/shopify_api/rest/resources/2023_10/price_rule.rb +227 -0
- data/lib/shopify_api/rest/resources/2023_10/product.rb +227 -0
- data/lib/shopify_api/rest/resources/2023_10/product_listing.rb +200 -0
- data/lib/shopify_api/rest/resources/2023_10/product_resource_feedback.rb +92 -0
- data/lib/shopify_api/rest/resources/2023_10/province.rb +136 -0
- data/lib/shopify_api/rest/resources/2023_10/recurring_application_charge.rb +176 -0
- data/lib/shopify_api/rest/resources/2023_10/redirect.rb +143 -0
- data/lib/shopify_api/rest/resources/2023_10/refund.rb +155 -0
- data/lib/shopify_api/rest/resources/2023_10/report.rb +125 -0
- data/lib/shopify_api/rest/resources/2023_10/resource_feedback.rb +77 -0
- data/lib/shopify_api/rest/resources/2023_10/script_tag.rb +159 -0
- data/lib/shopify_api/rest/resources/2023_10/shipping_zone.rb +87 -0
- data/lib/shopify_api/rest/resources/2023_10/shop.rb +222 -0
- data/lib/shopify_api/rest/resources/2023_10/smart_collection.rb +220 -0
- data/lib/shopify_api/rest/resources/2023_10/storefront_access_token.rb +91 -0
- data/lib/shopify_api/rest/resources/2023_10/tender_transaction.rb +97 -0
- data/lib/shopify_api/rest/resources/2023_10/theme.rb +127 -0
- data/lib/shopify_api/rest/resources/2023_10/transaction.rb +188 -0
- data/lib/shopify_api/rest/resources/2023_10/usage_charge.rb +106 -0
- data/lib/shopify_api/rest/resources/2023_10/user.rb +142 -0
- data/lib/shopify_api/rest/resources/2023_10/variant.rb +212 -0
- data/lib/shopify_api/rest/resources/2023_10/webhook.rb +172 -0
- data/lib/shopify_api/rest/resources/2024_01/abandoned_checkout.rb +194 -0
- data/lib/shopify_api/rest/resources/2024_01/access_scope.rb +62 -0
- data/lib/shopify_api/rest/resources/2024_01/apple_pay_certificate.rb +109 -0
- data/lib/shopify_api/rest/resources/2024_01/application_charge.rb +113 -0
- data/lib/shopify_api/rest/resources/2024_01/application_credit.rb +95 -0
- data/lib/shopify_api/rest/resources/2024_01/article.rb +269 -0
- data/lib/shopify_api/rest/resources/2024_01/asset.rb +122 -0
- data/lib/shopify_api/rest/resources/2024_01/assigned_fulfillment_order.rb +92 -0
- data/lib/shopify_api/rest/resources/2024_01/balance.rb +58 -0
- data/lib/shopify_api/rest/resources/2024_01/blog.rb +166 -0
- data/lib/shopify_api/rest/resources/2024_01/cancellation_request.rb +87 -0
- data/lib/shopify_api/rest/resources/2024_01/carrier_service.rb +120 -0
- data/lib/shopify_api/rest/resources/2024_01/checkout.rb +213 -0
- data/lib/shopify_api/rest/resources/2024_01/collect.rb +146 -0
- data/lib/shopify_api/rest/resources/2024_01/collection.rb +114 -0
- data/lib/shopify_api/rest/resources/2024_01/collection_listing.rb +159 -0
- data/lib/shopify_api/rest/resources/2024_01/comment.rb +287 -0
- data/lib/shopify_api/rest/resources/2024_01/country.rb +141 -0
- data/lib/shopify_api/rest/resources/2024_01/currency.rb +61 -0
- data/lib/shopify_api/rest/resources/2024_01/custom_collection.rb +191 -0
- data/lib/shopify_api/rest/resources/2024_01/customer.rb +333 -0
- data/lib/shopify_api/rest/resources/2024_01/customer_address.rb +215 -0
- data/lib/shopify_api/rest/resources/2024_01/deprecated_api_call.rb +61 -0
- data/lib/shopify_api/rest/resources/2024_01/discount_code.rb +226 -0
- data/lib/shopify_api/rest/resources/2024_01/dispute.rb +115 -0
- data/lib/shopify_api/rest/resources/2024_01/dispute_evidence.rb +121 -0
- data/lib/shopify_api/rest/resources/2024_01/dispute_file_upload.rb +85 -0
- data/lib/shopify_api/rest/resources/2024_01/draft_order.rb +279 -0
- data/lib/shopify_api/rest/resources/2024_01/event.rb +152 -0
- data/lib/shopify_api/rest/resources/2024_01/fulfillment.rb +235 -0
- data/lib/shopify_api/rest/resources/2024_01/fulfillment_event.rb +170 -0
- data/lib/shopify_api/rest/resources/2024_01/fulfillment_order.rb +326 -0
- data/lib/shopify_api/rest/resources/2024_01/fulfillment_request.rb +101 -0
- data/lib/shopify_api/rest/resources/2024_01/fulfillment_service.rb +134 -0
- data/lib/shopify_api/rest/resources/2024_01/gift_card.rb +222 -0
- data/lib/shopify_api/rest/resources/2024_01/gift_card_adjustment.rb +122 -0
- data/lib/shopify_api/rest/resources/2024_01/image.rb +161 -0
- data/lib/shopify_api/rest/resources/2024_01/inventory_item.rb +112 -0
- data/lib/shopify_api/rest/resources/2024_01/inventory_level.rb +183 -0
- data/lib/shopify_api/rest/resources/2024_01/location.rb +171 -0
- data/lib/shopify_api/rest/resources/2024_01/locations_for_move.rb +60 -0
- data/lib/shopify_api/rest/resources/2024_01/marketing_event.rb +213 -0
- data/lib/shopify_api/rest/resources/2024_01/metafield.rb +348 -0
- data/lib/shopify_api/rest/resources/2024_01/mobile_platform_application.rb +114 -0
- data/lib/shopify_api/rest/resources/2024_01/order.rb +489 -0
- data/lib/shopify_api/rest/resources/2024_01/order_risk.rb +148 -0
- data/lib/shopify_api/rest/resources/2024_01/page.rb +198 -0
- data/lib/shopify_api/rest/resources/2024_01/payment.rb +144 -0
- data/lib/shopify_api/rest/resources/2024_01/payment_gateway.rb +147 -0
- data/lib/shopify_api/rest/resources/2024_01/payment_transaction.rb +114 -0
- data/lib/shopify_api/rest/resources/2024_01/payout.rb +101 -0
- data/lib/shopify_api/rest/resources/2024_01/policy.rb +73 -0
- data/lib/shopify_api/rest/resources/2024_01/price_rule.rb +227 -0
- data/lib/shopify_api/rest/resources/2024_01/product.rb +227 -0
- data/lib/shopify_api/rest/resources/2024_01/product_listing.rb +200 -0
- data/lib/shopify_api/rest/resources/2024_01/product_resource_feedback.rb +92 -0
- data/lib/shopify_api/rest/resources/2024_01/province.rb +136 -0
- data/lib/shopify_api/rest/resources/2024_01/recurring_application_charge.rb +176 -0
- data/lib/shopify_api/rest/resources/2024_01/redirect.rb +143 -0
- data/lib/shopify_api/rest/resources/2024_01/refund.rb +155 -0
- data/lib/shopify_api/rest/resources/2024_01/report.rb +125 -0
- data/lib/shopify_api/rest/resources/2024_01/resource_feedback.rb +77 -0
- data/lib/shopify_api/rest/resources/2024_01/script_tag.rb +159 -0
- data/lib/shopify_api/rest/resources/2024_01/shipping_zone.rb +87 -0
- data/lib/shopify_api/rest/resources/2024_01/shop.rb +222 -0
- data/lib/shopify_api/rest/resources/2024_01/smart_collection.rb +220 -0
- data/lib/shopify_api/rest/resources/2024_01/storefront_access_token.rb +91 -0
- data/lib/shopify_api/rest/resources/2024_01/tender_transaction.rb +97 -0
- data/lib/shopify_api/rest/resources/2024_01/theme.rb +127 -0
- data/lib/shopify_api/rest/resources/2024_01/transaction.rb +188 -0
- data/lib/shopify_api/rest/resources/2024_01/usage_charge.rb +106 -0
- data/lib/shopify_api/rest/resources/2024_01/user.rb +142 -0
- data/lib/shopify_api/rest/resources/2024_01/variant.rb +212 -0
- data/lib/shopify_api/rest/resources/2024_01/webhook.rb +172 -0
- data/lib/shopify_api/utils/attributes_comparator.rb +85 -0
- data/lib/shopify_api/utils/hmac_validator.rb +2 -2
- data/lib/shopify_api/version.rb +1 -1
- data/lib/shopify_api/webhooks/handler.rb +24 -1
- data/lib/shopify_api/webhooks/registration.rb +21 -6
- data/lib/shopify_api/webhooks/registrations/event_bridge.rb +1 -1
- data/lib/shopify_api/webhooks/registrations/http.rb +1 -1
- data/lib/shopify_api/webhooks/registrations/pub_sub.rb +2 -1
- data/lib/shopify_api/webhooks/registry.rb +49 -7
- data/lib/shopify_api/webhooks/request.rb +10 -0
- data/shopify_api.gemspec +2 -3
- metadata +234 -29
- data/.github/workflows/stale.yml +0 -43
- data/docs/issues.md +0 -39
- 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
|
-
##
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
84
|
-
|
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
|
-
|
201
|
+
# 4. Use the response for your app
|
202
|
+
...
|
203
|
+
end
|
204
|
+
```
|
91
205
|
|
92
|
-
|
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
|
-
|
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
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
229
|
+
# 2. Use API client to make queries
|
230
|
+
...
|
231
|
+
end
|
232
|
+
|
233
|
+
```
|
103
234
|
|
104
|
-
|
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
|
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
|
-
|
193
|
+
### Methods
|
6
194
|
|
7
|
-
The Rest
|
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
|
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
|
-
|
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
|
-
|
231
|
+
See example:
|
22
232
|
|
23
233
|
```ruby
|
24
|
-
|
25
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
284
|
+
#### Perform a `PUT` request
|
285
|
+
```ruby
|
286
|
+
# Create a new client.
|
287
|
+
client = ShopifyAPI::Clients::Rest::Admin.new
|
66
288
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
289
|
+
# Update product title
|
290
|
+
body = {
|
291
|
+
product: {
|
292
|
+
title: "My cool product"
|
293
|
+
}
|
294
|
+
}
|
71
295
|
|
72
|
-
|
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
|
-
|
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
|
-
|
303
|
+
#### Accessing Rate Limit information
|
77
304
|
|
78
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
314
|
+
retry_after = ShopifyAPI::Product.retry_request_after
|
96
315
|
|
97
|
-
```
|
98
|
-
session = ShopifyAPI::Utils::SessionUtils.load_current_session(headers, cookies, is_online)
|
316
|
+
```
|
99
317
|
|
100
|
-
|
318
|
+
### Pagination
|
101
319
|
|
102
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
342
|
+
An example of this is shown below:
|
131
343
|
|
132
344
|
```ruby
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
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)
|