8 July 2025
Composable Commerce
HTTP API
Announcement
OrdersSecurity and privacyMessages/SubscriptionsLimits
You can now enable automated repeat purchases with the new Recurring Orders feature. This allows customers to schedule reorders for individual items at intervals such as daily, weekly, or monthly, while Merchants can set custom prices for each interval. Recurring Orders can be paused, skipped, modified, and canceled at any time to adapt to changing customer needs.

In addition, Customers can combine one-time purchases and subscription items in a single checkout, creating a seamless and flexible shopping experience. This feature aims to reduce manual workload for Merchants while building customer loyalty through convenience and consistency.

This feature is in public beta.
For more information, see the Recurring Orders overview.

Changes:

  • [API] Added the Recurring Orders API and Recurrence Policies API.
  • [API] Added view_recurring_orders:{projectKey} and manage_recurring_orders:{projectKey} OAuth scopes.
  • [API] Added Recurring Orders Messages.
  • [API] Added the following to the Order Messages: OrderCreatedFromRecurringOrder.
  • [API] Added priceRecurrencePolicy price selection parameter.
  • [API] Added recurrencePolicy field to the Price and PriceDraft types.
  • [API] Added recurrence-policy and recurring-order enums to the ReferenceTypeId type.
  • [API] Updated the following in the Carts API:
  • [API] Updated the following in the My Carts API:
  • [API] Added recurrenceInfo field to the Add LineItem and Add CustomLineItem update actions in Orders Edits API.
  • [API] Added recurringOrder field to the Order type in Orders API.
  • [API] Added recurrencePrices field to the ProductVariant type in Products API.
  • [API] Added recurrencePolicy field to the StandalonePrice and StandalonePriceDraft types in Standalone Prices API.
  • [API] Added RecurringOrderState enum to the StateTypeEnum type in States API.
  • [GraphQL API] Added the recurringOrder, recurringOrders, recurrencePolicy, and recurrencePolicies fields to the Query type.
  • [GraphQL API] Added the createRecurringOrder, updateRecurringOrder, createRecurrencePolicy, and updateRecurrencePolicy fields to the Mutation type.
  • [GraphQL API] Added the following types to the GraphQL schema: Counter, CounterInputDraft, CustomLineItemRecurrenceInfo, CustomLineItemRecurrenceInfoDraft, CustomLineItemRecurrenceInfoInputDraft, DayOfMonthSchedule, DayOfMonthScheduleInput, IntervalUnit, LineItemRecurrenceInfo, LineItemRecurrenceInfoDraft, LineItemRecurrenceInfoInputDraft, OrderCreatedFromRecurringOrder, PriceSelectionMode, RecurrencePolicy, RecurrencePolicyDraft, RecurrencePolicyQueryResult, RecurrencePolicyRef, RecurrencePolicyReferenceIdentifier, RecurrencePolicySchedule, RecurrencePolicyScheduleInput, RecurrencePolicyUpdateAction, RecurringOrder, RecurringOrderActiveInput, RecurringOrderCanceledInput, RecurringOrderCreated, RecurringOrderCustomFieldAdded, RecurringOrderCustomFieldChanged, RecurringOrderCustomFieldRemoved, RecurringOrderCustomTypeRemoved, RecurringOrderCustomTypeSet, RecurringOrderDeleted, RecurringOrderDraft, RecurringOrderExpiredInput, RecurringOrderKeySet, RecurringOrderPausedInput, RecurringOrderQueryResult, RecurringOrderScheduleSet, RecurringOrderStartsAtSet, RecurringOrderState, RecurringOrderStateChanged, RecurringOrderStateDraft, RecurringOrderStateTransition, RecurringOrderUpdateAction, SetCustomLineItemRecurrenceInfo, SetLineItemRecurrenceInfo, SetRecurrencePolicyDescription, SetRecurrencePolicyKey, SetRecurrencePolicyName, SetRecurrencePolicySchedule, SetRecurringOrderCustomField, SetRecurringOrderCustomType, SetRecurringOrderKey, SetRecurringOrderOrderSkipConfiguration, SetRecurringOrderSchedule, SetRecurringOrderStartsAt, SetRecurringOrderState, SkipConfiguration, SkipConfigurationInputDraft, StandardSchedule, StandardScheduleInput, TransitionRecurringOrderState.
  • [GraphQL API] Added the allRecurrencePrices field to the ProductVariant type.
  • [GraphQL API] Added the allRecurrencePrices field to the ProductSearchVariant type.
  • [GraphQL API] Added the returnAllPricesByRecurrencePolicy and recurrencePolicyId arguments to the ProductVariant.price field.
  • [GraphQL API] Added the returnAllPricesByRecurrencePolicy and recurrencePolicyId arguments to the ProductSearchVariant.price field.
  • [GraphQL API] Changed the AddCartCustomLineItem.priceMode default value from Standard to none.
  • [GraphQL API] Changed the AddStagedOrderCustomLineItem.priceMode default value from Standard to none.
  • [GraphQL API] Added the recurrencePolicy input field to the ProductPriceDataInput type.
  • [GraphQL API] Added the RecurringOrder enum value to the CartOrigin enum.
  • [GraphQL API] Added the recurrenceInfo field to the LineItem type.
  • [GraphQL API] Added the recurrenceInfo input field to the LineItemDraft type.
  • [GraphQL API] Added the recurrenceInfo field to the LineItemDraftOutput type.
  • [GraphQL API] Added the recurrenceInfo input field to the AddCartLineItem type.
  • [GraphQL API] Added the recurrenceInfo input field to the MyLineItemDraft type.
  • [GraphQL API] Added the recurrenceInfo input field to the AddMyCartLineItem type.
  • [GraphQL API] Added the recurrenceInfo field to the CustomLineItem type.
  • [GraphQL API] Added the recurrenceInfo input field to the CustomLineItemDraft type.
  • [GraphQL API] Added the recurrenceInfo field to the CustomLineItemDraftOutput type.
  • [GraphQL API] Added the recurrenceInfo input field to the AddCartCustomLineItem type.
  • [GraphQL API] Added the setLineItemRecurrenceInfo and setCustomLineItemRecurrenceInfo input fields to the CartUpdateAction type.
  • [GraphQL API] Added the setLineItemRecurrenceInfo and setCustomLineItemRecurrenceInfo input fields to the MyCartUpdateAction type.
  • [GraphQL API] Added the recurringOrder and recurringOrderRef fields to the Order type.
  • [GraphQL API] Added the recurrenceInfo input field to the AddStagedOrderLineItem type.
  • [GraphQL API] Added the recurrenceInfo input field to the AddStagedOrderCustomLineItem type.
  • [GraphQL API] Added the RecurringOrderState enum value to the StateType enum.
  • [GraphQL API] Added the recurrencePolicy and recurrencePolicyRef fields to the ProductPrice type.
  • [GraphQL API] Added the recurrencePolicy and recurrencePolicyRef fields to the StandalonePrice type.
  • [GraphQL API] Added the recurrencePolicy input field to the CreateStandalonePrice type.

The following changes were introduced in terms of GraphQL SDL:

extend type LineItemDraftOutput {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoDraft
}

extend type ProductVariant {
  "Returns all recurrence prices based on the price selection rules."
  allRecurrencePrices(currency: Currency!, country: Country, customerGroupId: String, channelId: String, date: DateTime, recurrencePolicyId: String, returnAllPricesByRecurrencePolicy: Boolean): [ProductPrice!]
}

extend type CustomLineItemDraftOutput {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfoDraft
}

extend type ProductPrice {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrencePolicy: RecurrencePolicy

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrencePolicyRef: Reference
}

extend type ProductSearchVariant {
  "Returns all recurrence prices based on the price selection rules."
  allRecurrencePrices(currency: Currency!, country: Country, customerGroupId: String, channelId: String, date: DateTime, recurrencePolicyId: String, returnAllPricesByRecurrencePolicy: Boolean): [ProductPriceSearch!]
}

extend type Query {

  """
  Recurrence policies are managed and queried through the Recurrence Policy API
  and associated to a Price
  """
  recurrencePolicies(where: String, sort: [String!], limit: Int, offset: Int): RecurrencePolicyQueryResult!

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrencePolicy(
    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): RecurrencePolicy
  recurringOrder(
    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): RecurringOrder
  recurringOrders(where: String, sort: [String!], limit: Int, offset: Int): RecurringOrderQueryResult!
}

extend type CustomLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfo
}

extend type Mutation {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  createRecurrencePolicy(draft: RecurrencePolicyDraft!): RecurrencePolicy

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  createRecurringOrder(draft: RecurringOrderDraft!): RecurringOrder

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  updateRecurrencePolicy(version: Long!, actions: [RecurrencePolicyUpdateAction!]!,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): RecurrencePolicy

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  updateRecurringOrder(version: Long!, actions: [RecurringOrderUpdateAction!]!,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): RecurringOrder
}

extend type Order {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurringOrder: RecurringOrder

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurringOrderRef: Reference
}

extend type LineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfo
}

extend type StandalonePrice {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrencePolicy: RecurrencePolicy

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrencePolicyRef: Reference
}

extend input AddMyCartLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

extend input AddStagedOrderLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

extend input MyLineItemDraft {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

extend input CreateStandalonePrice {
  recurrencePolicy: ResourceIdentifierInput
}

extend input CartUpdateAction {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  setCustomLineItemRecurrenceInfo: SetCustomLineItemRecurrenceInfo

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  setLineItemRecurrenceInfo: SetLineItemRecurrenceInfo
}

extend input LineItemDraft {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

extend input AddCartLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

extend input AddCartCustomLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}

extend input AddStagedOrderCustomLineItem {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}

extend input MyCartUpdateAction {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  setCustomLineItemRecurrenceInfo: SetCustomLineItemRecurrenceInfo

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  setLineItemRecurrenceInfo: SetLineItemRecurrenceInfo
}

extend input CustomLineItemDraft {
  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}

extend enum CartOrigin {
  "The cart was created by the merchant as a recurring order."
  RecurringOrder
}

extend enum StateType {
  RecurringOrderState
}

type Counter implements SkipConfiguration {
  totalToSkip: Int!
  skipped: Int!
  lastSkippedAt: DateTime
  type: String!
}

input CounterInputDraft {
  totalToSkip: Int!
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomLineItemRecurrenceInfo {
  recurrencePolicy: RecurrencePolicy
  recurrencePolicyRef: RecurrencePolicyRef!
  expiresAt: DateTime
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type CustomLineItemRecurrenceInfoDraft {
  recurrencePolicyRef: RecurrencePolicyReferenceIdentifier
  expiresAt: DateTime
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input CustomLineItemRecurrenceInfoInputDraft {
  recurrencePolicy: ResourceIdentifierInput!
  expiresAt: DateTime
}

type DayOfMonthSchedule implements RecurrencePolicySchedule {
  day: Int!
  type: String!
}

input DayOfMonthScheduleInput {
  day: Int!
}

enum IntervalUnit {
  Days
  Months
  Weeks
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type LineItemRecurrenceInfo {
  recurrencePolicy: RecurrencePolicy
  recurrencePolicyRef: RecurrencePolicyRef!
  expiresAt: DateTime
  priceSelectionMode: PriceSelectionMode!
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type LineItemRecurrenceInfoDraft {
  recurrencePolicyRef: RecurrencePolicyReferenceIdentifier
  expiresAt: DateTime
  priceSelectionMode: PriceSelectionMode!
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input LineItemRecurrenceInfoInputDraft {
  recurrencePolicy: ResourceIdentifierInput!
  expiresAt: DateTime
  priceSelectionMode: PriceSelectionMode!
}

type OrderCreatedFromRecurringOrder implements MessagePayload & OrderMessagePayload {
  order: Order
  recurringOrderRef: Reference!
  type: 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 PriceSelectionMode {
  "Every time a new order is created from this recurring order, we will update to the latest price available"
  Dynamic

  "The price will stay the same until the recurring order expires or is cancelled"
  Fixed
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurrencePolicy implements Versioned {
  id: String!
  version: Long!
  key: String!
  name(
    "String is defined for different locales. This argument specifies the desired locale."
    locale: Locale,

    "List of languages the client is able to understand, and which locale variant is preferred."
    acceptLanguage: [Locale!]): String
  nameAllLocales: [LocalizedString!]
  description(
    "String is defined for different locales. This argument specifies the desired locale."
    locale: Locale,

    "List of languages the client is able to understand, and which locale variant is preferred."
    acceptLanguage: [Locale!]): String
  descriptionAllLocales: [LocalizedString!]
  schedule: RecurrencePolicySchedule!
  createdAt: DateTime!
  lastModifiedAt: DateTime!
  createdBy: Initiator
  lastModifiedBy: Initiator
}

input RecurrencePolicyDraft {
  key: String!
  name: [LocalizedStringItemInputType!]
  description: [LocalizedStringItemInputType!]
  schedule: RecurrencePolicyScheduleInput!
}

type RecurrencePolicyQueryResult {
  offset: Int!
  count: Int!
  total: Long!
  exists: Boolean!
  results: [RecurrencePolicy!]!
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurrencePolicyRef {
  typeId: String!
  id: String!
}

type RecurrencePolicyReferenceIdentifier {
  typeId: String!
  id: String
  key: String
}

interface RecurrencePolicySchedule {
  type: String!
}

input RecurrencePolicyScheduleInput {
  standard: StandardScheduleInput
  dayOfMonth: DayOfMonthScheduleInput
}

input RecurrencePolicyUpdateAction {
  setDescription: SetRecurrencePolicyDescription
  setKey: SetRecurrencePolicyKey
  setName: SetRecurrencePolicyName
  setSchedule: SetRecurrencePolicySchedule
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurringOrder implements Versioned {
  key: String
  recurringOrderState: RecurringOrderState!
  cartRef: Reference!
  cart: Cart
  startsAt: DateTime!
  resumesAt: DateTime
  expiresAt: DateTime
  lastOrderAt: DateTime
  nextOrderAt: DateTime
  skipConfiguration: SkipConfiguration
  businessUnit: BusinessUnit
  businessUnitRef: KeyReference
  custom: CustomFieldsType
  stateRef: Reference
  state: State
  originOrderRef: Reference
  originOrder: Order
  schedule: RecurrencePolicySchedule!
  customerRef: Reference
  customer: Customer
  customerEmail: String
  id: String!
  version: Long!
  createdAt: DateTime!
  lastModifiedAt: DateTime!
  createdBy: Initiator
  lastModifiedBy: Initiator
}

input RecurringOrderActiveInput {
  resumesAt: DateTime
}

input RecurringOrderCanceledInput {
  reason: String
}

type RecurringOrderCreated implements MessagePayload {
  recurringOrder: RecurringOrder!
  type: String!
}

type RecurringOrderCustomFieldAdded implements MessagePayload {
  name: String!
  value: Json!
  type: String!
}

type RecurringOrderCustomFieldChanged implements MessagePayload {
  name: String!
  value: Json!
  previousValue: Json
  type: String!
}

type RecurringOrderCustomFieldRemoved implements MessagePayload {
  name: String!
  type: String!
}

type RecurringOrderCustomTypeRemoved implements MessagePayload {
  previousTypeId: String
  type: String!
}

type RecurringOrderCustomTypeSet implements MessagePayload {
  customFields: CustomFieldsType!
  previousTypeId: String
  type: String!
}

type RecurringOrderDeleted implements MessagePayload {
  type: String!
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input RecurringOrderDraft {
  key: String
  custom: CustomFieldsDraft
  cart: ResourceIdentifierInput!
  cartVersion: Long!
  startsAt: DateTime!
  expiresAt: DateTime
  state: ResourceIdentifierInput
  recurringOrderState: RecurringOrderState
}

input RecurringOrderExpiredInput {
  dummy: String
}

type RecurringOrderKeySet implements MessagePayload {
  key: String
  oldKey: String
  type: String!
}

input RecurringOrderPausedInput {
  dummy: String
}

type RecurringOrderQueryResult {
  offset: Int!
  count: Int!
  total: Long!
  exists: Boolean!
  results: [RecurringOrder!]!
}

type RecurringOrderScheduleSet implements MessagePayload {
  recurrencePolicySchedule: RecurrencePolicySchedule!
  oldRecurrencePolicySchedule: RecurrencePolicySchedule!
  type: String!
}

type RecurringOrderStartsAtSet implements MessagePayload {
  startsAt: DateTime!
  oldStartsAt: DateTime!
  type: 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 RecurringOrderState {
  Active
  Canceled
  Expired
  Failed
  Paused
}

type RecurringOrderStateChanged implements MessagePayload {
  recurringOrderState: RecurringOrderState!
  oldRecurringOrderState: RecurringOrderState!
  type: String!
}

input RecurringOrderStateDraft {
  active: RecurringOrderActiveInput
  paused: RecurringOrderPausedInput
  canceled: RecurringOrderCanceledInput
  expired: RecurringOrderExpiredInput
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
type RecurringOrderStateTransition implements MessagePayload {
  force: Boolean!
  state: State
  oldState: State
  stateRef: Reference!
  oldStateRef: Reference
  type: String!
}

input RecurringOrderUpdateAction {
  setKey: SetRecurringOrderKey
  setOrderSkipConfiguration: SetRecurringOrderOrderSkipConfiguration
  setCustomField: SetRecurringOrderCustomField
  setCustomType: SetRecurringOrderCustomType
  setRecurringOrderState: SetRecurringOrderState
  setSchedule: SetRecurringOrderSchedule
  setStartsAt: SetRecurringOrderStartsAt
  transitionState: TransitionRecurringOrderState
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetCustomLineItemRecurrenceInfo {
  customLineItemId: String!
  customLineItemKey: String

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: CustomLineItemRecurrenceInfoInputDraft
}

"BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
input SetLineItemRecurrenceInfo {
  lineItemId: String!

  "BETA: This feature can be subject to change and should be used carefully in production. https://docs.commercetools.com/api/contract#public-beta"
  recurrenceInfo: LineItemRecurrenceInfoInputDraft
}

input SetRecurrencePolicyDescription {
  description: [LocalizedStringItemInputType!]
}

input SetRecurrencePolicyKey {
  key: String!
}

input SetRecurrencePolicyName {
  name: [LocalizedStringItemInputType!]
}

input SetRecurrencePolicySchedule {
  schedule: RecurrencePolicyScheduleInput!
}

input SetRecurringOrderCustomField {
  name: String!
  value: String
}

input SetRecurringOrderCustomType {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetRecurringOrderKey {
  key: String
}

input SetRecurringOrderOrderSkipConfiguration {
  skipConfigurationInputDraft: SkipConfigurationInputDraft
  updatedExpiresAt: DateTime
}

input SetRecurringOrderSchedule {
  recurrencePolicy: ResourceIdentifierInput!
}

input SetRecurringOrderStartsAt {
  startsAt: DateTime!
}

input SetRecurringOrderState {
  recurringOrderState: RecurringOrderStateDraft!
}

interface SkipConfiguration {
  type: String!
}

input SkipConfigurationInputDraft {
  Counter: CounterInputDraft
}

type StandardSchedule implements RecurrencePolicySchedule {
  value: Int!
  intervalUnit: IntervalUnit!
  type: String!
}

input StandardScheduleInput {
  value: Int!
  intervalUnit: IntervalUnit!
}

input TransitionRecurringOrderState {
  state: ResourceIdentifierInput!
  force: Boolean = false
}