26 January 2026
Pricing and DiscountsOrdersGraphQL
You can now control whether Cart Discounts apply to recurring or non-recurring Orders using the new
recurringOrderScope field on CartDiscount. This enables you to create targeted promotions for subscription-based commerce while preventing unintended discount application to recurring orders.
This feature is available in public beta.All existing Cart Discounts in your Project will apply to non-recurring Orders (
recurringOrderScope=NonRecurringOrdersOnly), as the default.Changes:
- [API] Updated the Cart Discounts API with the following:
- Added the
recurringOrderScopefield to CartDiscount and CartDiscountDraft types. - Added the CartDiscountSetRecurringOrderScopeAction update action.
- Added the
- [API] Updated the Recurring Orders API with the following:
- [GraphQL API] Added the following types to the GraphQL schema:
AnyOrderInput,ApplicableRecurrencePoliciesInput,NonRecurringOrdersOnlyInput,RecurringOrderScopeInput,RecurringOrdersOnlyInput,SetCartDiscountRecurringOrderScope. - [GraphQL API] Added the
setRecurringOrderScopeinput field toCartDiscountUpdateActiontype. - [GraphQL API] Added the
recurringOrderScopefield toCartDiscounttype. - [GraphQL API] Added the
recurringOrderScopeinput field toCartDiscountDrafttype.
The following changes were introduced in terms of GraphQL SDL:
extend input CartDiscountUpdateAction {
setRecurringOrderScope: SetCartDiscountRecurringOrderScope
}
extend type CartDiscount {
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
recurringOrderScope: RecurringOrderScope!
}
extend input CartDiscountDraft {
recurringOrderScope: RecurringOrderScopeInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type AnyOrder implements RecurringOrderScope {
type: RecurringOrderScopeType!
}
input AnyOrderInput {
dummy: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type ApplicableRecurrencePolicies implements RecurringOrderScope {
recurrencePolicies: [RecurrencePolicy!]!
type: RecurringOrderScopeType!
recurrencePoliciesRef: [Reference!]!
}
input ApplicableRecurrencePoliciesInput {
recurrencePolicies: [ResourceIdentifierInput!]!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type NonRecurringOrdersOnly implements RecurringOrderScope {
type: RecurringOrderScopeType!
}
input NonRecurringOrdersOnlyInput {
dummy: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
interface RecurringOrderScope {
type: RecurringOrderScopeType!
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurringOrdersOnly implements RecurringOrderScope {
type: RecurringOrderScopeType!
}
input RecurringOrdersOnlyInput {
dummy: String
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
enum RecurringOrderScopeType {
AnyOrder
NonRecurringOrdersOnly
RecurringOrdersOnly
ApplicableRecurrencePolicies
}
input RecurringOrderScopeInput {
AnyOrder: AnyOrderInput
RecurringOrdersOnly: RecurringOrdersOnlyInput
NonRecurringOrdersOnly: NonRecurringOrdersOnlyInput
ApplicableRecurrencePolicies: ApplicableRecurrencePoliciesInput
}
"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetCartDiscountRecurringOrderScope {
recurringOrderScope: RecurringOrderScopeInput!
}