# PriceRule

Note

We recommend using the GraphQL Admin API to manage discounts. The Discount types available in the GraphQL Admin API are intended to replace the GraphQL Admin PriceRule object and REST Admin PriceRule and DiscountCode resources.

You can use the PriceRule resource to create discounts using conditions. You can then associate the conditions with a discount code by using the DiscountCode resource. Merchants can distribute the discount codes to their customers.

Using the PriceRule resource, you can create discounts that specify a discount as a percentage, a fixed amount, or free shipping. You use entitlements and prerequisites to dynamically build these discounts.

To learn about how to associate a price rule with a discount code, see the DiscountCode resource.

Create a price rule

You can create price rules with entitlements and prerequisites. Entitlements describe the designated resources that a discount applies to, such as specific products, variants, or collections. Prerequisites describe the requirements that must be met in order for the discount to apply to the entitled resources. For example, you might want a discount to apply only to a certain shipping price range, or a certain subtotal range.

You can use entitlements, prereqisites, and other conditions to create discounts, such as the following examples:

For examples of how to create price rules, see the POST method.

## Resource Properties ### PriceRule * allocation_method:

The allocation method of the price rule. Valid values:

When the value of target_type is shipping_line, then this value must be each.

* Type: x-string * Example: "each" * created_at:

The date and time (ISO 8601 format) when the price rule was created.

* Type: x-string * Example: "2017-03-13T16:09:54-04:00" * updated_at:

The date and time (ISO 8601 format) when the price rule was updated.

* Type: x-string * Example: "2017-03-14T16:09:54-04:00" * customer_selection:

The customer selection for the price rule. Valid values:

* Type: x-string * Example: "prerequisite" * ends_at:

The date and time (ISO 8601 format) when the price rule ends. Must be after starts_at.

* Type: x-string * Example: "2017-04-19T17:59:10Z" * entitled_collection_ids:

A list of IDs of collections whose products will be eligible to the discount. It can be used only with target_type set to line_item and target_selection set to entitled. It can't be used in combination with entitled_product_ids or entitled_variant_ids.

* Type: x-string * Example: [4564654869, 8979761006] * entitled_country_ids:

A list of IDs of shipping countries that will be entitled to the discount. It can be used only with target_type set to shipping_line and target_selection set to entitled.

* Type: x-string * Example: {" entitled_country_ids"=>[7897987023, 3569053679]} * entitled_product_ids:

A list of IDs of products that will be entitled to the discount. It can be used only with target_type set to line_item and target_selection set to entitled.

If a product variant is included in entitled_variant_ids, then entitled_product_ids can't include the ID of the product associated with that variant.

* Type: x-string * Example: [7897397755, 42382368242] * entitled_variant_ids:

A list of IDs of product variants that will be entitled to the discount. It can be used only with target_type set to line_item and target_selection set to entitled.

If a product is included in entitled_product_ids, then entitled_variant_ids can't include the ID of any variants associated with that product.

* Type: x-string * Example: [6798798798, 5675765905] * id: The ID for the price rule. * Type: x-string * Example: 9808080986 * once_per_customer:

Whether the generated discount code will be valid only for a single use per customer. This is tracked using customer ID.

* Type: x-string * Example: true * prerequisite_customer_ids:

A list of customer IDs. For the price rule to be applicable, the customer must match one of the specified customers.

If prerequisite_customer_ids is populated, then customer_segment_prerequisite_ids must be empty.

* Type: x-string * Example: [384028349005, 3492039843] * prerequisite_quantity_range:

The minimum number of items for the price rule to be applicable. It has the following property:

* Type: x-string * Example: {"greater_than_or_equal_to"=>2} * customer_segment_prerequisite_ids:

A list of customer segment IDs. For the price rule to be applicable, the customer must be in the group of customers matching a customer segment.

If customer_segment_prerequisite_ids is populated, then prerequisite_customer_ids must be empty.

* Type: x-string * Example: [1122345432, 43535360314] * prerequisite_shipping_price_range:

The maximum shipping price for the price rule to be applicable. It has the following property:

* Type: x-string * Example: {"less_than_or_equal_to"=>"10.0"} * prerequisite_subtotal_range:

The minimum subtotal for the price rule to be applicable. It has the following property:

* Type: x-string * Example: {"greater_than_or_equal_to"=>"40.0"} * prerequisite_to_entitlement_purchase:

The prerequisite purchase for a Buy X Get Y discount. It has the following property:

* Type: x-string * Example: {"prerequisite_amount"=>"80.00"} * starts_at:

The date and time (ISO 8601 format) when the price rule starts. * Type: x-string * Example: "2017-01-19T17:59:10Z" * target_selection:

The target selection method of the price rule. Valid values:

* Type: x-string * Example: "entitled" * target_type:

The target type that the price rule applies to. Valid values:

* Type: x-string * Example: "line_item" * title:

The title of the price rule. This is used by the Shopify admin search to retrieve discounts. It is also displayed on the Discounts page of the Shopify admin for bulk discounts.

For non-bulk discounts, the discount code is displayed on the admin.

For a consistent search experience, use the same value for title as the code property of the associated discount code.

* Type: x-string * Example: "SUMMERSALE10OFF" * usage_limit: The maximum number of times the price rule can be used, per discount code. * Type: x-string * Example: 10 * prerequisite_product_ids:

List of product ids that will be a prerequisites for a Buy X Get Y type discount. The prerequisite_product_ids can be used only with:

Caution

If a product variant is included in prerequisite_variant_ids, then prerequisite_product_ids can't include the ID of the product associated with that variant.

* Type: x-string * Example: [7897397755, 42382368242] * prerequisite_variant_ids:

List of variant ids that will be a prerequisites for a Buy X Get Y type discount. The entitled_variant_ids can be used only with:

Caution

If a product is included in prerequisite_product_ids, then prerequisite_variant_ids can't include the ID of any variants associated with that product.

* Type: x-string * Example: [6798798798, 5675765905] * prerequisite_collection_ids:

List of collection ids that will be a prerequisites for a Buy X Get Y discount. The entitled_collection_ids can be used only with:

Cannot be used in combination with prerequisite_product_ids or prerequisite_variant_ids.

* Type: x-string * Example: [4564654869, 8979761006] * value:

The value of the price rule. If if the value of target_type is shipping_line, then only -100 is accepted. The value must be negative.

* Type: x-string * Example: -35 * value_type:

The value type of the price rule. Valid values:

If target_type is shipping_line, then only percentage is accepted.

* Type: x-string * Example: "fixed_amount" * prerequisite_to_entitlement_quantity_ratio:

Buy/Get ratio for a Buy X Get Y discount. prerequisite_quantity defines the necessary 'buy' quantity and entitled_quantity the offered 'get' quantity.

The prerequisite_to_entitlement_quantity_ratio can be used only with:

Caution

Cannot be used in combination with prerequisite_subtotal_range, prerequisite_quantity_range or prerequisite_shipping_price_range.

* Type: x-string * Example: {"prerequisite_quantity"=>2, "entitled_quantity"=>1} * allocation_limit:

The number of times the discount can be allocated on the cart - if eligible. For example a Buy 1 hat Get 1 hat for free discount can be applied 3 times on a cart having more than 6 hats, where maximum of 3 hats get discounted - if the allocation_limit is 3. Empty (null) allocation_limit means unlimited number of allocations.

Caution

allocation_limit is only working with Buy X Get Y discount. The default value on creation will be null (unlimited).

* Type: x-string * Example: 3 ## Creates a price rule Creates a price rule ### Endpoint /admin/api/#{api_version}/price_rules.json (POST) ### Parameters * api_version (required): ### Responses #### 201 Creates a price rule Examples: ##### Create a Buy X Get Y price rule that gives one free ipod touch if customer buys 2 ipods Request: ``` POST /admin/api/unstable/price_rules.json {"price_rule":{"title":"Buy2iPodsGetiPodTouchForFree","value_type":"percentage","value":"-100.0","customer_selection":"all","target_type":"line_item","target_selection":"entitled","allocation_method":"each","starts_at":"2018-03-22T00:00:00-00:00","prerequisite_collection_ids":[841564295],"entitled_product_ids":[921728736],"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":2,"entitled_quantity":1},"allocation_limit":3}} ``` Response: ``` HTTP/1.1 201 Created {"price_rule":{"id":1057371197,"value_type":"percentage","value":"-100.0","customer_selection":"all","target_type":"line_item","target_selection":"entitled","allocation_method":"each","allocation_limit":3,"once_per_customer":false,"usage_limit":null,"starts_at":"2018-03-21T20:00:00-04:00","ends_at":null,"created_at":"2025-01-02T11:20:21-05:00","updated_at":"2025-01-02T11:20:21-05:00","entitled_product_ids":[921728736],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[841564295],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":2,"entitled_quantity":1},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"Buy2iPodsGetiPodTouchForFree","admin_graphql_api_id":"gid://shopify/PriceRule/1057371197"}} ``` ##### Create a price rule that gives the buyer $10.00 off an order Request: ``` POST /admin/api/unstable/price_rules.json {"price_rule":{"title":"SUMMERSALE10OFF","target_type":"line_item","target_selection":"all","allocation_method":"across","value_type":"fixed_amount","value":"-10.0","customer_selection":"all","starts_at":"2017-01-19T17:59:10Z"}} ``` Response: ``` HTTP/1.1 201 Created {"price_rule":{"id":1057371199,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2017-01-19T12:59:10-05:00","ends_at":null,"created_at":"2025-01-02T11:20:24-05:00","updated_at":"2025-01-02T11:20:24-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"SUMMERSALE10OFF","admin_graphql_api_id":"gid://shopify/PriceRule/1057371199"}} ``` ##### Create a price rule that gives the buyer 15% off a specific collection Request: ``` POST /admin/api/unstable/price_rules.json {"price_rule":{"title":"15OFFCOLLECTION","target_type":"line_item","target_selection":"entitled","allocation_method":"across","value_type":"percentage","value":"-15.0","customer_selection":"all","entitled_collection_ids":[841564295],"starts_at":"2017-01-19T17:59:10Z"}} ``` Response: ``` HTTP/1.1 201 Created {"price_rule":{"id":1057371198,"value_type":"percentage","value":"-15.0","customer_selection":"all","target_type":"line_item","target_selection":"entitled","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2017-01-19T12:59:10-05:00","ends_at":null,"created_at":"2025-01-02T11:20:23-05:00","updated_at":"2025-01-02T11:20:23-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[841564295],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"15OFFCOLLECTION","admin_graphql_api_id":"gid://shopify/PriceRule/1057371198"}} ``` ##### Create a price rule that gives the buyer free shipping on orders over $50.00 that can be used up to 20 times Request: ``` POST /admin/api/unstable/price_rules.json {"price_rule":{"title":"FREESHIPPING","target_type":"shipping_line","target_selection":"all","allocation_method":"each","value_type":"percentage","value":"-100.0","usage_limit":20,"customer_selection":"all","prerequisite_subtotal_range":{"greater_than_or_equal_to":"50.0"},"starts_at":"2017-01-19T17:59:10Z"}} ``` Response: ``` HTTP/1.1 201 Created {"price_rule":{"id":1057371196,"value_type":"percentage","value":"-100.0","customer_selection":"all","target_type":"shipping_line","target_selection":"all","allocation_method":"each","allocation_limit":null,"once_per_customer":false,"usage_limit":20,"starts_at":"2017-01-19T12:59:10-05:00","ends_at":null,"created_at":"2025-01-02T11:20:20-05:00","updated_at":"2025-01-02T11:20:20-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":{"greater_than_or_equal_to":"50.0"},"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"FREESHIPPING","admin_graphql_api_id":"gid://shopify/PriceRule/1057371196"}} ``` #### 422 Creates a price rule Examples: ##### Create a price rule that gives a select group of customers $5 off their order Request: ``` POST /admin/api/unstable/price_rules.json {"price_rule":{"title":"5OFFCUSTOMERGROUP","target_type":"line_item","target_selection":"all","allocation_method":"across","value_type":"fixed_amount","value":"-5.0","customer_selection":"prerequisite","customer_segment_prerequisite_ids":[210588551],"starts_at":"2017-01-19T17:59:10Z"}} ``` Response: ``` HTTP/1.1 422 Unprocessable Entity {"errors":{"customer_segment_prerequisite_ids":["segment with id: 210588551 is invalid"]}} ``` ## Retrieves a list of price rules Retrieves a list of price rules. Note: This endpoint implements pagination by using links that are provided in the response header. To learn more, refer to Make paginated requests to the REST Admin API. ### Endpoint /admin/api/#{api_version}/price_rules.json (GET) ### Parameters * api_version (required): * created_at_max: Show price rules created before date (format 2017-03-25T16:15:47-04:00). * created_at_min: Show price rules created after date (format 2017-03-25T16:15:47-04:00). * ends_at_max: Show price rules ending before date (format 2017-03-25T16:15:47-04:00). * ends_at_min: Show price rules ending after date (format 2017-03-25T16:15:47-04:00). * limit: The maximum number of results to retrieve. * since_id: Restrict results to after the specified ID. * starts_at_max: Show price rules starting before date (format 2017-03-25T16:15:47-04:00). * starts_at_min: Show price rules starting after date (format 2017-03-25T16:15:47-04:00). * times_used: Show price rules with times used. * updated_at_max: Show price rules last updated before date (format 2017-03-25T16:15:47-04:00). * updated_at_min: Show price rules last updated after date (format 2017-03-25T16:15:47-04:00). ### Responses #### 200 Retrieves a list of price rules Examples: ##### Retrieve all price rules Request: ``` GET /admin/api/unstable/price_rules.json ``` Response: ``` HTTP/1.1 200 OK {"price_rules":[{"id":507328175,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2024-12-27T11:09:43-05:00","ends_at":"2025-01-08T11:09:43-05:00","created_at":"2025-01-02T11:09:43-05:00","updated_at":"2025-01-02T11:09:43-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"SUMMERSALE10OFF","admin_graphql_api_id":"gid://shopify/PriceRule/507328175"},{"id":106886544,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2024-12-31T11:09:43-05:00","ends_at":"2025-01-04T11:09:43-05:00","created_at":"2025-01-02T11:09:43-05:00","updated_at":"2025-01-02T11:09:43-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"TENOFF","admin_graphql_api_id":"gid://shopify/PriceRule/106886544"}]} ``` ##### Retrieve all price rules after a specified ID Request: ``` GET /admin/api/unstable/price_rules.json ``` Response: ``` HTTP/1.1 200 OK {"price_rules":[{"id":507328175,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2024-12-27T11:09:43-05:00","ends_at":"2025-01-08T11:09:43-05:00","created_at":"2025-01-02T11:09:43-05:00","updated_at":"2025-01-02T11:09:43-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"SUMMERSALE10OFF","admin_graphql_api_id":"gid://shopify/PriceRule/507328175"}]} ``` ## Updates an existing a price rule Updates an existing a price rule ### Endpoint /admin/api/#{api_version}/price_rules/{price_rule_id}.json (PUT) ### Parameters * api_version (required): * price_rule_id (required): ### Responses #### 200 Updates an existing a price rule Examples: ##### Update the title of a price rule Request: ``` PUT /admin/api/unstable/price_rules/507328175.json {"price_rule":{"id":507328175,"title":"WINTER SALE"}} ``` Response: ``` HTTP/1.1 200 OK {"price_rule":{"id":507328175,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2024-12-27T11:09:43-05:00","ends_at":"2025-01-08T11:09:43-05:00","created_at":"2025-01-02T11:09:43-05:00","updated_at":"2025-01-02T11:20:24-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"WINTER SALE","admin_graphql_api_id":"gid://shopify/PriceRule/507328175"}} ``` ## Retrieves a single price rule Retrieves a single price rule ### Endpoint /admin/api/#{api_version}/price_rules/{price_rule_id}.json (GET) ### Parameters * api_version (required): * price_rule_id (required): ### Responses #### 200 Retrieves a single price rule Examples: ##### Retrieve a single price rule by its ID Request: ``` GET /admin/api/unstable/price_rules/507328175.json ``` Response: ``` HTTP/1.1 200 OK {"price_rule":{"id":507328175,"value_type":"fixed_amount","value":"-10.0","customer_selection":"all","target_type":"line_item","target_selection":"all","allocation_method":"across","allocation_limit":null,"once_per_customer":false,"usage_limit":null,"starts_at":"2024-12-27T11:09:43-05:00","ends_at":"2025-01-08T11:09:43-05:00","created_at":"2025-01-02T11:09:43-05:00","updated_at":"2025-01-02T11:09:43-05:00","entitled_product_ids":[],"entitled_variant_ids":[],"entitled_collection_ids":[],"entitled_country_ids":[],"prerequisite_product_ids":[],"prerequisite_variant_ids":[],"prerequisite_collection_ids":[],"customer_segment_prerequisite_ids":[],"prerequisite_customer_ids":[],"prerequisite_subtotal_range":null,"prerequisite_quantity_range":null,"prerequisite_shipping_price_range":null,"prerequisite_to_entitlement_quantity_ratio":{"prerequisite_quantity":null,"entitled_quantity":null},"prerequisite_to_entitlement_purchase":{"prerequisite_amount":null},"title":"SUMMERSALE10OFF","admin_graphql_api_id":"gid://shopify/PriceRule/507328175"}} ``` ## Remove an existing PriceRule Deletes a price rule ### Endpoint /admin/api/#{api_version}/price_rules/{price_rule_id}.json (DELETE) ### Parameters * api_version (required): * price_rule_id (required): ### Responses #### 204 Remove an existing PriceRule Examples: ##### Delete a price rule Request: ``` DELETE /admin/api/unstable/price_rules/507328175.json ``` Response: ``` HTTP/1.1 204 No Content ``` ## Retrieves a count of all price rules Retrieves a count of all price rules. ### Endpoint /admin/api/#{api_version}/price_rules/count.json (GET) ### Parameters * api_version (required): ### Responses #### 200 Retrieves a count of all price rules Examples: ##### Retrieve a count of all price rules Request: ``` GET /admin/api/unstable/price_rules/count.json ``` Response: ``` HTTP/1.1 200 OK {"count":2} ```