The 26th active discount is refused, with a code that names something else
The store began with a few active automatic discounts, some of them an app's. Creates were accepted until 25 were active. The next one came back with no discount and one entry in userErrors.
The code is ACTIVE_PERIOD_OVERLAP, which reads like a scheduling conflict. The message is the part that says what happened. Code that handles this error by its code alone reports the wrong cause.
What was sent, and what Shopify answered
| Step | Answer | Active automatic discounts on the store |
|---|---|---|
| 1. Count the store's active automatic discounts that are an app's | Read | 2 |
| 2. Count all of its active automatic discounts | Read | 4 |
| 3. Create automatic discounts that start now, one at a time, until 25 are active | Accepted | 25 |
| 4. Create one more that starts now | Refused in the mutation's userErrorsACTIVE_PERIOD_OVERLAP “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.” | 25 |
| 5. Create one scheduled to start in three days | Accepted | 25 |
| 6. Deactivate one of the active discounts | Accepted | 24 |
| 7. Create one more that starts now | Accepted | 25 |
| 8. Activate the discount that was deactivated | Refused in the mutation's userErrorsACTIVE_PERIOD_OVERLAP “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.” | 25 |
What that shows
- Every create was accepted until 25 automatic discounts were active. An app's automatic discounts were among the 25: they count toward the limit with Shopify's own.
- The next create was refused in the mutation's userErrors, with the code ACTIVE_PERIOD_OVERLAP and the message “Limit of 25 automatic discounts reached. Deactivate an existing discount to add a new one.” The store still had 25.
- A discount scheduled to start later was accepted while the store was at the limit: only active discounts count.
- Deactivating one left 24 active, and the next create was accepted.
- Activating the deactivated discount was then refused with the same code and message: the limit holds on activation as it does on creation.
Only active discounts count, and activation is checked too
A discount scheduled to start in three days was accepted while the store was at 25. Deactivating a discount made room for a new one.
Turning the deactivated discount back on was then refused with the same error. The run did not wait to see what a scheduled discount does when its start date arrives on a full store.
What this means for a discount app
An app that creates one automatic discount per offer or per campaign spends the merchant's 25, and the merchant finds out when their own sale will not save.
An automatic app discount takes one place however much its function decides. One discount whose function reads the cart can carry every offer the app runs.
How this was verified
Every step on this page was sent to a Shopify Plus development store we keep for this, on API version 2026-10, and Shopify’s answer was recorded as it came back.
The discounts were created through the Admin API with discountAutomaticBasicCreate, turned off and on with discountAutomaticDeactivate and discountAutomaticActivate, and counted by reading the store's automatic discounts after each step.
Each discount the run created was one of Shopify's own percentage discounts on a single product, with a minimum quantity no cart reaches, so none of them priced anything. All of them were deleted when the run ended. The discounts the store had before, an app's among them, were not changed.
A suite sends these steps again. A statement that no longer matches the answer takes this page down until it is corrected, and no record stands for more than 90 days without being taken again. This is what one store answered on one API version: your store’s plan can change the result, so try it on a development store.
Seen something different on your store? Write to privacy@offersuite.io with the request and the answer and we’ll run it.