26 January 2026
Composable Commerce
HTTP API
Enhancement
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:

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!
}