I’m trying to understand the difference between discountCodeAppUpdate and discountAutomaticAppUpdate on the Admin API 2026-07.
When I send recurringCycleLimit: 0 with appliesOnSubscription: true to discountAutomaticAppUpdate, the discount comes back with recurringCycleLimit: 0. When I send the same input to discountCodeAppUpdate, userErrors is empty, but a follow-up discountNode read of the DiscountCodeApp shows:
"appliesOnSubscription": true,
"recurringCycleLimit": null
The docs describe 0 the same way for both:
- DiscountCodeAppInput.recurringCycleLimit — “0 will apply infinitely whereas 1 will only apply to the first checkout.”
- DiscountAutomaticAppInput.recurringCycleLimit
The only difference I can see is on the read side. DiscountAutomaticApp.recurringCycleLimit is Int! and DiscountCodeApp.recurringCycleLimit is nullable Int.
On code discounts, 1–99 are stored as sent. 0, 100, and 999 all come back as null. Saving 100 over a previously stored 12 replaces the 12 with null, without an error.
My questions:
- Why is
0stored asnullon code app discounts, when the same0is kept on automatic app discounts? - Does
nullon aDiscountCodeAppmean “applies indefinitely” at checkout, the same as0? If so, is that documented anywhere? TheDiscountCodeAppdocs only describe0. - Is there an upper limit for code discounts? Values above
99also come back asnull, but I can’t find that in the docs.
Best,
Pius