schema
  @link(url: "https://specs.apollo.dev/link/v1.0")
  @link(url: "https://specs.apollo.dev/join/v0.2", for: EXECUTION)
{
  query: Query
  mutation: Mutation
}

directive @join__field(graph: join__Graph!, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION

directive @join__graph(name: String!, url: String!) on ENUM_VALUE

directive @join__implements(graph: join__Graph!, interface: String!) repeatable on OBJECT | INTERFACE

directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR

directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA

type AccessScope
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String!
  handle: String!
}

type App implements Node
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  apiKey: String! @join__field(graph: SHOP)
  appStoreAppUrl: URL @join__field(graph: SHOP)
  appStoreDeveloperUrl: URL @join__field(graph: SHOP)
  availableAccessScopes: [AccessScope!]! @join__field(graph: SHOP)
  banner: Image! @join__field(graph: SHOP)
  description: String @join__field(graph: SHOP)
  developerName: String @join__field(graph: SHOP)
  developerType: AppDeveloperType! @join__field(graph: SHOP)
  embedded: Boolean! @join__field(graph: SHOP)
  failedRequirements: [FailedRequirement!]! @join__field(graph: SHOP)
  features: [String!]! @join__field(graph: SHOP)
  feedback: AppFeedback @join__field(graph: SHOP)
  handle: String @join__field(graph: SHOP)
  icon: Image! @join__field(graph: SHOP)
  installUrl: URL @join__field(graph: SHOP)
  installation: AppInstallation @join__field(graph: SHOP)
  isPostPurchaseAppInUse: Boolean! @join__field(graph: SHOP)
  previouslyInstalled: Boolean! @join__field(graph: SHOP)
  pricingDetails: String @join__field(graph: SHOP)
  pricingDetailsSummary: String! @join__field(graph: SHOP)
  privacyPolicyUrl: URL @join__field(graph: SHOP)
  publicCategory: AppPublicCategory! @join__field(graph: SHOP)
  published: Boolean! @join__field(graph: SHOP)
  requestedAccessScopes: [AccessScope!]! @join__field(graph: SHOP)
  screenshots: [Image!]! @join__field(graph: SHOP)
  shopifyDeveloped: Boolean! @join__field(graph: SHOP)
  title: String! @join__field(graph: SHOP)
  uninstallMessage: String! @join__field(graph: SHOP)
  webhookApiVersion: String! @join__field(graph: SHOP)
}

type AppConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppEdge!]!
  nodes: [App!]!
  pageInfo: PageInfo!
}

type AppCredit implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  createdAt: DateTime!
  description: String!
  id: ID!
  test: Boolean!
}

type AppCreditConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppCreditEdge!]!
  nodes: [AppCredit!]!
  pageInfo: PageInfo!
}

type AppCreditEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: AppCredit!
}

enum AppDeveloperType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SHOPIFY
  PARTNER
  MERCHANT
  UNKNOWN
}

type AppEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: App!
}

type AppFeedback
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App!
  link: Link
  messages: [UserError!]!
}

type AppInstallation implements HasMetafields & Node
  @join__implements(graph: CUSTOMER, interface: "HasMetafields")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "HasMetafields")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "HasMetafields")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  accessScopes: [AccessScope!]!
  activeSubscriptions: [AppSubscription!]!
  allSubscriptions(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: AppSubscriptionSortKeys = CREATED_AT): AppSubscriptionConnection!
  app: App!
  credits(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: AppTransactionSortKeys = CREATED_AT): AppCreditConnection!
  id: ID!
  launchUrl: URL!
  metafield(namespace: String!, key: String!): Metafield
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection!
  oneTimePurchases(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: AppTransactionSortKeys = CREATED_AT): AppPurchaseOneTimeConnection!
  privateMetafield(namespace: String!, key: String!): PrivateMetafield
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection!
  publication: Publication
  revenueAttributionRecords(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: AppRevenueAttributionRecordSortKeys = CREATED_AT): AppRevenueAttributionRecordConnection!
  uninstallUrl: URL
}

type AppPlanV2
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  pricingDetails: AppPricingDetails!
}

union AppPricingDetails
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = AppRecurringPricing | AppUsagePricing

enum AppPricingInterval
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ANNUAL
  EVERY_30_DAYS
}

enum AppPublicCategory
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRIVATE
  PUBLIC
  CUSTOM
  OTHER
}

interface AppPurchase
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  name: String!
  price: MoneyV2!
  status: AppPurchaseStatus!
  test: Boolean!
}

type AppPurchaseOneTime implements AppPurchase & Node
  @join__implements(graph: CUSTOMER, interface: "AppPurchase")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "AppPurchase")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "AppPurchase")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "AppPurchase")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  id: ID!
  name: String!
  price: MoneyV2!
  status: AppPurchaseStatus!
  test: Boolean!
}

type AppPurchaseOneTimeConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppPurchaseOneTimeEdge!]!
  nodes: [AppPurchaseOneTime!]!
  pageInfo: PageInfo!
}

type AppPurchaseOneTimeEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: AppPurchaseOneTime!
}

enum AppPurchaseStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACTIVE
  DECLINED
  EXPIRED
  PENDING
}

type AppRecurringPricing
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  discount: AppSubscriptionDiscount
  interval: AppPricingInterval!
  price: MoneyV2!
}

type AppRevenueAttributionRecord implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  capturedAt: DateTime!
  createdAt: DateTime!
  id: ID!
  idempotencyKey: String!
  test: Boolean!
  type: AppRevenueAttributionType!
}

type AppRevenueAttributionRecordConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppRevenueAttributionRecordEdge!]!
  nodes: [AppRevenueAttributionRecord!]!
  pageInfo: PageInfo!
}

type AppRevenueAttributionRecordEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: AppRevenueAttributionRecord!
}

enum AppRevenueAttributionRecordSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  ID
  RELEVANCE
}

enum AppRevenueAttributionType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  APPLICATION_PURCHASE
  APPLICATION_SUBSCRIPTION
  APPLICATION_USAGE
  OTHER
}

type AppSubscription implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  currentPeriodEnd: DateTime
  id: ID!
  lineItems: [AppSubscriptionLineItem!]!
  name: String!
  returnUrl: URL!
  status: AppSubscriptionStatus!
  test: Boolean!
  trialDays: Int!
}

type AppSubscriptionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppSubscriptionEdge!]!
  nodes: [AppSubscription!]!
  pageInfo: PageInfo!
}

type AppSubscriptionDiscount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  durationLimitInIntervals: Int
  priceAfterDiscount: MoneyV2!
  remainingDurationInIntervals: Int
  value: AppSubscriptionDiscountValue!
}

type AppSubscriptionDiscountAmount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
}

type AppSubscriptionDiscountPercentage
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  percentage: Float!
}

union AppSubscriptionDiscountValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = AppSubscriptionDiscountAmount | AppSubscriptionDiscountPercentage

type AppSubscriptionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: AppSubscription!
}

type AppSubscriptionLineItem
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  plan: AppPlanV2!
  usageRecords(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: AppUsageRecordSortKeys = CREATED_AT): AppUsageRecordConnection!
}

enum AppSubscriptionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  ID
  RELEVANCE
}

enum AppSubscriptionStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PENDING
  ACTIVE
  DECLINED
  EXPIRED
  FROZEN
  CANCELLED
}

enum AppTransactionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  ID
  RELEVANCE
}

type AppUsagePricing
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  balanceUsed: MoneyV2!
  cappedAmount: MoneyV2!
  interval: AppPricingInterval!
  terms: String!
}

type AppUsageRecord implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  description: String!
  id: ID!
  price: MoneyV2!
  subscriptionLineItem: AppSubscriptionLineItem!
}

type AppUsageRecordConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [AppUsageRecordEdge!]!
  nodes: [AppUsageRecord!]!
  pageInfo: PageInfo!
}

type AppUsageRecordEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: AppUsageRecord!
}

enum AppUsageRecordSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  ID
  RELEVANCE
}

type Attribute
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  key: String!
  value: String
}

type AutomaticDiscountApplication implements DiscountApplication
  @join__implements(graph: CUSTOMER, interface: "DiscountApplication")
  @join__implements(graph: ORDER, interface: "DiscountApplication")
  @join__implements(graph: PRODUCT, interface: "DiscountApplication")
  @join__implements(graph: SHOP, interface: "DiscountApplication")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocationMethod: DiscountApplicationAllocationMethod!
  index: Int!
  targetSelection: DiscountApplicationTargetSelection!
  targetType: DiscountApplicationTargetType!
  title: String!
  value: PricingValue!
}

type AvailableChannelDefinitionsByChannel
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  channelDefinitions: [ChannelDefinition!]!
  channelName: String!
}

type BasicEvent implements Event & Node
  @join__implements(graph: CUSTOMER, interface: "Event")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Event")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Event")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Event")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appTitle: String
  attributeToApp: Boolean!
  attributeToUser: Boolean!
  createdAt: DateTime!
  criticalAlert: Boolean!
  id: ID!
  message: FormattedString!
}

type BuyerExperienceConfiguration
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  checkoutToDraft: Boolean!
  payNowOnly: Boolean!
  paymentTermsTemplate: PaymentTermsTemplate
}

type ChannelDefinition implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  channelName: String!
  handle: String!
  id: ID!
  subChannelName: String!
  svgIcon: String
}

type ChannelInformation implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  app: App!
  channelDefinition: ChannelDefinition
  channelId: ID!
  id: ID!
}

type Collection implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & Node & Publishable
  @join__implements(graph: PRODUCT, interface: "HasMetafieldDefinitions")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Publishable")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  availablePublicationCount: Int! @join__field(graph: PRODUCT)
  description(truncateAt: Int): String! @join__field(graph: PRODUCT)
  descriptionHtml: HTML! @join__field(graph: PRODUCT)
  feedback: ResourceFeedback @join__field(graph: PRODUCT)
  handle: String! @join__field(graph: PRODUCT)
  hasProduct(id: ID!): Boolean! @join__field(graph: PRODUCT)
  image: Image @join__field(graph: PRODUCT)
  legacyResourceId: UnsignedInt64! @join__field(graph: PRODUCT)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: PRODUCT)
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection! @join__field(graph: PRODUCT)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: PRODUCT)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: PRODUCT)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: PRODUCT)
  products(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: ProductCollectionSortKeys = COLLECTION_DEFAULT): ProductConnection! @join__field(graph: PRODUCT)
  productsCount: Int! @join__field(graph: PRODUCT)
  publicationCount(onlyPublished: Boolean = true): Int! @join__field(graph: PRODUCT)
  publishedOnCurrentPublication: Boolean! @join__field(graph: PRODUCT)
  publishedOnPublication(publicationId: ID!): Boolean! @join__field(graph: PRODUCT)
  resourcePublications(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationConnection! @join__field(graph: PRODUCT)
  resourcePublicationsV2(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationV2Connection! @join__field(graph: PRODUCT)
  ruleSet: CollectionRuleSet @join__field(graph: PRODUCT)
  seo: SEO! @join__field(graph: PRODUCT)
  sortOrder: CollectionSortOrder! @join__field(graph: PRODUCT)
  templateSuffix: String @join__field(graph: PRODUCT)
  title: String! @join__field(graph: PRODUCT)
  translations(locale: String!, marketId: ID): [PublishedTranslation!]! @join__field(graph: PRODUCT)
  unpublishedPublications(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PublicationConnection! @join__field(graph: PRODUCT)
  updatedAt: DateTime! @join__field(graph: PRODUCT)
}

type CollectionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CollectionEdge!]!
  nodes: [Collection!]!
  pageInfo: PageInfo!
}

type CollectionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Collection!
}

type CollectionRule
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appliedDisjunctively: Boolean!
  rules: [CollectionRule!]!
}

type CollectionRuleSet
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appliedDisjunctively: Boolean!
  rules: [CollectionRule!]!
}

enum CollectionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TITLE
  UPDATED_AT
  ID
  RELEVANCE
}

enum CollectionSortOrder
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ALPHA_ASC
  ALPHA_DESC
  BEST_SELLING
  CREATED
  CREATED_DESC
  MANUAL
  PRICE_ASC
  PRICE_DESC
}

union CommentEventEmbed
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = Customer | DraftOrder | Order | Product | ProductVariant

interface CommentEventSubject
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  hasTimelineComment: Boolean!
}

type Company implements CommentEventSubject & HasEvents & Navigable & Node
  @join__implements(graph: CUSTOMER, interface: "CommentEventSubject")
  @join__implements(graph: CUSTOMER, interface: "HasEvents")
  @join__implements(graph: CUSTOMER, interface: "Navigable")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "CommentEventSubject")
  @join__implements(graph: ORDER, interface: "HasEvents")
  @join__implements(graph: ORDER, interface: "Navigable")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "CommentEventSubject")
  @join__implements(graph: PRODUCT, interface: "HasEvents")
  @join__implements(graph: PRODUCT, interface: "Navigable")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "CommentEventSubject")
  @join__implements(graph: SHOP, interface: "HasEvents")
  @join__implements(graph: SHOP, interface: "Navigable")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  contactCount: Int!
  contactRoles(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CompanyContactRoleSortKeys = ID): CompanyContactRoleConnection!
  contacts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CompanyContactSortKeys = ID, query: String): CompanyContactConnection!
  createdAt: DateTime!
  customerSince: DateTime!
  defaultCursor: String!
  defaultRole: CompanyContactRole
  draftOrders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: DraftOrderSortKeys = ID, query: String): DraftOrderConnection!
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection!
  externalId: String
  hasTimelineComment: Boolean!
  id: ID!
  lifetimeDuration: String!
  locationCount: Int!
  locations(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CompanyLocationSortKeys = ID, query: String): CompanyLocationConnection!
  mainContact: CompanyContact
  name: String!
  note: String
  orderCount: Int!
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: OrderSortKeys = ID): OrderConnection!
  totalSpent: MoneyV2!
  updatedAt: DateTime!
}

type CompanyAddress implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String!
  address2: String
  city: String
  companyName: String!
  country: String
  countryCode: CountryCode!
  createdAt: DateTime!
  formattedArea: String
  id: ID!
  phone: String
  province: String
  recipient: String
  updatedAt: DateTime!
  zip: String
  zoneCode: String
}

type CompanyContact implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  company: Company!
  createdAt: DateTime!
  customer: Customer!
  draftOrders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: DraftOrderSortKeys = ID, query: String): DraftOrderConnection!
  id: ID!
  isMainContact: Boolean!
  lifetimeDuration: String!
  locale: String
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: OrderSortKeys = ID): OrderConnection!
  roleAssignments(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CompanyContactRoleAssignmentSortKeys = ID, query: String): CompanyContactRoleAssignmentConnection!
  title: String
  updatedAt: DateTime!
}

type CompanyContactConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CompanyContactEdge!]!
  nodes: [CompanyContact!]!
  pageInfo: PageInfo!
}

type CompanyContactEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CompanyContact!
}

type CompanyContactRole implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  name: String!
  note: String
}

type CompanyContactRoleAssignment implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  company: Company!
  companyContact: CompanyContact!
  companyLocation: CompanyLocation!
  createdAt: DateTime!
  id: ID!
  role: CompanyContactRole!
  updatedAt: DateTime!
}

type CompanyContactRoleAssignmentConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CompanyContactRoleAssignmentEdge!]!
  nodes: [CompanyContactRoleAssignment!]!
  pageInfo: PageInfo!
}

type CompanyContactRoleAssignmentEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CompanyContactRoleAssignment!
}

enum CompanyContactRoleAssignmentSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  UPDATED_AT
  LOCATION_NAME
  ID
  RELEVANCE
}

type CompanyContactRoleConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CompanyContactRoleEdge!]!
  nodes: [CompanyContactRole!]!
  pageInfo: PageInfo!
}

type CompanyContactRoleEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CompanyContactRole!
}

enum CompanyContactRoleSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  UPDATED_AT
  ID
  RELEVANCE
}

enum CompanyContactSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  UPDATED_AT
  TITLE
  COMPANY_ID
  NAME
  EMAIL
  NAME_EMAIL
  ID
  RELEVANCE
}

type CompanyLocation implements CommentEventSubject & HasEvents & Navigable & Node
  @join__implements(graph: CUSTOMER, interface: "CommentEventSubject")
  @join__implements(graph: CUSTOMER, interface: "HasEvents")
  @join__implements(graph: CUSTOMER, interface: "Navigable")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "CommentEventSubject")
  @join__implements(graph: ORDER, interface: "HasEvents")
  @join__implements(graph: ORDER, interface: "Navigable")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "CommentEventSubject")
  @join__implements(graph: PRODUCT, interface: "HasEvents")
  @join__implements(graph: PRODUCT, interface: "Navigable")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "CommentEventSubject")
  @join__implements(graph: SHOP, interface: "HasEvents")
  @join__implements(graph: SHOP, interface: "Navigable")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  billingAddress: CompanyAddress
  buyerExperienceConfiguration: BuyerExperienceConfiguration
  company: Company!
  createdAt: DateTime!
  currency: CurrencyCode!
  defaultCursor: String!
  draftOrders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: DraftOrderSortKeys = ID, query: String): DraftOrderConnection!
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection!
  externalId: String
  hasTimelineComment: Boolean!
  id: ID!
  locale: String
  market: Market!
  name: String!
  note: String
  orderCount: Int!
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: OrderSortKeys = ID): OrderConnection!
  phone: String
  roleAssignments(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CompanyContactRoleAssignmentSortKeys = ID, query: String): CompanyContactRoleAssignmentConnection!
  shippingAddress: CompanyAddress
  taxExemptions: [TaxExemption!]!
  taxRegistrationId: String
  totalSpent: MoneyV2!
  updatedAt: DateTime!
}

type CompanyLocationConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CompanyLocationEdge!]!
  nodes: [CompanyLocation!]!
  pageInfo: PageInfo!
}

type CompanyLocationEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CompanyLocation!
}

enum CompanyLocationSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  UPDATED_AT
  NAME
  COMPANY_ID
  COMPANY_AND_LOCATION_NAME
  ID
  RELEVANCE
}

input ContextualPricingContext
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  country: CountryCode
  companyLocationId: ID
}

type CountriesInShippingZones
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCodes: [CountryCode!]!
  includeRestOfWorld: Boolean!
}

enum CountryCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  AF
  AX
  AL
  DZ
  AD
  AO
  AI
  AG
  AR
  AM
  AW
  AC
  AU
  AT
  AZ
  BS
  BH
  BD
  BB
  BY
  BE
  BZ
  BJ
  BM
  BT
  BO
  BA
  BW
  BV
  BR
  IO
  BN
  BG
  BF
  BI
  KH
  CA
  CV
  BQ
  KY
  CF
  TD
  CL
  CN
  CX
  CC
  CO
  KM
  CG
  CD
  CK
  CR
  HR
  CU
  CW
  CY
  CZ
  CI
  DK
  DJ
  DM
  DO
  EC
  EG
  SV
  GQ
  ER
  EE
  SZ
  ET
  FK
  FO
  FJ
  FI
  FR
  GF
  PF
  TF
  GA
  GM
  GE
  DE
  GH
  GI
  GR
  GL
  GD
  GP
  GT
  GG
  GN
  GW
  GY
  HT
  HM
  VA
  HN
  HK
  HU
  IS
  IN
  ID
  IR
  IQ
  IE
  IM
  IL
  IT
  JM
  JP
  JE
  JO
  KZ
  KE
  KI
  KP
  XK
  KW
  KG
  LA
  LV
  LB
  LS
  LR
  LY
  LI
  LT
  LU
  MO
  MG
  MW
  MY
  MV
  ML
  MT
  MQ
  MR
  MU
  YT
  MX
  MD
  MC
  MN
  ME
  MS
  MA
  MZ
  MM
  NA
  NR
  NP
  NL
  AN
  NC
  NZ
  NI
  NE
  NG
  NU
  NF
  MK
  NO
  OM
  PK
  PS
  PA
  PG
  PY
  PE
  PH
  PN
  PL
  PT
  QA
  CM
  RE
  RO
  RU
  RW
  BL
  SH
  KN
  LC
  MF
  PM
  WS
  SM
  ST
  SA
  SN
  RS
  SC
  SL
  SG
  SX
  SK
  SI
  SB
  SO
  ZA
  GS
  KR
  SS
  ES
  LK
  VC
  SD
  SR
  SJ
  SE
  CH
  SY
  TW
  TJ
  TZ
  TH
  TL
  TG
  TK
  TO
  TT
  TA
  TN
  TR
  TM
  TC
  TV
  UG
  UA
  AE
  GB
  US
  UM
  UY
  UZ
  VU
  VE
  VN
  VG
  WF
  EH
  YE
  ZM
  ZW
  ZZ
}

type CountryHarmonizedSystemCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCode: CountryCode!
  harmonizedSystemCode: String!
}

type CountryHarmonizedSystemCodeConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CountryHarmonizedSystemCodeEdge!]!
  nodes: [CountryHarmonizedSystemCode!]!
  pageInfo: PageInfo!
}

type CountryHarmonizedSystemCodeEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CountryHarmonizedSystemCode!
}

input CreateMediaInput
  @join__type(graph: PRODUCT)
{
  originalSource: String!
  alt: String
  mediaContentType: MediaContentType!
}

enum CropRegion
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CENTER
  TOP
  BOTTOM
  LEFT
  RIGHT
}

enum CurrencyCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  AED
  AFN
  ALL
  AMD
  ANG
  AOA
  ARS
  AUD
  AWG
  AZN
  BAM
  BBD
  BDT
  BGN
  BHD
  BIF
  BMD
  BND
  BOB
  BRL
  BSD
  BTN
  BWP
  BYN
  BZD
  CAD
  CDF
  CHF
  CLP
  CNY
  COP
  CRC
  CVE
  CZK
  DJF
  DKK
  DOP
  DZD
  EGP
  ERN
  ETB
  EUR
  FJD
  FKP
  GBP
  GEL
  GHS
  GIP
  GMD
  GNF
  GTQ
  GYD
  HKD
  HNL
  HRK
  HTG
  HUF
  IDR
  ILS
  INR
  IQD
  IRR
  ISK
  JEP
  JMD
  JOD
  JPY
  KES
  KGS
  KHR
  KID
  KMF
  KRW
  KWD
  KYD
  KZT
  LAK
  LBP
  LKR
  LRD
  LSL
  LTL
  LVL
  LYD
  MAD
  MDL
  MGA
  MKD
  MMK
  MNT
  MOP
  MRU
  MUR
  MVR
  MWK
  MXN
  MYR
  MZN
  NAD
  NGN
  NIO
  NOK
  NPR
  NZD
  OMR
  PAB
  PEN
  PGK
  PHP
  PKR
  PLN
  PYG
  QAR
  RON
  RSD
  RUB
  RWF
  SAR
  SBD
  SCR
  SDG
  SEK
  SGD
  SHP
  SLL
  SOS
  SRD
  SSP
  STN
  SYP
  SZL
  THB
  TJS
  TMT
  TND
  TOP
  TRY
  TTD
  TWD
  TZS
  UAH
  UGX
  USD
  UYU
  UZS
  VED
  VES
  VND
  VUV
  WST
  XAF
  XCD
  XOF
  XPF
  XXX
  YER
  ZAR
  ZMW
  BYR @deprecated
}

type CurrencyFormats
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  moneyFormat: FormattedString!
  moneyInEmailsFormat: String!
  moneyWithCurrencyFormat: FormattedString!
  moneyWithCurrencyInEmailsFormat: String!
}

type CurrencySetting
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  currencyCode: CurrencyCode!
  currencyName: String!
  enabled: Boolean!
  rateUpdatedAt: DateTime
}

type CurrencySettingConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CurrencySettingEdge!]!
  nodes: [CurrencySetting!]!
  pageInfo: PageInfo!
}

type CurrencySettingEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CurrencySetting!
}

type Customer implements CommentEventSubject & HasEvents & HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "CommentEventSubject")
  @join__implements(graph: CUSTOMER, interface: "HasEvents")
  @join__implements(graph: CUSTOMER, interface: "HasMetafieldDefinitions")
  @join__implements(graph: CUSTOMER, interface: "HasMetafields")
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  addresses(first: Int): [MailingAddress!]! @join__field(graph: CUSTOMER)
  amountSpent: MoneyV2! @join__field(graph: CUSTOMER)
  averageOrderAmountV2: MoneyV2 @join__field(graph: CUSTOMER)
  canDelete: Boolean! @join__field(graph: CUSTOMER)
  companyContactProfiles: [CompanyContact!]! @join__field(graph: CUSTOMER)
  createdAt: DateTime! @join__field(graph: CUSTOMER)
  defaultAddress: MailingAddress @join__field(graph: CUSTOMER)
  displayName: String! @join__field(graph: CUSTOMER)
  email: String @join__field(graph: CUSTOMER)
  emailMarketingConsent: CustomerEmailMarketingConsentState @join__field(graph: CUSTOMER)
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection! @join__field(graph: CUSTOMER)
  firstName: String @join__field(graph: CUSTOMER)
  hasTimelineComment: Boolean! @join__field(graph: CUSTOMER)
  id: ID!
  image: Image! @join__field(graph: CUSTOMER)
  lastName: String @join__field(graph: CUSTOMER)
  lastOrder: Order @join__field(graph: CUSTOMER)
  legacyResourceId: UnsignedInt64! @join__field(graph: CUSTOMER)
  lifetimeDuration: String! @join__field(graph: CUSTOMER)
  locale: String! @join__field(graph: CUSTOMER)
  market: Market @join__field(graph: CUSTOMER)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: CUSTOMER)
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection! @join__field(graph: CUSTOMER)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: CUSTOMER)
  multipassIdentifier: String @join__field(graph: CUSTOMER)
  note: String @join__field(graph: CUSTOMER)
  numberOfOrders: UnsignedInt64! @join__field(graph: CUSTOMER)
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: OrderSortKeys = ID, query: String): OrderConnection! @join__field(graph: CUSTOMER)
  paymentMethods(showRevoked: Boolean = false, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): CustomerPaymentMethodConnection! @join__field(graph: CUSTOMER)
  phone: String @join__field(graph: CUSTOMER)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: CUSTOMER)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: CUSTOMER)
  productSubscriberStatus: CustomerProductSubscriberStatus! @join__field(graph: CUSTOMER)
  smsMarketingConsent: CustomerSmsMarketingConsentState @join__field(graph: CUSTOMER)
  state: CustomerState! @join__field(graph: CUSTOMER)
  statistics: CustomerStatistics! @join__field(graph: CUSTOMER)
  subscriptionContracts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionContractConnection! @join__field(graph: CUSTOMER)
  tags: [String!]! @join__field(graph: CUSTOMER)
  taxExempt: Boolean! @join__field(graph: CUSTOMER)
  taxExemptions: [TaxExemption!]! @join__field(graph: CUSTOMER)
  unsubscribeUrl: URL! @join__field(graph: CUSTOMER)
  updatedAt: DateTime! @join__field(graph: CUSTOMER)
  validEmailAddress: Boolean! @join__field(graph: CUSTOMER)
  verifiedEmail: Boolean! @join__field(graph: CUSTOMER)
}

enum CustomerConsentCollectedFrom
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SHOPIFY
  OTHER
}

type CustomerCreatePayload
  @join__type(graph: CUSTOMER)
{
  customer: Customer
  userErrors: [UserError!]!
}

type CustomerCreditCard
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  billingAddress: CustomerCreditCardBillingAddress
  brand: String!
  expiresSoon: Boolean!
  expiryMonth: Int!
  expiryYear: Int!
  firstDigits: String
  isRevocable: Boolean!
  lastDigits: String!
  maskedNumber: String!
  name: String!
  source: String
  virtualLastDigits: String
}

type CustomerCreditCardBillingAddress
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  city: String
  country: String
  countryCode: CountryCode
  province: String
  provinceCode: String
  zip: String
}

type CustomerEmailMarketingConsentState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  consentUpdatedAt: DateTime
  marketingOptInLevel: CustomerMarketingOptInLevel
  marketingState: CustomerEmailMarketingState!
}

enum CustomerEmailMarketingState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NOT_SUBSCRIBED
  PENDING
  SUBSCRIBED
  UNSUBSCRIBED
  REDACTED
  INVALID
}

input CustomerInput
  @join__type(graph: CUSTOMER)
{
  addresses: [MailingAddressInput!]
  email: String
  firstName: String
  id: ID
  lastName: String
  locale: String
  metafields: [MetafieldInput!]
  note: String
  phone: String
  privateMetafields: [PrivateMetafieldInput!]
  tags: [String!]
}

type CustomerJourneySummary
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  customerOrderIndex: Int
  daysToConversion: Int
  firstVisit: CustomerVisit
  lastVisit: CustomerVisit
  moments(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): CustomerMomentConnection
  momentsCount: Int
  ready: Boolean!
}

enum CustomerMarketingOptInLevel
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SINGLE_OPT_IN
  CONFIRMED_OPT_IN
  UNKNOWN
}

interface CustomerMoment
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  occurredAt: DateTime!
}

type CustomerMomentConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CustomerMomentEdge!]!
  nodes: [CustomerMoment!]!
  pageInfo: PageInfo!
}

type CustomerMomentEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CustomerMoment!
}

union CustomerPaymentInstrument
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = CustomerCreditCard | CustomerPaypalBillingAgreement | CustomerShopPayAgreement

type CustomerPaymentInstrumentBillingAddress
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  city: String
  country: String
  countryCode: CountryCode
  name: String
  province: String
  provinceCode: String
  zip: String
}

type CustomerPaymentMethod implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  customer: Customer
  id: ID!
  instrument: CustomerPaymentInstrument
  revokedAt: DateTime
  revokedReason: CustomerPaymentMethodRevocationReason
  subscriptionContracts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionContractConnection!
}

type CustomerPaymentMethodConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [CustomerPaymentMethodEdge!]!
  nodes: [CustomerPaymentMethod!]!
  pageInfo: PageInfo!
}

type CustomerPaymentMethodEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: CustomerPaymentMethod!
}

enum CustomerPaymentMethodRevocationReason
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  AUTHORIZE_NET_GATEWAY_NOT_ENABLED
  AUTHORIZE_NET_RETURNED_NO_PAYMENT_METHOD
  FAILED_TO_UPDATE_CREDIT_CARD
  STRIPE_API_AUTHENTICATION_ERROR
  STRIPE_API_INVALID_REQUEST_ERROR
  STRIPE_GATEWAY_NOT_ENABLED
  STRIPE_RETURNED_NO_PAYMENT_METHOD
  STRIPE_PAYMENT_METHOD_NOT_CARD
  BRAINTREE_API_AUTHENTICATION_ERROR
  BRAINTREE_GATEWAY_NOT_ENABLED
  BRAINTREE_RETURNED_NO_PAYMENT_METHOD
  BRAINTREE_PAYMENT_METHOD_NOT_CARD
  MANUALLY_REVOKED
  MERGED
}

type CustomerPaypalBillingAgreement
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  billingAddress: CustomerPaymentInstrumentBillingAddress
  inactive: Boolean!
  isRevocable: Boolean!
  paypalAccountEmail: String
}

enum CustomerPredictedSpendTier
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  HIGH
  MEDIUM
  LOW
}

enum CustomerProductSubscriberStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACTIVE
  CANCELLED
  EXPIRED
  FAILED
  NEVER_SUBSCRIBED
  PAUSED
}

type CustomerShopPayAgreement
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  expiresSoon: Boolean!
  expiryMonth: Int!
  expiryYear: Int!
  inactive: Boolean!
  isRevocable: Boolean!
  lastDigits: String!
  maskedNumber: String!
  name: String!
}

type CustomerSmsMarketingConsentState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  consentCollectedFrom: CustomerConsentCollectedFrom
  consentUpdatedAt: DateTime
  marketingOptInLevel: CustomerMarketingOptInLevel!
  marketingState: CustomerSmsMarketingState!
}

enum CustomerSmsMarketingState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NOT_SUBSCRIBED
  PENDING
  SUBSCRIBED
  UNSUBSCRIBED
  REDACTED
}

enum CustomerState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  DECLINED
  DISABLED
  ENABLED
  INVITED
}

type CustomerStatistics
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  predictedSpendTier: CustomerPredictedSpendTier
}

type CustomerVisit implements CustomerMoment & Node
  @join__implements(graph: CUSTOMER, interface: "CustomerMoment")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "CustomerMoment")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "CustomerMoment")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "CustomerMoment")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  landingPage: URL
  landingPageHtml: HTML
  marketingEvent: MarketingEvent
  occurredAt: DateTime!
  referralCode: String
  referralInfoHtml: FormattedString!
  referrerUrl: URL
  source: String!
  sourceDescription: String
  sourceType: MarketingTactic
  utmParameters: UTMParameters
}

scalar DateTime
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

scalar Decimal
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

type DeliveryAvailableService
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countries: DeliveryCountryCodesOrRestOfWorld!
  name: String!
}

type DeliveryCarrierService implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  availableServicesForCountries(origins: [ID!], countryCodes: [CountryCode!], restOfWorld: Boolean!): [DeliveryAvailableService!]!
  formattedName: String
  icon: Image!
  id: ID!
  name: String
}

type DeliveryCondition implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  conditionCriteria: DeliveryConditionCriteria!
  field: DeliveryConditionField!
  id: ID!
  operator: DeliveryConditionOperator!
}

union DeliveryConditionCriteria
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = MoneyV2 | Weight

enum DeliveryConditionField
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TOTAL_WEIGHT
  TOTAL_PRICE
}

enum DeliveryConditionOperator
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  GREATER_THAN_OR_EQUAL_TO
  LESS_THAN_OR_EQUAL_TO
}

type DeliveryCountry implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: DeliveryCountryCodeOrRestOfWorld!
  id: ID!
  name: String!
  provinces: [DeliveryProvince!]!
  translatedName: String!
}

type DeliveryCountryAndZone
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  country: DeliveryCountry!
  zone: String!
}

type DeliveryCountryCodeOrRestOfWorld
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCode: CountryCode
  restOfWorld: Boolean!
}

type DeliveryCountryCodesOrRestOfWorld
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCodes: [CountryCode!]!
  restOfWorld: Boolean!
}

type DeliveryLocationGroup implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  locations(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: LocationSortKeys = NAME, query: String, includeLegacy: Boolean = false, includeInactive: Boolean = false): LocationConnection!
}

type DeliveryLocationGroupZone
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  methodDefinitionCounts: DeliveryMethodDefinitionCounts!
  methodDefinitions(eligible: Boolean, type: DeliveryMethodDefinitionType, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MethodDefinitionSortKeys = ID): DeliveryMethodDefinitionConnection!
  zone: DeliveryZone!
}

type DeliveryLocationGroupZoneConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DeliveryLocationGroupZoneEdge!]!
  nodes: [DeliveryLocationGroupZone!]!
  pageInfo: PageInfo!
}

type DeliveryLocationGroupZoneEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DeliveryLocationGroupZone!
}

type DeliveryMethod implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  maxDeliveryDateTime: DateTime
  methodType: DeliveryMethodType!
  minDeliveryDateTime: DateTime
}

type DeliveryMethodDefinition implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  active: Boolean!
  description: String
  id: ID!
  methodConditions: [DeliveryCondition!]!
  name: String!
  rateProvider: DeliveryRateProvider!
}

type DeliveryMethodDefinitionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DeliveryMethodDefinitionEdge!]!
  nodes: [DeliveryMethodDefinition!]!
  pageInfo: PageInfo!
}

type DeliveryMethodDefinitionCounts
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  participantDefinitionsCount: Int!
  rateDefinitionsCount: Int!
}

type DeliveryMethodDefinitionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DeliveryMethodDefinition!
}

enum DeliveryMethodDefinitionType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  MERCHANT
  PARTICIPANT
}

enum DeliveryMethodType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SHIPPING
  PICK_UP
  NONE
  RETAIL
  LOCAL
}

type DeliveryParticipant implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adaptToNewServicesFlag: Boolean!
  carrierService: DeliveryCarrierService!
  fixedFee: MoneyV2
  id: ID!
  participantServices: [DeliveryParticipantService!]!
  percentageOfRateFee: Float!
}

type DeliveryParticipantService
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  active: Boolean!
  name: String!
}

type DeliveryProductVariantsCount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  capped: Boolean!
  count: Int!
}

type DeliveryProfile implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  activeMethodDefinitionsCount: Int!
  default: Boolean!
  id: ID!
  legacyMode: Boolean!
  locationsWithoutRatesCount: Int!
  name: String!
  originLocationCount: Int!
  productVariantsCountV2: DeliveryProductVariantsCount!
  profileItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): DeliveryProfileItemConnection!
  profileLocationGroups: [DeliveryProfileLocationGroup!]!
  sellingPlanGroups(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SellingPlanGroupConnection!
  unassignedLocations: [Location!]!
  zoneCountryCount: Int!
}

type DeliveryProfileItem implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  product: Product!
  variants(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ProductVariantConnection!
}

type DeliveryProfileItemConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DeliveryProfileItemEdge!]!
  nodes: [DeliveryProfileItem!]!
  pageInfo: PageInfo!
}

type DeliveryProfileItemEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DeliveryProfileItem!
}

type DeliveryProfileLocationGroup
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countriesInAnyZone: [DeliveryCountryAndZone!]!
  locationGroup: DeliveryLocationGroup!
  locationGroupZones(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): DeliveryLocationGroupZoneConnection!
}

type DeliveryProvince implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: String!
  id: ID!
  name: String!
  translatedName: String!
}

type DeliveryRateDefinition implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  price: MoneyV2!
}

union DeliveryRateProvider
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = DeliveryParticipant | DeliveryRateDefinition

type DeliveryZone implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countries: [DeliveryCountry!]!
  id: ID!
  name: String!
}

enum DigitalWallet
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  APPLE_PAY
  ANDROID_PAY
  GOOGLE_PAY
  SHOPIFY_PAY
}

type DiscountAllocation
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocatedAmountSet: MoneyBag!
  discountApplication: DiscountApplication!
}

interface DiscountApplication
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocationMethod: DiscountApplicationAllocationMethod!
  index: Int!
  targetSelection: DiscountApplicationTargetSelection!
  targetType: DiscountApplicationTargetType!
  value: PricingValue!
}

enum DiscountApplicationAllocationMethod
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACROSS
  EACH
}

type DiscountApplicationConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DiscountApplicationEdge!]!
  nodes: [DiscountApplication!]!
  pageInfo: PageInfo!
}

type DiscountApplicationEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DiscountApplication!
}

enum DiscountApplicationTargetSelection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ALL
  ENTITLED
  EXPLICIT
}

enum DiscountApplicationTargetType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  LINE_ITEM
  SHIPPING_LINE
}

type DiscountCodeApplication implements DiscountApplication
  @join__implements(graph: CUSTOMER, interface: "DiscountApplication")
  @join__implements(graph: ORDER, interface: "DiscountApplication")
  @join__implements(graph: PRODUCT, interface: "DiscountApplication")
  @join__implements(graph: SHOP, interface: "DiscountApplication")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocationMethod: DiscountApplicationAllocationMethod!
  code: String!
  index: Int!
  targetSelection: DiscountApplicationTargetSelection!
  targetType: DiscountApplicationTargetType!
  value: PricingValue!
}

enum DiscountTargetType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  LINE_ITEM
  SHIPPING_LINE
}

enum DiscountType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  MANUAL
  CODE_DISCOUNT
}

interface DisplayableError
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  field: [String!]
  message: String!
}

enum DisputeStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NEEDS_RESPONSE
  UNDER_REVIEW
  CHARGE_REFUNDED
  ACCEPTED
  WON
  LOST
}

enum DisputeType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CHARGEBACK
  INQUIRY
}

type Domain implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  host: String!
  id: ID!
  localization: DomainLocalization
  marketWebPresence: MarketWebPresence
  sslEnabled: Boolean!
  url: URL!
}

type DomainLocalization
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alternateLocales: [String!]!
  country: String
  defaultLocale: String!
}

type DraftOrder implements CommentEventSubject & HasEvents & HasLocalizationExtensions & HasMetafields & LegacyInteroperability & Navigable & Node
  @join__implements(graph: ORDER, interface: "CommentEventSubject")
  @join__implements(graph: ORDER, interface: "HasEvents")
  @join__implements(graph: ORDER, interface: "HasLocalizationExtensions")
  @join__implements(graph: ORDER, interface: "HasMetafields")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Navigable")
  @join__implements(graph: ORDER, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  appliedDiscount: DraftOrderAppliedDiscount @join__field(graph: ORDER)
  billingAddress: MailingAddress @join__field(graph: ORDER)
  billingAddressMatchesShippingAddress: Boolean! @join__field(graph: ORDER)
  completedAt: DateTime @join__field(graph: ORDER)
  createdAt: DateTime! @join__field(graph: ORDER)
  currencyCode: CurrencyCode! @join__field(graph: ORDER)
  customAttributes: [Attribute!]! @join__field(graph: ORDER)
  customer: Customer @join__field(graph: ORDER)
  defaultCursor: String! @join__field(graph: ORDER)
  email: String @join__field(graph: ORDER)
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection! @join__field(graph: ORDER)
  hasTimelineComment: Boolean! @join__field(graph: ORDER)
  invoiceEmailTemplateSubject: String! @join__field(graph: ORDER)
  invoiceSentAt: DateTime @join__field(graph: ORDER)
  invoiceUrl: URL @join__field(graph: ORDER)
  legacyResourceId: UnsignedInt64! @join__field(graph: ORDER)
  lineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): DraftOrderLineItemConnection! @join__field(graph: ORDER)
  lineItemsSubtotalPrice: MoneyBag! @join__field(graph: ORDER)
  localizationExtensions(countryCodes: [CountryCode!], purposes: [LocalizationExtensionPurpose!], first: Int, after: String, last: Int, before: String, reverse: Boolean = false): LocalizationExtensionConnection! @join__field(graph: ORDER)
  marketName: String! @join__field(graph: ORDER)
  marketRegionCountryCode: CountryCode! @join__field(graph: ORDER)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: ORDER)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: ORDER)
  name: String! @join__field(graph: ORDER)
  note2: String @join__field(graph: ORDER)
  order: Order @join__field(graph: ORDER)
  paymentTerms: PaymentTerms @join__field(graph: ORDER)
  phone: String @join__field(graph: ORDER)
  presentmentCurrencyCode: CurrencyCode! @join__field(graph: ORDER)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: ORDER)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: ORDER)
  purchasingEntity: PurchasingEntity @join__field(graph: ORDER)
  ready: Boolean! @join__field(graph: ORDER)
  reserveInventoryUntil: DateTime @join__field(graph: ORDER)
  shippingAddress: MailingAddress @join__field(graph: ORDER)
  shippingLine: ShippingLine @join__field(graph: ORDER)
  status: DraftOrderStatus! @join__field(graph: ORDER)
  subtotalPrice: Money! @join__field(graph: ORDER)
  subtotalPriceSet: MoneyBag! @join__field(graph: ORDER)
  tags: [String!]! @join__field(graph: ORDER)
  taxExempt: Boolean! @join__field(graph: ORDER)
  taxLines: [TaxLine!]! @join__field(graph: ORDER)
  taxesIncluded: Boolean! @join__field(graph: ORDER)
  totalDiscountsSet: MoneyBag! @join__field(graph: ORDER)
  totalLineItemsPriceSet: MoneyBag! @join__field(graph: ORDER)
  totalPrice: Money! @join__field(graph: ORDER)
  totalPriceSet: MoneyBag! @join__field(graph: ORDER)
  totalShippingPrice: Money! @join__field(graph: ORDER)
  totalShippingPriceSet: MoneyBag! @join__field(graph: ORDER)
  totalTax: Money! @join__field(graph: ORDER)
  totalTaxSet: MoneyBag! @join__field(graph: ORDER)
  totalWeight: UnsignedInt64! @join__field(graph: ORDER)
  updatedAt: DateTime! @join__field(graph: ORDER)
  visibleToCustomer: Boolean! @join__field(graph: ORDER)
}

type DraftOrderAppliedDiscount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amountSet: MoneyBag!
  amountV2: MoneyV2!
  description: String!
  title: String
  value: Float!
  valueType: DraftOrderAppliedDiscountType!
}

enum DraftOrderAppliedDiscountType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  FIXED_AMOUNT
  PERCENTAGE
}

type DraftOrderConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DraftOrderEdge!]!
  nodes: [DraftOrder!]!
  pageInfo: PageInfo!
}

type DraftOrderEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DraftOrder!
}

type DraftOrderLineItem implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appliedDiscount: DraftOrderAppliedDiscount
  custom: Boolean!
  customAttributes: [Attribute!]!
  customAttributesV2: [TypedAttribute!]!
  discountedTotal: Money!
  discountedTotalSet: MoneyBag!
  discountedUnitPrice: Money!
  discountedUnitPriceSet: MoneyBag!
  fulfillmentService: FulfillmentService
  id: ID!
  image: Image
  isGiftCard: Boolean!
  name: String!
  originalTotal: Money!
  originalTotalSet: MoneyBag!
  originalUnitPrice: Money!
  originalUnitPriceSet: MoneyBag!
  product: Product
  quantity: Int!
  requiresShipping: Boolean!
  sku: String
  taxLines: [TaxLine!]!
  taxable: Boolean!
  title: String!
  totalDiscount: Money!
  totalDiscountSet: MoneyBag!
  variant: ProductVariant
  variantTitle: String
  vendor: String
  weight: Weight
}

type DraftOrderLineItemConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [DraftOrderLineItemEdge!]!
  nodes: [DraftOrderLineItem!]!
  pageInfo: PageInfo!
}

type DraftOrderLineItemEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: DraftOrderLineItem!
}

enum DraftOrderSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NUMBER
  UPDATED_AT
  STATUS
  TOTAL_PRICE
  CUSTOMER_NAME
  ID
  RELEVANCE
}

enum DraftOrderStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  COMPLETED
  INVOICE_SENT
  OPEN
}

type Duty implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCodeOfOrigin: CountryCode
  harmonizedSystemCode: String
  id: ID!
  price: MoneyBag!
  taxLines: [TaxLine!]!
}

type EditableProperty
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  locked: Boolean!
  reason: FormattedString
}

interface Event
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appTitle: String
  attributeToApp: Boolean!
  attributeToUser: Boolean!
  createdAt: DateTime!
  criticalAlert: Boolean!
  id: ID!
  message: FormattedString!
}

type EventConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [EventEdge!]!
  nodes: [Event!]!
  pageInfo: PageInfo!
}

type EventEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Event!
}

enum EventSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  ID
  RELEVANCE
}

type FailedRequirement
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  action: NavigationItem
  message: String!
}

interface File
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alt: String
  createdAt: DateTime!
  fileErrors: [FileError!]!
  fileStatus: FileStatus!
  preview: MediaPreviewImage
}

type FileError
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: FileErrorCode!
  details: String
  message: String!
}

enum FileErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UNKNOWN
  INVALID_SIGNED_URL
  IMAGE_DOWNLOAD_FAILURE
  IMAGE_PROCESSING_FAILURE
  MEDIA_TIMEOUT_ERROR
  EXTERNAL_VIDEO_NOT_FOUND
  EXTERNAL_VIDEO_UNLISTED
  EXTERNAL_VIDEO_INVALID_ASPECT_RATIO
  EXTERNAL_VIDEO_EMBED_DISABLED
  EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING
  GENERIC_FILE_DOWNLOAD_FAILURE
  GENERIC_FILE_INVALID_SIZE
  VIDEO_METADATA_READ_ERROR
  VIDEO_INVALID_FILETYPE_ERROR
  VIDEO_MIN_WIDTH_ERROR
  VIDEO_MAX_WIDTH_ERROR
  VIDEO_MIN_HEIGHT_ERROR
  VIDEO_MAX_HEIGHT_ERROR
  VIDEO_MIN_DURATION_ERROR
  VIDEO_MAX_DURATION_ERROR
  VIDEO_VALIDATION_ERROR
  MODEL3D_VALIDATION_ERROR
  MODEL3D_THUMBNAIL_GENERATION_ERROR
  MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR
  MODEL3D_GLB_OUTPUT_CREATION_ERROR
  MODEL3D_PROCESSING_FAILURE
  UNSUPPORTED_IMAGE_FILE_TYPE
  INVALID_IMAGE_FILE_SIZE
  INVALID_IMAGE_ASPECT_RATIO
  INVALID_IMAGE_RESOLUTION
  FILE_STORAGE_LIMIT_EXCEEDED
}

enum FileStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UPLOADED
  PROCESSING
  READY
  FAILED
}

type FilterOption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  label: String!
  value: String!
}

scalar FormattedString
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

type Fulfillment implements LegacyInteroperability & Node
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  deliveredAt: DateTime
  displayStatus: FulfillmentDisplayStatus
  estimatedDeliveryAt: DateTime
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: FulfillmentEventSortKeys = HAPPENED_AT): FulfillmentEventConnection!
  fulfillmentLineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentLineItemConnection!
  fulfillmentOrders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentOrderConnection!
  id: ID!
  inTransitAt: DateTime
  legacyResourceId: UnsignedInt64!
  location: Location
  name: String!
  order: Order!
  originAddress: FulfillmentOriginAddress
  requiresShipping: Boolean!
  service: FulfillmentService
  status: FulfillmentStatus!
  totalQuantity: Int!
  trackingInfo(first: Int): [FulfillmentTrackingInfo!]!
  updatedAt: DateTime!
}

type FulfillmentConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentEdge!]!
  nodes: [Fulfillment!]!
  pageInfo: PageInfo!
}

enum FulfillmentDisplayStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ATTEMPTED_DELIVERY
  CANCELED
  CONFIRMED
  DELIVERED
  FAILURE
  FULFILLED
  IN_TRANSIT
  LABEL_PRINTED
  LABEL_PURCHASED
  LABEL_VOIDED
  MARKED_AS_FULFILLED
  NOT_DELIVERED
  OUT_FOR_DELIVERY
  READY_FOR_PICKUP
  PICKED_UP
  SUBMITTED
}

type FulfillmentEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Fulfillment!
}

type FulfillmentEvent implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  happenedAt: DateTime!
  id: ID!
  status: FulfillmentEventStatus!
}

type FulfillmentEventConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentEventEdge!]!
  nodes: [FulfillmentEvent!]!
  pageInfo: PageInfo!
}

type FulfillmentEventEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentEvent!
}

enum FulfillmentEventSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  HAPPENED_AT
  ID
  RELEVANCE
}

enum FulfillmentEventStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  LABEL_PURCHASED
  LABEL_PRINTED
  READY_FOR_PICKUP
  CONFIRMED
  IN_TRANSIT
  OUT_FOR_DELIVERY
  ATTEMPTED_DELIVERY
  DELIVERED
  FAILURE
}

type FulfillmentHold
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  reason: FulfillmentHoldReason!
  reasonNotes: String
}

enum FulfillmentHoldReason
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  AWAITING_PAYMENT
  HIGH_RISK_OF_FRAUD
  INCORRECT_ADDRESS
  INVENTORY_OUT_OF_STOCK
  UNKNOWN_DELIVERY_DATE
  OTHER
}

type FulfillmentLineItem implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  discountedTotalSet: MoneyBag!
  id: ID!
  lineItem: LineItem!
  originalTotalSet: MoneyBag!
  quantity: Int
}

type FulfillmentLineItemConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentLineItemEdge!]!
  nodes: [FulfillmentLineItem!]!
  pageInfo: PageInfo!
}

type FulfillmentLineItemEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentLineItem!
}

type FulfillmentOrder implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  assignedLocation: FulfillmentOrderAssignedLocation!
  deliveryMethod: DeliveryMethod
  destination: FulfillmentOrderDestination
  fulfillAt: DateTime
  fulfillBy: DateTime
  fulfillmentHolds: [FulfillmentHold!]!
  fulfillments(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentConnection!
  id: ID!
  internationalDuties: FulfillmentOrderInternationalDuties
  lineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentOrderLineItemConnection!
  locationsForMove(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentOrderLocationForMoveConnection!
  merchantRequests(kind: FulfillmentOrderMerchantRequestKind, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): FulfillmentOrderMerchantRequestConnection!
  order: Order!
  requestStatus: FulfillmentOrderRequestStatus!
  status: FulfillmentOrderStatus!
  supportedActions: [FulfillmentOrderSupportedAction!]!
}

enum FulfillmentOrderAction
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATE_FULFILLMENT
  REQUEST_FULFILLMENT
  CANCEL_FULFILLMENT_ORDER
  MOVE
  REQUEST_CANCELLATION
  MARK_AS_OPEN
  RELEASE_HOLD
  HOLD
  EXTERNAL
}

type FulfillmentOrderAssignedLocation
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  countryCode: CountryCode!
  location: Location
  name: String!
  phone: String
  province: String
  zip: String
}

enum FulfillmentOrderAssignmentStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CANCELLATION_REQUESTED
  FULFILLMENT_REQUESTED
  FULFILLMENT_ACCEPTED
}

type FulfillmentOrderConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentOrderEdge!]!
  nodes: [FulfillmentOrder!]!
  pageInfo: PageInfo!
}

type FulfillmentOrderDestination implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  company: String
  countryCode: CountryCode
  email: String
  firstName: String
  id: ID!
  lastName: String
  phone: String
  province: String
  zip: String
}

type FulfillmentOrderEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentOrder!
}

type FulfillmentOrderInternationalDuties
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  incoterm: String!
}

type FulfillmentOrderLineItem implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  lineItem: LineItem!
  remainingQuantity: Int!
  totalQuantity: Int!
  warnings: [FulfillmentOrderLineItemWarning!]!
}

type FulfillmentOrderLineItemConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentOrderLineItemEdge!]!
  nodes: [FulfillmentOrderLineItem!]!
  pageInfo: PageInfo!
}

type FulfillmentOrderLineItemEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentOrderLineItem!
}

type FulfillmentOrderLineItemWarning
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  title: String
}

type FulfillmentOrderLocationForMove
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  location: Location!
  message: String
  movable: Boolean!
}

type FulfillmentOrderLocationForMoveConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentOrderLocationForMoveEdge!]!
  nodes: [FulfillmentOrderLocationForMove!]!
  pageInfo: PageInfo!
}

type FulfillmentOrderLocationForMoveEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentOrderLocationForMove!
}

type FulfillmentOrderMerchantRequest implements Node
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  kind: FulfillmentOrderMerchantRequestKind!
  message: String
  requestOptions: JSON
  responseData: JSON
  sentAt: DateTime!
}

type FulfillmentOrderMerchantRequestConnection
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [FulfillmentOrderMerchantRequestEdge!]!
  nodes: [FulfillmentOrderMerchantRequest!]!
  pageInfo: PageInfo!
}

type FulfillmentOrderMerchantRequestEdge
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: FulfillmentOrderMerchantRequest!
}

enum FulfillmentOrderMerchantRequestKind
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  FULFILLMENT_REQUEST
  CANCELLATION_REQUEST
}

enum FulfillmentOrderRequestStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UNSUBMITTED
  SUBMITTED
  ACCEPTED
  REJECTED
  CANCELLATION_REQUESTED
  CANCELLATION_ACCEPTED
  CANCELLATION_REJECTED
  CLOSED
}

enum FulfillmentOrderSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ID
  RELEVANCE
}

enum FulfillmentOrderStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  OPEN
  IN_PROGRESS
  CANCELLED
  INCOMPLETE
  CLOSED
  SCHEDULED
  ON_HOLD
}

type FulfillmentOrderSupportedAction
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  action: FulfillmentOrderAction!
  externalUrl: URL
}

type FulfillmentOriginAddress
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  countryCode: String!
  provinceCode: String
  zip: String
}

type FulfillmentService
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  callbackUrl: URL @join__field(graph: PRODUCT)
  fulfillmentOrdersOptIn: Boolean! @join__field(graph: PRODUCT)
  handle: String! @join__field(graph: PRODUCT)
  inventoryManagement: Boolean! @join__field(graph: PRODUCT)
  location: Location @join__field(graph: PRODUCT)
  permitsSkuSharing: Boolean! @join__field(graph: PRODUCT)
  productBased: Boolean! @join__field(graph: PRODUCT)
  serviceName: String! @join__field(graph: PRODUCT)
  type: FulfillmentServiceType! @join__field(graph: PRODUCT)
}

enum FulfillmentServiceType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  GIFT_CARD
  MANUAL
  THIRD_PARTY
}

enum FulfillmentStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SUCCESS
  CANCELLED
  ERROR
  FAILURE
}

type FulfillmentTrackingInfo
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  company: String
  number: String
  url: URL
}

type GenericFile implements File & Node
  @join__implements(graph: CUSTOMER, interface: "File")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "File")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "File")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "File")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alt: String
  createdAt: DateTime!
  fileErrors: [FileError!]!
  fileStatus: FileStatus!
  id: ID!
  mimeType: String
  originalFileSize: Int
  preview: MediaPreviewImage
  url: URL
}

interface HasEvents
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection!
}

interface HasLocalizationExtensions
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  localizationExtensions(countryCodes: [CountryCode!], purposes: [LocalizationExtensionPurpose!], first: Int, after: String, last: Int, before: String, reverse: Boolean = false): LocalizationExtensionConnection!
}

interface HasMetafieldDefinitions
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection!
}

interface HasMetafields
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  metafield(namespace: String!, key: String!): Metafield
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection!
  privateMetafield(namespace: String!, key: String!): PrivateMetafield
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection!
}

interface HasPublishedTranslations
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  translations(locale: String!, marketId: ID): [PublishedTranslation!]!
}

scalar HTML
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

type Image implements HasMetafields
  @join__implements(graph: CUSTOMER, interface: "HasMetafields")
  @join__implements(graph: ORDER, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: SHOP, interface: "HasMetafields")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  altText: String
  height: Int
  id: ID
  metafield(namespace: String!, key: String!): Metafield
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection!
  privateMetafield(namespace: String!, key: String!): PrivateMetafield
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection!
  url(transform: ImageTransformInput): URL!
  width: Int
}

type ImageConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ImageEdge!]!
  nodes: [Image!]!
  pageInfo: PageInfo!
}

enum ImageContentType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PNG
  JPG
  WEBP
}

type ImageEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Image!
}

input ImageInput
  @join__type(graph: PRODUCT)
{
  id: ID
  altText: String
  src: String
}

input ImageTransformInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  crop: CropRegion
  maxWidth: Int
  maxHeight: Int
  scale: Int = 1
  preferredContentType: ImageContentType
}

type InventoryItem implements LegacyInteroperability & Node
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCodeOfOrigin: CountryCode
  countryHarmonizedSystemCodes(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): CountryHarmonizedSystemCodeConnection!
  createdAt: DateTime!
  duplicateSkuCount: Int!
  harmonizedSystemCode: String
  id: ID!
  inventoryHistoryUrl: URL
  inventoryLevel(locationId: ID!): InventoryLevel
  inventoryLevels(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, query: String): InventoryLevelConnection!
  legacyResourceId: UnsignedInt64!
  locationsCount: Int!
  provinceCodeOfOrigin: String
  requiresShipping: Boolean!
  sku: String
  tracked: Boolean!
  trackedEditable: EditableProperty!
  unitCost: MoneyV2
  updatedAt: DateTime!
  variant: ProductVariant!
}

input InventoryItemInput
  @join__type(graph: PRODUCT)
{
  cost: Decimal
  tracked: Boolean
}

type InventoryLevel implements Node
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  available: Int! @join__field(graph: PRODUCT)
  canDeactivate: Boolean! @join__field(graph: PRODUCT)
  createdAt: DateTime! @join__field(graph: PRODUCT)
  deactivationAlert: String @join__field(graph: PRODUCT)
  deactivationAlertHtml: FormattedString @join__field(graph: PRODUCT)
  incoming: Int! @join__field(graph: PRODUCT)
  item: InventoryItem! @join__field(graph: PRODUCT)
  location: Location! @join__field(graph: PRODUCT)
  updatedAt: DateTime! @join__field(graph: PRODUCT)
}

type InventoryLevelConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [InventoryLevelEdge!]!
  nodes: [InventoryLevel!]!
  pageInfo: PageInfo!
}

type InventoryLevelEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: InventoryLevel!
}

input InventoryLevelInput
  @join__type(graph: PRODUCT)
{
  availableQuantity: Int!
  locationId: ID!
}

type Job
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  done: Boolean! @join__field(graph: SHOP)
}

scalar join__FieldSet

enum join__Graph {
  CUSTOMER @join__graph(name: "customer", url: "https://customer.admin.gshopper.com")
  ORDER @join__graph(name: "order", url: "https://order.admin.gshopper.com")
  PRODUCT @join__graph(name: "product", url: "https://product.admin.gshopper.com")
  SHOP @join__graph(name: "shop", url: "https://shop.admin.gshopper.com")
}

scalar JSON
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

enum LanguageCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  AF
  AK
  AM
  AR
  AS
  AZ
  BE
  BG
  BM
  BN
  BO
  BR
  BS
  CA
  CE
  CS
  CU
  CY
  DA
  DE
  DZ
  EE
  EL
  EN
  EO
  ES
  ET
  EU
  FA
  FF
  FI
  FO
  FR
  FY
  GA
  GD
  GL
  GU
  GV
  HA
  HE
  HI
  HR
  HU
  HY
  IA
  ID
  IG
  II
  IS
  IT
  JA
  JV
  KA
  KI
  KK
  KL
  KM
  KN
  KO
  KS
  KU
  KW
  KY
  LB
  LG
  LN
  LO
  LT
  LU
  LV
  MG
  MI
  MK
  ML
  MN
  MR
  MS
  MT
  MY
  NB
  ND
  NE
  NL
  NN
  NO
  OM
  OR
  OS
  PA
  PL
  PS
  PT_BR
  PT_PT
  QU
  RM
  RN
  RO
  RU
  RW
  SD
  SE
  SG
  SI
  SK
  SL
  SN
  SO
  SQ
  SR
  SU
  SV
  SW
  TA
  TE
  TG
  TH
  TI
  TK
  TO
  TR
  TT
  UG
  UK
  UR
  UZ
  VI
  WO
  XH
  YI
  YO
  ZH_CN
  ZH_TW
  ZU
  ZH
  PT
  VO
}

interface LegacyInteroperability
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  legacyResourceId: UnsignedInt64!
}

type LimitedPendingOrderCount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  atMax: Boolean!
  count: Int!
}

type LineItem implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  contract: SubscriptionContract
  currentQuantity: Int!
  customAttributes: [Attribute!]!
  discountAllocations: [DiscountAllocation!]!
  discountedTotalSet: MoneyBag!
  discountedUnitPriceSet: MoneyBag!
  duties: [Duty!]!
  id: ID!
  image: Image
  merchantEditable: Boolean!
  name: String!
  nonFulfillableQuantity: Int!
  originalTotalSet: MoneyBag!
  originalUnitPriceSet: MoneyBag!
  product: Product
  quantity: Int!
  refundableQuantity: Int!
  requiresShipping: Boolean!
  restockable: Boolean!
  sellingPlan: LineItemSellingPlan
  sku: String
  staffMember: StaffMember
  taxLines(first: Int): [TaxLine!]!
  taxable: Boolean!
  title: String!
  totalDiscountSet: MoneyBag!
  unfulfilledDiscountedTotalSet: MoneyBag!
  unfulfilledOriginalTotalSet: MoneyBag!
  unfulfilledQuantity: Int!
  variant: ProductVariant
  variantTitle: String
  vendor: String
}

type LineItemConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [LineItemEdge!]!
  nodes: [LineItem!]!
  pageInfo: PageInfo!
}

type LineItemEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: LineItem!
}

type LineItemSellingPlan
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  name: String!
  sellingPlanId: ID
}

type Link implements HasPublishedTranslations
  @join__implements(graph: CUSTOMER, interface: "HasPublishedTranslations")
  @join__implements(graph: ORDER, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: SHOP, interface: "HasPublishedTranslations")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  label: String!
  translations(locale: String!, marketId: ID): [PublishedTranslation!]!
  url: URL!
}

scalar link__Import

enum link__Purpose {
  """
  `SECURITY` features provide metadata necessary to securely resolve fields.
  """
  SECURITY

  """
  `EXECUTION` features provide metadata necessary for operation execution.
  """
  EXECUTION
}

type LocalizationExtension
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countryCode: CountryCode!
  key: LocalizationExtensionKey!
  purpose: LocalizationExtensionPurpose!
  title: String!
  value: String!
}

type LocalizationExtensionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [LocalizationExtensionEdge!]!
  nodes: [LocalizationExtension!]!
  pageInfo: PageInfo!
}

type LocalizationExtensionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: LocalizationExtension!
}

enum LocalizationExtensionKey
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TAX_CREDENTIAL_BR
  SHIPPING_CREDENTIAL_BR
  SHIPPING_CREDENTIAL_CN
  TAX_CREDENTIAL_IT
  TAX_EMAIL_IT
  SHIPPING_CREDENTIAL_KR
}

enum LocalizationExtensionPurpose
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SHIPPING
  TAX
}

type Location implements HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "HasMetafieldDefinitions")
  @join__implements(graph: CUSTOMER, interface: "HasMetafields")
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "HasMetafieldDefinitions")
  @join__implements(graph: ORDER, interface: "HasMetafields")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "HasMetafieldDefinitions")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "HasMetafieldDefinitions")
  @join__implements(graph: SHOP, interface: "HasMetafields")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  activatable: Boolean!
  address: LocationAddress!
  addressVerified: Boolean!
  deactivatable: Boolean!
  deactivatedAt: String
  deletable: Boolean!
  fulfillmentService: FulfillmentService
  fulfillsOnlineOrders: Boolean!
  hasActiveInventory: Boolean!
  hasUnfulfilledOrders: Boolean!
  id: ID!
  inventoryLevel(inventoryItemId: ID!): InventoryLevel
  inventoryLevels(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, query: String): InventoryLevelConnection!
  isActive: Boolean!
  legacyResourceId: UnsignedInt64!
  metafield(namespace: String!, key: String!): Metafield
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection!
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection!
  name: String!
  privateMetafield(namespace: String!, key: String!): PrivateMetafield
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection!
  shipsInventory: Boolean!
  suggestedAddresses: [LocationSuggestedAddress!]!
}

type LocationAddress
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  country: String
  countryCode: String
  formatted: [String!]!
  latitude: Float
  longitude: Float
  phone: String
  province: String
  provinceCode: String
  zip: String
}

type LocationConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [LocationEdge!]!
  nodes: [Location!]!
  pageInfo: PageInfo!
}

type LocationEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Location!
}

enum LocationSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NAME
  ID
  RELEVANCE
}

type LocationSuggestedAddress
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  country: String
  countryCode: CountryCode
  formatted: [String!]!
  province: String
  provinceCode: String
  zip: String
}

type MailingAddress implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  company: String
  coordinatesValidated: Boolean!
  country: String
  countryCodeV2: CountryCode
  firstName: String
  formattedArea: String
  id: ID!
  lastName: String
  latitude: Float
  longitude: Float
  name: String
  phone: String
  province: String
  provinceCode: String
  zip: String
}

input MailingAddressInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  company: String
  countryCode: CountryCode
  firstName: String
  lastName: String
  phone: String
  provinceCode: String
  zip: String
}

type ManualDiscountApplication implements DiscountApplication
  @join__implements(graph: CUSTOMER, interface: "DiscountApplication")
  @join__implements(graph: ORDER, interface: "DiscountApplication")
  @join__implements(graph: PRODUCT, interface: "DiscountApplication")
  @join__implements(graph: SHOP, interface: "DiscountApplication")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocationMethod: DiscountApplicationAllocationMethod!
  description: String
  index: Int!
  targetSelection: DiscountApplicationTargetSelection!
  targetType: DiscountApplicationTargetType!
  title: String!
  value: PricingValue!
}

type Market implements Node
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  currencySettings: MarketCurrencySettings! @join__field(graph: SHOP)
  enabled: Boolean! @join__field(graph: SHOP)
  name: String! @join__field(graph: SHOP)
  priceList: PriceList @join__field(graph: SHOP)
  primary: Boolean! @join__field(graph: SHOP)
  regions(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MarketRegionConnection! @join__field(graph: SHOP)
  webPresence: MarketWebPresence @join__field(graph: SHOP)
}

type MarketCurrencySettings
  @join__type(graph: SHOP)
{
  baseCurrency: CurrencySetting!
  localCurrencies: Boolean!
}

enum MarketingChannel
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SEARCH
  DISPLAY
  SOCIAL
  EMAIL
  REFERRAL
}

type MarketingEvent implements LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App!
  channel: MarketingChannel
  description: String
  endedAt: DateTime
  id: ID!
  legacyResourceId: UnsignedInt64!
  manageUrl: URL
  previewUrl: URL
  remoteId: String
  scheduledToEndAt: DateTime
  sourceAndMedium: String!
  startedAt: DateTime!
  type: MarketingTactic!
  utmCampaign: String
  utmMedium: String
  utmSource: String
}

enum MarketingTactic
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ABANDONED_CART
  AD
  AFFILIATE
  LINK
  LOYALTY
  MESSAGE
  NEWSLETTER
  NOTIFICATION
  POST
  RETARGETING
  TRANSACTIONAL
  SEO
  DIRECT
  STOREFRONT_APP
}

interface MarketRegion
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  name: String!
}

type MarketRegionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [MarketRegionEdge!]!
  nodes: [MarketRegion!]!
  pageInfo: PageInfo!
}

type MarketRegionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: MarketRegion!
}

type MarketWebPresence implements Node
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  alternateLocales: [String!]! @join__field(graph: SHOP)
  defaultLocale: String! @join__field(graph: SHOP)
  domain: Domain @join__field(graph: SHOP)
  market: Market! @join__field(graph: SHOP)
  rootUrls: [MarketWebPresenceRootUrl!]! @join__field(graph: SHOP)
  subfolderSuffix: String @join__field(graph: SHOP)
}

type MarketWebPresenceRootUrl
  @join__type(graph: SHOP)
{
  locale: String!
  url: URL!
}

interface Media
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alt: String
  mediaContentType: MediaContentType!
  mediaErrors: [MediaError!]!
  mediaWarnings: [MediaWarning!]!
  preview: MediaPreviewImage
  status: MediaStatus!
}

type MediaConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [MediaEdge!]!
  nodes: [Media!]!
  pageInfo: PageInfo!
}

enum MediaContentType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  VIDEO
  EXTERNAL_VIDEO
  MODEL_3D
  IMAGE
}

type MediaEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Media!
}

type MediaError
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: MediaErrorCode!
  details: String
  message: String!
}

enum MediaErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UNKNOWN
  INVALID_SIGNED_URL
  IMAGE_DOWNLOAD_FAILURE
  IMAGE_PROCESSING_FAILURE
  MEDIA_TIMEOUT_ERROR
  EXTERNAL_VIDEO_NOT_FOUND
  EXTERNAL_VIDEO_UNLISTED
  EXTERNAL_VIDEO_INVALID_ASPECT_RATIO
  EXTERNAL_VIDEO_EMBED_DISABLED
  EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING
  GENERIC_FILE_DOWNLOAD_FAILURE
  GENERIC_FILE_INVALID_SIZE
  VIDEO_METADATA_READ_ERROR
  VIDEO_INVALID_FILETYPE_ERROR
  VIDEO_MIN_WIDTH_ERROR
  VIDEO_MAX_WIDTH_ERROR
  VIDEO_MIN_HEIGHT_ERROR
  VIDEO_MAX_HEIGHT_ERROR
  VIDEO_MIN_DURATION_ERROR
  VIDEO_MAX_DURATION_ERROR
  VIDEO_VALIDATION_ERROR
  MODEL3D_VALIDATION_ERROR
  MODEL3D_THUMBNAIL_GENERATION_ERROR
  MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR
  MODEL3D_GLB_OUTPUT_CREATION_ERROR
  MODEL3D_PROCESSING_FAILURE
  UNSUPPORTED_IMAGE_FILE_TYPE
  INVALID_IMAGE_FILE_SIZE
  INVALID_IMAGE_ASPECT_RATIO
  INVALID_IMAGE_RESOLUTION
  FILE_STORAGE_LIMIT_EXCEEDED
}

type MediaImage implements File & Media & Node
  @join__implements(graph: CUSTOMER, interface: "File")
  @join__implements(graph: CUSTOMER, interface: "Media")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "File")
  @join__implements(graph: ORDER, interface: "Media")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "File")
  @join__implements(graph: PRODUCT, interface: "Media")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "File")
  @join__implements(graph: SHOP, interface: "Media")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alt: String
  createdAt: DateTime!
  fileErrors: [FileError!]!
  fileStatus: FileStatus!
  id: ID!
  image: Image
  mediaContentType: MediaContentType!
  mediaErrors: [MediaError!]!
  mediaWarnings: [MediaWarning!]!
  mimeType: String
  originalSource: MediaImageOriginalSource
  preview: MediaPreviewImage
  status: MediaStatus!
}

type MediaImageOriginalSource
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  fileSize: Int
}

type MediaPreviewImage
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  image: Image
  status: MediaPreviewImageStatus!
}

enum MediaPreviewImageStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UPLOADED
  PROCESSING
  READY
  FAILED
}

enum MediaStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UPLOADED
  PROCESSING
  READY
  FAILED
}

type MediaUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: MediaUserErrorCode
  field: [String!]
  message: String!
}

enum MediaUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  INVALID
  BLANK
  VIDEO_VALIDATION_ERROR
  MODEL3D_VALIDATION_ERROR
  VIDEO_THROTTLE_EXCEEDED
  MODEL3D_THROTTLE_EXCEEDED
  PRODUCT_MEDIA_LIMIT_EXCEEDED
  SHOP_MEDIA_LIMIT_EXCEEDED
  PRODUCT_DOES_NOT_EXIST
  MEDIA_DOES_NOT_EXIST
  MEDIA_DOES_NOT_EXIST_ON_PRODUCT
  TOO_MANY_MEDIA_PER_INPUT_PAIR
  MAXIMUM_VARIANT_MEDIA_PAIRS_EXCEEDED
  INVALID_MEDIA_TYPE
  PRODUCT_VARIANT_SPECIFIED_MULTIPLE_TIMES
  PRODUCT_VARIANT_DOES_NOT_EXIST_ON_PRODUCT
  NON_READY_MEDIA
  PRODUCT_VARIANT_ALREADY_HAS_MEDIA
  MEDIA_IS_NOT_ATTACHED_TO_VARIANT
  MEDIA_CANNOT_BE_MODIFIED
}

type MediaWarning
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: MediaWarningCode!
  message: String
}

enum MediaWarningCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  MODEL_SMALL_PHYSICAL_SIZE
  MODEL_LARGE_PHYSICAL_SIZE
}

type MerchantApprovalSignals
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  identityVerified: Boolean!
  verifiedByShopify: Boolean!
}

type Metafield implements LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  definition: MetafieldDefinition
  description: String
  id: ID!
  key: String!
  legacyResourceId: UnsignedInt64!
  namespace: String!
  owner: HasMetafields!
  ownerType: MetafieldOwnerType!
  reference: MetafieldReference
  references(first: Int, after: String, last: Int, before: String): MetafieldReferenceConnection
  type: String!
  updatedAt: DateTime!
  value: String!
}

type MetafieldConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [MetafieldEdge!]!
  nodes: [Metafield!]!
  pageInfo: PageInfo!
}

type MetafieldDefinition implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  id: ID!
  key: String!
  metafields(validationStatus: MetafieldValidationStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection!
  metafieldsCount(validationStatus: MetafieldValidationStatus): Int!
  name: String!
  namespace: String!
  ownerType: MetafieldOwnerType!
  pinnedPosition: Int
  standardTemplate: StandardMetafieldDefinitionTemplate
  type: MetafieldDefinitionType!
  validationStatus: MetafieldDefinitionValidationStatus!
  validations: [MetafieldDefinitionValidation!]!
  visibleToStorefrontApi: Boolean!
}

type MetafieldDefinitionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [MetafieldDefinitionEdge!]!
  nodes: [MetafieldDefinition!]!
  pageInfo: PageInfo!
}

type MetafieldDefinitionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: MetafieldDefinition!
}

enum MetafieldDefinitionPinnedStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ANY
  PINNED
  UNPINNED
}

enum MetafieldDefinitionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ID
  NAME
  PINNED_POSITION
  RELEVANCE
}

type MetafieldDefinitionSupportedValidation
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  name: String!
  type: String!
}

type MetafieldDefinitionType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  category: String!
  name: String!
  supportedValidations: [MetafieldDefinitionSupportedValidation!]!
  supportsDefinitionMigrations: Boolean!
}

type MetafieldDefinitionValidation
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  name: String!
  type: String!
  value: String
}

enum MetafieldDefinitionValidationStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ALL_VALID
  IN_PROGRESS
  SOME_INVALID
}

type MetafieldEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Metafield!
}

input MetafieldInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  id: ID
  namespace: String
  key: String
  value: String
  type: String
}

enum MetafieldOwnerType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  API_PERMISSION
  ARTICLE
  BLOG
  COLLECTION
  CUSTOMER
  DISCOUNT
  DRAFTORDER
  LOCATION
  ORDER
  PAGE
  PRODUCT
  PRODUCTIMAGE
  PRODUCTVARIANT
  SHOP
}

union MetafieldReference
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = Collection | GenericFile | MediaImage | OnlineStorePage | Product | ProductVariant | Video

type MetafieldReferenceConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [MetafieldReferenceEdge!]!
  nodes: [MetafieldReference]!
  pageInfo: PageInfo!
}

type MetafieldReferenceEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: MetafieldReference
}

enum MetafieldValidationStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ANY
  VALID
  INVALID
}

enum MethodDefinitionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  RATE_PROVIDER_TYPE
  ID
  RELEVANCE
}

scalar Money
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

type MoneyBag
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  presentmentMoney: MoneyV2!
  shopMoney: MoneyV2!
}

type MoneyV2
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: Decimal!
  currencyCode: CurrencyCode!
}

input MoveInput
  @join__type(graph: PRODUCT)
{
  id: ID!
  newPosition: UnsignedInt64!
}

type Mutation
  @inContext
  @join__type(graph: CUSTOMER)
  @join__type(graph: PRODUCT)
{
  customerCreate(input: CustomerInput!): CustomerCreatePayload @join__field(graph: CUSTOMER)
  productAppendImages(input: ProductAppendImagesInput!): ProductAppendImagesPayload @join__field(graph: PRODUCT)
  productChangeStatus(productId: ID!, status: ProductStatus!): ProductChangeStatusPayload @join__field(graph: PRODUCT)
  productCreate(input: ProductInput!, media: [CreateMediaInput!]): ProductCreatePayload @join__field(graph: PRODUCT)
  productCreateMedia(productId: ID!, media: [CreateMediaInput!]!): ProductCreateMediaPayload @join__field(graph: PRODUCT)
  productDelete(input: ProductDeleteInput!): ProductDeletePayload @join__field(graph: PRODUCT)
  productDeleteImages(id: ID!, imageIds: [ID!]!): ProductDeleteImagesPayload @join__field(graph: PRODUCT)
  productDeleteMedia(productId: ID!, mediaIds: [ID!]!): ProductDeleteMediaPayload @join__field(graph: PRODUCT)
  productDuplicate(productId: ID!, newTitle: String!, newStatus: ProductStatus, includeImages: Boolean = false): ProductDuplicatePayload @join__field(graph: PRODUCT)
  productImageUpdate(productId: ID!, image: ImageInput!): ProductImageUpdatePayload @join__field(graph: PRODUCT)
  productJoinSellingPlanGroups(id: ID!, sellingPlanGroupIds: [ID!]!): ProductJoinSellingPlanGroupsPayload @join__field(graph: PRODUCT)
  productLeaveSellingPlanGroups(id: ID!, sellingPlanGroupIds: [ID!]!): ProductLeaveSellingPlanGroupsPayload @join__field(graph: PRODUCT)
  productReorderImages(id: ID!, moves: [MoveInput!]!): ProductReorderImagesPayload @join__field(graph: PRODUCT)
  productReorderMedia(id: ID!, moves: [MoveInput!]!): ProductReorderMediaPayload @join__field(graph: PRODUCT)
  productUpdate(input: ProductInput!): ProductUpdatePayload @join__field(graph: PRODUCT)
  productUpdateMedia(productId: ID!, media: [UpdateMediaInput!]!): ProductUpdateMediaPayload @join__field(graph: PRODUCT)
  productVariantAppendMedia(productId: ID!, variantMedia: [ProductVariantAppendMediaInput!]!): ProductVariantAppendMediaPayload @join__field(graph: PRODUCT)
  productVariantCreate(input: ProductVariantInput!): ProductVariantCreatePayload @join__field(graph: PRODUCT)
  productVariantDelete(id: ID!): ProductVariantDeletePayload @join__field(graph: PRODUCT)
  productVariantDetachMedia(productId: ID!, variantMedia: [ProductVariantDetachMediaInput!]!): ProductVariantDetachMediaPayload @join__field(graph: PRODUCT)
  productVariantJoinSellingPlanGroups(id: ID!, sellingPlanGroupIds: [ID!]!): ProductVariantJoinSellingPlanGroupsPayload @join__field(graph: PRODUCT)
  productVariantLeaveSellingPlanGroups(id: ID!, sellingPlanGroupIds: [ID!]!): ProductVariantLeaveSellingPlanGroupsPayload @join__field(graph: PRODUCT)
  productVariantUpdate(input: ProductVariantInput!): ProductVariantUpdatePayload @join__field(graph: PRODUCT)
  productVariantsBulkCreate(variants: [ProductVariantsBulkInput!]!, productId: ID!): ProductVariantsBulkCreatePayload @join__field(graph: PRODUCT)
  productVariantsBulkDelete(variantsIds: [ID!]!, productId: ID!): ProductVariantsBulkDeletePayload @join__field(graph: PRODUCT)
  productVariantsBulkReorder(productId: ID!, positions: [ProductVariantPositionInput!]!): ProductVariantsBulkReorderPayload @join__field(graph: PRODUCT)
  productVariantsBulkUpdate(variants: [ProductVariantsBulkInput!]!, productId: ID!): ProductVariantsBulkUpdatePayload @join__field(graph: PRODUCT)
}

interface Navigable
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  defaultCursor: String!
}

type NavigationItem
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: String!
  title: String!
  url: URL!
}

interface Node
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
}

type OnlineStorePage implements HasPublishedTranslations & Navigable & Node
  @join__implements(graph: CUSTOMER, interface: "HasPublishedTranslations")
  @join__implements(graph: CUSTOMER, interface: "Navigable")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "HasPublishedTranslations")
  @join__implements(graph: ORDER, interface: "Navigable")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "Navigable")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "HasPublishedTranslations")
  @join__implements(graph: SHOP, interface: "Navigable")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  defaultCursor: String!
  id: ID!
  translations(locale: String!, marketId: ID): [PublishedTranslation!]!
}

interface OnlineStorePreviewable
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  onlineStorePreviewUrl: URL
}

type Order implements CommentEventSubject & HasEvents & HasLocalizationExtensions & HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node
  @join__implements(graph: ORDER, interface: "CommentEventSubject")
  @join__implements(graph: ORDER, interface: "HasEvents")
  @join__implements(graph: ORDER, interface: "HasLocalizationExtensions")
  @join__implements(graph: ORDER, interface: "HasMetafieldDefinitions")
  @join__implements(graph: ORDER, interface: "HasMetafields")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  agreements(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, query: String): SalesAgreementConnection! @join__field(graph: ORDER)
  alerts: [ResourceAlert!]! @join__field(graph: ORDER)
  app: OrderApp @join__field(graph: ORDER)
  billingAddress: MailingAddress @join__field(graph: ORDER)
  billingAddressMatchesShippingAddress: Boolean! @join__field(graph: ORDER)
  canMarkAsPaid: Boolean! @join__field(graph: ORDER)
  canNotifyCustomer: Boolean! @join__field(graph: ORDER)
  cancelReason: OrderCancelReason @join__field(graph: ORDER)
  cancelledAt: DateTime @join__field(graph: ORDER)
  capturable: Boolean! @join__field(graph: ORDER)
  cartDiscountAmountSet: MoneyBag @join__field(graph: ORDER)
  channelInformation: ChannelInformation @join__field(graph: ORDER)
  clientIp: String @join__field(graph: ORDER)
  closed: Boolean! @join__field(graph: ORDER)
  closedAt: DateTime @join__field(graph: ORDER)
  confirmed: Boolean! @join__field(graph: ORDER)
  createdAt: DateTime! @join__field(graph: ORDER)
  currencyCode: CurrencyCode! @join__field(graph: ORDER)
  currentCartDiscountAmountSet: MoneyBag! @join__field(graph: ORDER)
  currentSubtotalLineItemsQuantity: Int! @join__field(graph: ORDER)
  currentSubtotalPriceSet: MoneyBag! @join__field(graph: ORDER)
  currentTaxLines: [TaxLine!]! @join__field(graph: ORDER)
  currentTotalDiscountsSet: MoneyBag! @join__field(graph: ORDER)
  currentTotalDutiesSet: MoneyBag @join__field(graph: ORDER)
  currentTotalPriceSet: MoneyBag! @join__field(graph: ORDER)
  currentTotalTaxSet: MoneyBag! @join__field(graph: ORDER)
  currentTotalWeight: UnsignedInt64! @join__field(graph: ORDER)
  customAttributes: [Attribute!]! @join__field(graph: ORDER)
  customer: Customer @join__field(graph: ORDER)
  customerAcceptsMarketing: Boolean! @join__field(graph: ORDER)
  customerJourneySummary: CustomerJourneySummary @join__field(graph: ORDER)
  customerLocale: String @join__field(graph: ORDER)
  discountApplications(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): DiscountApplicationConnection! @join__field(graph: ORDER)
  discountCode: String @join__field(graph: ORDER)
  discountCodes: [String!]! @join__field(graph: ORDER)
  displayAddress: MailingAddress @join__field(graph: ORDER)
  displayFinancialStatus: OrderDisplayFinancialStatus @join__field(graph: ORDER)
  displayFulfillmentStatus: OrderDisplayFulfillmentStatus! @join__field(graph: ORDER)
  disputes: [OrderDisputeSummary!]! @join__field(graph: ORDER)
  edited: Boolean! @join__field(graph: ORDER)
  email: String @join__field(graph: ORDER)
  estimatedTaxes: Boolean! @join__field(graph: ORDER)
  events(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: EventSortKeys = ID, query: String): EventConnection! @join__field(graph: ORDER)
  fulfillable: Boolean! @join__field(graph: ORDER)
  fulfillmentOrders(displayable: Boolean = false, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, query: String): FulfillmentOrderConnection! @join__field(graph: ORDER)
  fulfillments(first: Int): [Fulfillment!]! @join__field(graph: ORDER)
  fullyPaid: Boolean! @join__field(graph: ORDER)
  hasTimelineComment: Boolean! @join__field(graph: ORDER)
  legacyResourceId: UnsignedInt64! @join__field(graph: ORDER)
  lineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): LineItemConnection! @join__field(graph: ORDER)
  localizationExtensions(countryCodes: [CountryCode!], purposes: [LocalizationExtensionPurpose!], first: Int, after: String, last: Int, before: String, reverse: Boolean = false): LocalizationExtensionConnection! @join__field(graph: ORDER)
  merchantEditable: Boolean! @join__field(graph: ORDER)
  merchantEditableErrors: [String!]! @join__field(graph: ORDER)
  merchantOfRecordApp: OrderApp @join__field(graph: ORDER)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: ORDER)
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection! @join__field(graph: ORDER)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: ORDER)
  name: String! @join__field(graph: ORDER)
  netPaymentSet: MoneyBag! @join__field(graph: ORDER)
  nonFulfillableLineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): LineItemConnection! @join__field(graph: ORDER)
  note: String @join__field(graph: ORDER)
  originalTotalDutiesSet: MoneyBag @join__field(graph: ORDER)
  originalTotalPriceSet: MoneyBag! @join__field(graph: ORDER)
  paymentCollectionDetails: OrderPaymentCollectionDetails! @join__field(graph: ORDER)
  paymentGatewayNames: [String!]! @join__field(graph: ORDER)
  paymentTerms: PaymentTerms @join__field(graph: ORDER)
  phone: String @join__field(graph: ORDER)
  physicalLocation: Location @join__field(graph: ORDER)
  presentmentCurrencyCode: CurrencyCode! @join__field(graph: ORDER)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: ORDER)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: ORDER)
  processedAt: DateTime! @join__field(graph: ORDER)
  publication: Publication @join__field(graph: ORDER)
  purchasingEntity: PurchasingEntity @join__field(graph: ORDER)
  refundDiscrepancySet: MoneyBag! @join__field(graph: ORDER)
  refundable: Boolean! @join__field(graph: ORDER)
  refunds(first: Int): [Refund!]! @join__field(graph: ORDER)
  registeredSourceUrl: URL @join__field(graph: ORDER)
  requiresShipping: Boolean! @join__field(graph: ORDER)
  restockable: Boolean! @join__field(graph: ORDER)
  riskLevel: OrderRiskLevel! @join__field(graph: ORDER)
  risks(first: Int): [OrderRisk!]! @join__field(graph: ORDER)
  shippingAddress: MailingAddress @join__field(graph: ORDER)
  shippingLine: ShippingLine @join__field(graph: ORDER)
  shippingLines(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ShippingLineConnection! @join__field(graph: ORDER)
  sourceIdentifier: String @join__field(graph: ORDER)
  subtotalLineItemsQuantity: Int! @join__field(graph: ORDER)
  subtotalPriceSet: MoneyBag @join__field(graph: ORDER)
  suggestedRefund(shippingAmount: Money, refundShipping: Boolean, refundLineItems: [RefundLineItemInput!], refundDuties: [RefundDutyInput!], suggestFullRefund: Boolean = false): SuggestedRefund @join__field(graph: ORDER)
  tags: [String!]! @join__field(graph: ORDER)
  taxLines: [TaxLine!]! @join__field(graph: ORDER)
  taxesIncluded: Boolean! @join__field(graph: ORDER)
  test: Boolean! @join__field(graph: ORDER)
  totalCapturableSet: MoneyBag! @join__field(graph: ORDER)
  totalDiscountsSet: MoneyBag @join__field(graph: ORDER)
  totalOutstandingSet: MoneyBag! @join__field(graph: ORDER)
  totalPriceSet: MoneyBag! @join__field(graph: ORDER)
  totalReceivedSet: MoneyBag! @join__field(graph: ORDER)
  totalRefundedSet: MoneyBag! @join__field(graph: ORDER)
  totalRefundedShippingSet: MoneyBag! @join__field(graph: ORDER)
  totalShippingPriceSet: MoneyBag! @join__field(graph: ORDER)
  totalTaxSet: MoneyBag @join__field(graph: ORDER)
  totalTipReceivedSet: MoneyBag! @join__field(graph: ORDER)
  totalWeight: UnsignedInt64 @join__field(graph: ORDER)
  transactions(first: Int, capturable: Boolean, manuallyResolvable: Boolean): [OrderTransaction!]! @join__field(graph: ORDER)
  unpaid: Boolean! @join__field(graph: ORDER)
  updatedAt: DateTime! @join__field(graph: ORDER)
}

enum OrderActionType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ORDER
  ORDER_EDIT
  REFUND
  UNKNOWN
}

type OrderApp
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  icon: Image!
  id: ID!
  name: String!
}

enum OrderCancelReason
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CUSTOMER
  FRAUD
  INVENTORY
  DECLINED
  OTHER
}

type OrderConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [OrderEdge!]!
  nodes: [Order!]!
  pageInfo: PageInfo!
}

enum OrderDisplayFinancialStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PENDING
  AUTHORIZED
  PARTIALLY_PAID
  PARTIALLY_REFUNDED
  VOIDED
  PAID
  REFUNDED
  EXPIRED
}

enum OrderDisplayFulfillmentStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  UNFULFILLED
  PARTIALLY_FULFILLED
  FULFILLED
  RESTOCKED
  PENDING_FULFILLMENT
  OPEN
  IN_PROGRESS
  ON_HOLD
  SCHEDULED
}

type OrderDisputeSummary implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  initiatedAs: DisputeType!
  status: DisputeStatus!
}

type OrderEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Order!
}

type OrderPaymentCollectionDetails
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  additionalPaymentCollectionUrl: URL
  vaultedPaymentMethods: [PaymentMandate!]
}

type OrderRisk
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  display: Boolean!
  level: OrderRiskLevel
  message: String
}

enum OrderRiskLevel
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  LOW
  MEDIUM
  HIGH
}

enum OrderSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  CUSTOMER_NAME
  FINANCIAL_STATUS
  FULFILLMENT_STATUS
  ORDER_NUMBER
  PROCESSED_AT
  TOTAL_PRICE
  UPDATED_AT
  ID
  RELEVANCE
}

type OrderTransaction implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  accountNumber: String
  amountSet: MoneyBag!
  authorizationCode: String
  authorizationExpiresAt: DateTime
  createdAt: DateTime!
  errorCode: OrderTransactionErrorCode
  fees: [TransactionFee!]!
  formattedGateway: String
  gateway: String
  id: ID!
  kind: OrderTransactionKind!
  manuallyCapturable: Boolean!
  maximumRefundableV2: MoneyV2
  order: Order
  parentTransaction: OrderTransaction
  paymentIcon: Image
  processedAt: DateTime
  receiptJson: JSON
  settlementCurrency: CurrencyCode
  settlementCurrencyRate: Decimal
  shopifyPaymentsSet: ShopifyPaymentsTransactionSet
  status: OrderTransactionStatus!
  test: Boolean!
  totalUnsettledSet: MoneyBag
  user: StaffMember
}

type OrderTransactionConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [OrderTransactionEdge!]!
  nodes: [OrderTransaction!]!
  pageInfo: PageInfo!
}

type OrderTransactionEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: OrderTransaction!
}

enum OrderTransactionErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  INCORRECT_NUMBER
  INVALID_NUMBER
  INVALID_EXPIRY_DATE
  INVALID_CVC
  EXPIRED_CARD
  INCORRECT_CVC
  INCORRECT_ZIP
  INCORRECT_ADDRESS
  INCORRECT_PIN
  CARD_DECLINED
  PROCESSING_ERROR
  CALL_ISSUER
  PICK_UP_CARD
  CONFIG_ERROR
  TEST_MODE_LIVE_CARD
  UNSUPPORTED_FEATURE
  GENERIC_ERROR
  INVALID_COUNTRY
  INVALID_AMOUNT
  PAYMENT_METHOD_UNAVAILABLE
  AMAZON_PAYMENTS_INVALID_PAYMENT_METHOD
  AMAZON_PAYMENTS_MAX_AMOUNT_CHARGED
  AMAZON_PAYMENTS_MAX_AMOUNT_REFUNDED
  AMAZON_PAYMENTS_MAX_AUTHORIZATIONS_CAPTURED
  AMAZON_PAYMENTS_MAX_REFUNDS_PROCESSED
  AMAZON_PAYMENTS_ORDER_REFERENCE_CANCELED
  AMAZON_PAYMENTS_STALE
}

enum OrderTransactionKind
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SALE
  CAPTURE
  AUTHORIZATION
  VOID
  REFUND
  CHANGE
  EMV_AUTHORIZATION
  SUGGESTED_REFUND
}

enum OrderTransactionStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SUCCESS
  FAILURE
  PENDING
  ERROR
  AWAITING_RESPONSE
  UNKNOWN
}

type PageInfo
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  endCursor: String
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
}

union PaymentInstrument
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = VaultCreditCard | VaultPaypalBillingAgreement

type PaymentMandate implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  paymentInstrument: PaymentInstrument!
}

type PaymentSchedule implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  completedAt: DateTime
  dueAt: DateTime
  id: ID!
  issuedAt: DateTime
}

type PaymentScheduleConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [PaymentScheduleEdge!]!
  nodes: [PaymentSchedule!]!
  pageInfo: PageInfo!
}

type PaymentScheduleEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: PaymentSchedule!
}

type PaymentSettings
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  supportedDigitalWallets: [DigitalWallet!]!
}

type PaymentTerms implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  dueInDays: Int
  id: ID!
  overdue: Boolean!
  paymentSchedules(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PaymentScheduleConnection!
  paymentTermsName: String!
  paymentTermsType: PaymentTermsType!
  translatedName: String!
}

type PaymentTermsTemplate implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String!
  dueInDays: Int
  id: ID!
  name: String!
  paymentTermsType: PaymentTermsType!
  translatedName: String!
}

enum PaymentTermsType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  RECEIPT
  NET
  FIXED
  UNKNOWN
}

enum PaypalExpressSubscriptionsGatewayStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ENABLED
  DISABLED
  PENDING
}

type PriceList implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  contextRule: PriceListContextRule
  currency: CurrencyCode!
  id: ID!
  name: String!
  parent: PriceListParent
  prices(originType: PriceListPriceOriginType, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PriceListPriceConnection!
}

type PriceListAdjustment
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  type: PriceListAdjustmentType!
  value: Float!
}

enum PriceListAdjustmentType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PERCENTAGE_DECREASE
  PERCENTAGE_INCREASE
}

type PriceListContextRule
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  countries: [CountryCode!]!
  market: Market
}

type PriceListParent
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adjustment: PriceListAdjustment!
}

type PriceListPrice
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  compareAtPrice: MoneyV2
  originType: PriceListPriceOriginType!
  price: MoneyV2!
  variant: ProductVariant!
}

type PriceListPriceConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [PriceListPriceEdge!]!
  nodes: [PriceListPrice!]!
  pageInfo: PageInfo!
}

type PriceListPriceEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: PriceListPrice!
}

enum PriceListPriceOriginType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  FIXED
  RELATIVE
}

type PricingPercentageValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  percentage: Float!
}

union PricingValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = MoneyV2 | PricingPercentageValue

type PrivateMetafield implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime!
  id: ID!
  key: String!
  namespace: String!
  updatedAt: DateTime!
  value: String!
  valueType: PrivateMetafieldValueType!
}

type PrivateMetafieldConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [PrivateMetafieldEdge!]!
  nodes: [PrivateMetafield!]!
  pageInfo: PageInfo!
}

type PrivateMetafieldEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: PrivateMetafield!
}

input PrivateMetafieldInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  owner: ID
  namespace: String!
  key: String!
  valueInput: PrivateMetafieldValueInput!
}

input PrivateMetafieldValueInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  value: String!
  valueType: PrivateMetafieldValueType!
}

enum PrivateMetafieldValueType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  STRING
  INTEGER
  JSON_STRING
}

type Product implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & LegacyInteroperability & Navigable & Node & OnlineStorePreviewable & Publishable
  @join__implements(graph: PRODUCT, interface: "HasMetafieldDefinitions")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Navigable")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "OnlineStorePreviewable")
  @join__implements(graph: PRODUCT, interface: "Publishable")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  availablePublicationCount: Int! @join__field(graph: PRODUCT)
  collections(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: CollectionSortKeys = ID, query: String): CollectionConnection! @join__field(graph: PRODUCT)
  contextualPricing(context: ContextualPricingContext!): ProductContextualPricing! @join__field(graph: PRODUCT)
  createdAt: DateTime! @join__field(graph: PRODUCT)
  defaultCursor: String! @join__field(graph: PRODUCT)
  description(truncateAt: Int): String! @join__field(graph: PRODUCT)
  descriptionHtml: HTML! @join__field(graph: PRODUCT)
  featuredImage: Image @join__field(graph: PRODUCT)
  featuredMedia: Media @join__field(graph: PRODUCT)
  feedback: ResourceFeedback @join__field(graph: PRODUCT)
  giftCardTemplateSuffix: String @join__field(graph: PRODUCT)
  handle: String! @join__field(graph: PRODUCT)
  hasOnlyDefaultVariant: Boolean! @join__field(graph: PRODUCT)
  hasOutOfStockVariants: Boolean! @join__field(graph: PRODUCT)
  images(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: ProductImageSortKeys = POSITION): ImageConnection! @join__field(graph: PRODUCT)
  inCollection(id: ID!): Boolean! @join__field(graph: PRODUCT)
  isGiftCard: Boolean! @join__field(graph: PRODUCT)
  legacyResourceId: UnsignedInt64! @join__field(graph: PRODUCT)
  media(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: ProductMediaSortKeys = POSITION): MediaConnection! @join__field(graph: PRODUCT)
  mediaCount: Int! @join__field(graph: PRODUCT)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: PRODUCT)
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection! @join__field(graph: PRODUCT)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: PRODUCT)
  onlineStorePreviewUrl: URL @join__field(graph: PRODUCT)
  onlineStoreUrl: URL @join__field(graph: PRODUCT)
  options(first: Int): [ProductOption!]! @join__field(graph: PRODUCT)
  priceRangeV2: ProductPriceRangeV2! @join__field(graph: PRODUCT)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: PRODUCT)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: PRODUCT)
  productCategory: ProductCategory @join__field(graph: PRODUCT)
  productType: String! @join__field(graph: PRODUCT)
  publicationCount(onlyPublished: Boolean = true): Int! @join__field(graph: PRODUCT)
  publishedAt: DateTime @join__field(graph: PRODUCT)
  publishedOnCurrentPublication: Boolean! @join__field(graph: PRODUCT)
  publishedOnPublication(publicationId: ID!): Boolean! @join__field(graph: PRODUCT)
  requiresSellingPlan: Boolean! @join__field(graph: PRODUCT)
  resourcePublicationOnCurrentPublication: ResourcePublicationV2 @join__field(graph: PRODUCT)
  resourcePublications(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationConnection! @join__field(graph: PRODUCT)
  resourcePublicationsV2(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationV2Connection! @join__field(graph: PRODUCT)
  sellingPlanGroupCount: Int! @join__field(graph: PRODUCT)
  sellingPlanGroups(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SellingPlanGroupConnection! @join__field(graph: PRODUCT)
  seo: SEO! @join__field(graph: PRODUCT)
  status: ProductStatus! @join__field(graph: PRODUCT)
  tags: [String!]! @join__field(graph: PRODUCT)
  templateSuffix: String @join__field(graph: PRODUCT)
  title: String! @join__field(graph: PRODUCT)
  totalInventory: Int! @join__field(graph: PRODUCT)
  totalVariants: Int! @join__field(graph: PRODUCT)
  tracksInventory: Boolean! @join__field(graph: PRODUCT)
  translations(locale: String!, marketId: ID): [PublishedTranslation!]! @join__field(graph: PRODUCT)
  unpublishedPublications(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PublicationConnection! @join__field(graph: PRODUCT)
  updatedAt: DateTime! @join__field(graph: PRODUCT)
  variants(first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: ProductVariantSortKeys = POSITION): ProductVariantConnection! @join__field(graph: PRODUCT)
  vendor: String! @join__field(graph: PRODUCT)
}

input ProductAppendImagesInput
  @join__type(graph: PRODUCT)
{
  id: ID!
  images: [ImageInput!]!
}

type ProductAppendImagesPayload
  @join__type(graph: PRODUCT)
{
  newImages: [Image!]
  product: Product
  userErrors: [UserError!]!
}

type ProductCategory
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  productTaxonomyNode: ProductTaxonomyNode
}

input ProductCategoryInput
  @join__type(graph: PRODUCT)
{
  productTaxonomyNodeId: ID!
}

type ProductChangeStatusPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [ProductChangeStatusUserError!]!
}

type ProductChangeStatusUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: ProductChangeStatusUserErrorCode
  field: [String!]
  message: String!
}

enum ProductChangeStatusUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT_NOT_FOUND
}

enum ProductCollectionSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TITLE
  PRICE
  BEST_SELLING
  CREATED
  ID
  MANUAL
  COLLECTION_DEFAULT
  RELEVANCE
}

type ProductConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ProductEdge!]!
  nodes: [Product!]!
  pageInfo: PageInfo!
}

type ProductContextualPricing
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  maxVariantPricing: ProductVariantContextualPricing
  minVariantPricing: ProductVariantContextualPricing
  priceRange: ProductPriceRangeV2!
}

type ProductCreateMediaPayload
  @join__type(graph: PRODUCT)
{
  media: [Media!]
  mediaUserErrors: [MediaUserError!]!
  product: Product
}

type ProductCreatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  shop: Shop!
  userErrors: [UserError!]!
}

type ProductDeleteImagesPayload
  @join__type(graph: PRODUCT)
{
  deletedImageIds: [ID!]!
  product: Product
  userErrors: [UserError!]!
}

input ProductDeleteInput
  @join__type(graph: PRODUCT)
{
  id: ID!
}

type ProductDeleteMediaPayload
  @join__type(graph: PRODUCT)
{
  deletedMediaIds: [ID!]
  deletedProductImageIds: [ID!]
  mediaUserErrors: [MediaUserError!]!
  product: Product
}

type ProductDeletePayload
  @join__type(graph: PRODUCT)
{
  deletedProductId: ID
  shop: Shop!
  userErrors: [UserError!]!
}

type ProductDuplicatePayload
  @join__type(graph: PRODUCT)
{
  imageJob: Job
  newProduct: Product
  shop: Shop!
  userErrors: [UserError!]!
}

type ProductEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Product!
}

enum ProductImageSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CREATED_AT
  POSITION
  ID
  RELEVANCE
}

type ProductImageUpdatePayload
  @join__type(graph: PRODUCT)
{
  image: Image
  userErrors: [UserError!]!
}

input ProductInput
  @join__type(graph: PRODUCT)
{
  descriptionHtml: String
  redirectNewHandle: Boolean
  handle: String
  seo: SEOInput
  productType: String
  standardizedProductType: StandardizedProductTypeInput
  productCategory: ProductCategoryInput
  customProductType: String
  tags: [String!]
  templateSuffix: String
  giftCard: Boolean
  giftCardTemplateSuffix: String
  title: String
  vendor: String
  collectionsToJoin: [ID!]
  collectionsToLeave: [ID!]
  id: ID
  images: [ImageInput!]
  metafields: [MetafieldInput!]
  privateMetafields: [PrivateMetafieldInput!]
  options: [String!]
  variants: [ProductVariantInput!]
  status: ProductStatus
  requiresSellingPlan: Boolean
}

type ProductJoinSellingPlanGroupsPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [SellingPlanGroupUserError!]!
}

type ProductLeaveSellingPlanGroupsPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [SellingPlanGroupUserError!]!
}

enum ProductMediaSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  POSITION
  ID
  RELEVANCE
}

type ProductOption implements HasPublishedTranslations & Node
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__type(graph: PRODUCT, key: "id")
{
  id: ID!
  name: String!
  position: Int!
  translations(locale: String!, marketId: ID): [PublishedTranslation!]!
  values: [String!]!
}

type ProductPriceRangeV2
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  maxVariantPrice: MoneyV2!
  minVariantPrice: MoneyV2!
}

type ProductReorderImagesPayload
  @join__type(graph: PRODUCT)
{
  job: Job
  userErrors: [UserError!]!
}

type ProductReorderMediaPayload
  @join__type(graph: PRODUCT)
{
  job: Job
  mediaUserErrors: [MediaUserError!]!
}

type ProductResourceFeedback
  @join__type(graph: PRODUCT)
{
  feedbackGeneratedAt: DateTime!
  messages: [String!]!
  productId: ID!
  productUpdatedAt: DateTime!
  state: ResourceFeedbackState!
}

enum ProductSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TITLE
  PRODUCT_TYPE
  VENDOR
  INVENTORY_TOTAL
  UPDATED_AT
  CREATED_AT
  PUBLISHED_AT
  ID
  RELEVANCE
}

enum ProductStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACTIVE
  ARCHIVED
  DRAFT
}

type ProductTaxonomyNode implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  fullName: String!
  id: ID!
  isLeaf: Boolean!
  isRoot: Boolean!
  name: String!
}

type ProductUpdateMediaPayload
  @join__type(graph: PRODUCT)
{
  media: [Media!]
  mediaUserErrors: [MediaUserError!]!
  product: Product
}

type ProductUpdatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [UserError!]!
}

type ProductVariant implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & LegacyInteroperability & Navigable & Node
  @join__implements(graph: PRODUCT, interface: "HasMetafieldDefinitions")
  @join__implements(graph: PRODUCT, interface: "HasMetafields")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Navigable")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__type(graph: CUSTOMER, key: "id")
  @join__type(graph: ORDER, key: "id")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  availableForSale: Boolean! @join__field(graph: PRODUCT)
  barcode: String @join__field(graph: PRODUCT)
  compareAtPrice: Money @join__field(graph: PRODUCT)
  contextualPricing(context: ContextualPricingContext!): ProductVariantContextualPricing! @join__field(graph: PRODUCT)
  createdAt: DateTime! @join__field(graph: PRODUCT)
  defaultCursor: String! @join__field(graph: PRODUCT)
  deliveryProfile: DeliveryProfile @join__field(graph: PRODUCT)
  displayName: String! @join__field(graph: PRODUCT)
  fulfillmentServiceEditable: EditableProperty! @join__field(graph: PRODUCT)
  image: Image @join__field(graph: PRODUCT)
  inventoryItem: InventoryItem! @join__field(graph: PRODUCT)
  inventoryPolicy: ProductVariantInventoryPolicy! @join__field(graph: PRODUCT)
  inventoryQuantity: Int @join__field(graph: PRODUCT)
  legacyResourceId: UnsignedInt64! @join__field(graph: PRODUCT)
  media(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MediaConnection! @join__field(graph: PRODUCT)
  metafield(namespace: String!, key: String!): Metafield @join__field(graph: PRODUCT)
  metafieldDefinitions(namespace: String, pinnedStatus: MetafieldDefinitionPinnedStatus = ANY, first: Int, after: String, last: Int, before: String, reverse: Boolean = false, sortKey: MetafieldDefinitionSortKeys = ID, query: String): MetafieldDefinitionConnection! @join__field(graph: PRODUCT)
  metafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: PRODUCT)
  position: Int! @join__field(graph: PRODUCT)
  price: Money! @join__field(graph: PRODUCT)
  privateMetafield(namespace: String!, key: String!): PrivateMetafield @join__field(graph: PRODUCT)
  privateMetafields(namespace: String, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: PRODUCT)
  product: Product! @join__field(graph: PRODUCT)
  selectedOptions: [SelectedOption!]! @join__field(graph: PRODUCT)
  sellableOnlineQuantity: Int! @join__field(graph: PRODUCT)
  sellingPlanGroupCount: Int! @join__field(graph: PRODUCT)
  sellingPlanGroups(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SellingPlanGroupConnection! @join__field(graph: PRODUCT)
  sku: String @join__field(graph: PRODUCT)
  taxCode: String @join__field(graph: PRODUCT)
  taxable: Boolean! @join__field(graph: PRODUCT)
  title: String! @join__field(graph: PRODUCT)
  translations(locale: String!, marketId: ID): [PublishedTranslation!]! @join__field(graph: PRODUCT)
  updatedAt: DateTime! @join__field(graph: PRODUCT)
  weight: Float @join__field(graph: PRODUCT)
  weightUnit: WeightUnit! @join__field(graph: PRODUCT)
}

input ProductVariantAppendMediaInput
  @join__type(graph: PRODUCT)
{
  variantId: ID!
  mediaIds: [ID!]!
}

type ProductVariantAppendMediaPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariants: [ProductVariant!]
  userErrors: [MediaUserError!]!
}

type ProductVariantConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ProductVariantEdge!]!
  nodes: [ProductVariant!]!
  pageInfo: PageInfo!
}

type ProductVariantContextualPricing
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  compareAtPrice: MoneyV2
  price: MoneyV2!
}

type ProductVariantCreatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariant: ProductVariant
  userErrors: [UserError!]!
}

type ProductVariantDeletePayload
  @join__type(graph: PRODUCT)
{
  deletedProductVariantId: ID
  product: Product
  userErrors: [UserError!]!
}

input ProductVariantDetachMediaInput
  @join__type(graph: PRODUCT)
{
  variantId: ID!
  mediaIds: [ID!]!
}

type ProductVariantDetachMediaPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariants: [ProductVariant!]
  userErrors: [MediaUserError!]!
}

type ProductVariantEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: ProductVariant!
}

input ProductVariantInput
  @join__type(graph: PRODUCT)
{
  barcode: String
  compareAtPrice: Money
  harmonizedSystemCode: String
  id: ID
  imageId: ID
  imageSrc: String
  mediaSrc: [String!]
  inventoryPolicy: ProductVariantInventoryPolicy
  inventoryQuantities: [InventoryLevelInput!]
  inventoryItem: InventoryItemInput
  metafields: [MetafieldInput!]
  privateMetafields: [PrivateMetafieldInput!]
  options: [String!]
  position: Int
  price: Money
  productId: ID
  requiresShipping: Boolean
  sku: String
  taxable: Boolean
  taxCode: String
  weight: Float
  weightUnit: WeightUnit
}

enum ProductVariantInventoryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  DENY
  CONTINUE
}

type ProductVariantJoinSellingPlanGroupsPayload
  @join__type(graph: PRODUCT)
{
  productVariant: ProductVariant
  userErrors: [SellingPlanGroupUserError!]!
}

type ProductVariantLeaveSellingPlanGroupsPayload
  @join__type(graph: PRODUCT)
{
  productVariant: ProductVariant
  userErrors: [SellingPlanGroupUserError!]!
}

input ProductVariantPositionInput
  @join__type(graph: PRODUCT)
{
  id: ID!
  position: Int!
}

type ProductVariantsBulkCreatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariants: [ProductVariant!]
  userErrors: [ProductVariantsBulkCreateUserError!]!
}

type ProductVariantsBulkCreateUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: ProductVariantsBulkCreateUserErrorCode
  field: [String!]
  message: String!
}

enum ProductVariantsBulkCreateUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT_DOES_NOT_EXIST
  NO_KEY_ON_CREATE
  VARIANT_ALREADY_EXISTS
  GREATER_THAN_OR_EQUAL_TO
  NEED_TO_ADD_OPTION_VALUES
  OPTION_VALUES_FOR_NUMBER_OF_UNKNOWN_OPTIONS
  TOO_MANY_INVENTORY_LOCATIONS
  SUBSCRIPTION_VIOLATION
  VARIANT_ALREADY_EXISTS_CHANGE_OPTION_VALUE
  TRACKED_VARIANT_LOCATION_NOT_FOUND
  MUST_BE_FOR_THIS_PRODUCT
  NOT_DEFINED_FOR_SHOP
  INVALID
  NEGATIVE_PRICE_VALUE
}

type ProductVariantsBulkDeletePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [ProductVariantsBulkDeleteUserError!]!
}

type ProductVariantsBulkDeleteUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: ProductVariantsBulkDeleteUserErrorCode
  field: [String!]
  message: String!
}

enum ProductVariantsBulkDeleteUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT_DOES_NOT_EXIST
  CANNOT_DELETE_LAST_VARIANT
  AT_LEAST_ONE_VARIANT_DOES_NOT_BELONG_TO_THE_PRODUCT
}

input ProductVariantsBulkInput
  @join__type(graph: PRODUCT)
{
  barcode: String
  compareAtPrice: Money
  harmonizedSystemCode: String
  id: ID
  imageId: ID
  imageSrc: String
  mediaSrc: [String!]
  inventoryPolicy: ProductVariantInventoryPolicy
  inventoryQuantities: [InventoryLevelInput!]
  inventoryItem: InventoryItemInput
  metafields: [MetafieldInput!]
  privateMetafields: [PrivateMetafieldInput!]
  options: [String!]
  price: Money
  requiresShipping: Boolean
  sku: String
  taxable: Boolean
  taxCode: String
  weight: Float
  weightUnit: WeightUnit
}

type ProductVariantsBulkReorderPayload
  @join__type(graph: PRODUCT)
{
  product: Product
  userErrors: [ProductVariantsBulkReorderUserError!]!
}

type ProductVariantsBulkReorderUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: ProductVariantsBulkReorderUserErrorCode
  field: [String!]
  message: String!
}

enum ProductVariantsBulkReorderUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT_DOES_NOT_EXIST
  MISSING_VARIANT
  INVALID_POSITION
  DUPLICATED_VARIANT_ID
}

type ProductVariantsBulkUpdatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariants: [ProductVariant!]
  userErrors: [ProductVariantsBulkUpdateUserError!]!
}

type ProductVariantsBulkUpdateUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: ProductVariantsBulkUpdateUserErrorCode
  field: [String!]
  message: String!
}

enum ProductVariantsBulkUpdateUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT_DOES_NOT_EXIST
  PRODUCT_VARIANT_ID_MISSING
  PRODUCT_VARIANT_DOES_NOT_EXIST
  NO_INVENTORY_QUANTITIES_ON_VARIANTS_UPDATE
  VARIANT_ALREADY_EXISTS
  GREATER_THAN_OR_EQUAL_TO
  NEED_TO_ADD_OPTION_VALUES
  OPTION_VALUES_FOR_NUMBER_OF_UNKNOWN_OPTIONS
  SUBSCRIPTION_VIOLATION
  NO_INVENTORY_QUANTITES_DURING_UPDATE
  NEGATIVE_PRICE_VALUE
}

enum ProductVariantSortKeys
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  TITLE
  NAME
  SKU
  INVENTORY_QUANTITY
  INVENTORY_MANAGEMENT
  INVENTORY_LEVELS_AVAILABLE
  INVENTORY_POLICY
  FULL_TITLE
  POPULAR
  POSITION
  ID
  RELEVANCE
}

type ProductVariantUpdatePayload
  @join__type(graph: PRODUCT)
{
  product: Product
  productVariant: ProductVariant
  userErrors: [UserError!]!
}

type Publication implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App!
  collectionPublicationsV3(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationConnection!
  collections(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): CollectionConnection!
  hasCollection(id: ID!): Boolean!
  id: ID!
  name: String!
  productPublicationsV3(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationConnection!
  products(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ProductConnection!
  supportsFuturePublishing: Boolean!
}

type PublicationConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [PublicationEdge!]!
  nodes: [Publication!]!
  pageInfo: PageInfo!
}

type PublicationEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Publication!
}

interface Publishable
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  availablePublicationCount: Int!
  publicationCount(onlyPublished: Boolean = true): Int!
  publishedOnCurrentPublication: Boolean!
  publishedOnPublication(publicationId: ID!): Boolean!
  resourcePublications(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationConnection!
  resourcePublicationsV2(onlyPublished: Boolean = true, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ResourcePublicationV2Connection!
  unpublishedPublications(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): PublicationConnection!
}

type PublishedTranslation
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  key: String!
  locale: String!
  marketId: ID
  value: String
}

type PurchasingCompany
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  company: Company!
  contact: CompanyContact
  location: CompanyLocation!
}

union PurchasingEntity
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = Customer | PurchasingCompany

type Query
  @inContext
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  customer(id: ID!): Customer @join__field(graph: CUSTOMER)
  product(id: ID!): Product @join__field(graph: PRODUCT)
  productByHandle(handle: String!): Product @join__field(graph: PRODUCT)
  productResourceFeedback(id: ID!): ProductResourceFeedback @join__field(graph: PRODUCT)
  productSavedSearches(after: String, before: String, first: Int, last: Int, reverse: Boolean = false): SavedSearchConnection! @join__field(graph: PRODUCT)
  productVariant(id: ID!): ProductVariant @join__field(graph: PRODUCT)
  productVariants(after: String, before: String, first: Int, last: Int, query: String, reverse: Boolean = false, savedSearchId: ID, sortKey: ProductVariantSortKeys = ID): ProductVariantConnection! @join__field(graph: PRODUCT)
  products(after: String, before: String, first: Int, last: Int, query: String, reverse: Boolean = false, savedSearchId: ID, sortKey: ProductSortKeys = ID): ProductConnection! @join__field(graph: PRODUCT)
}

type Refund implements LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  createdAt: DateTime
  duties: [RefundDuty!]
  id: ID!
  legacyResourceId: UnsignedInt64!
  note: String
  order: Order!
  refundLineItems(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): RefundLineItemConnection!
  staffMember: StaffMember
  totalRefundedSet: MoneyBag!
  transactions(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): OrderTransactionConnection!
  updatedAt: DateTime!
}

type RefundDuty
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amountSet: MoneyBag!
  originalDuty: Duty
}

input RefundDutyInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  dutyId: ID!
  refundType: RefundDutyRefundType
}

enum RefundDutyRefundType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PROPORTIONAL
  FULL
}

type RefundLineItem
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  lineItem: LineItem!
  location: Location
  priceSet: MoneyBag!
  quantity: Int!
  restockType: RefundLineItemRestockType!
  restocked: Boolean!
  subtotalSet: MoneyBag!
  totalTaxSet: MoneyBag!
}

type RefundLineItemConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [RefundLineItemEdge!]!
  nodes: [RefundLineItem!]!
  pageInfo: PageInfo!
}

type RefundLineItemEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: RefundLineItem!
}

input RefundLineItemInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  lineItemId: ID!
  quantity: Int!
  restockType: RefundLineItemRestockType
  locationId: ID
}

enum RefundLineItemRestockType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  RETURN
  CANCEL
  LEGACY_RESTOCK
  NO_RESTOCK
}

type ResourceAlert
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  actions: [ResourceAlertAction!]!
  content: HTML!
  dismissibleHandle: String
  icon: ResourceAlertIcon
  severity: ResourceAlertSeverity!
  title: String!
}

type ResourceAlertAction
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  primary: Boolean!
  show: String
  title: String!
  url: URL!
}

enum ResourceAlertIcon
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CHECKMARK_CIRCLE
  INFORMATION_CIRCLE
}

enum ResourceAlertSeverity
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  DEFAULT
  INFO
  WARNING
  SUCCESS
  CRITICAL
}

type ResourceFeedback
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  details: [AppFeedback!]!
  summary: String!
}

enum ResourceFeedbackState
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACCEPTED
  REQUIRES_ACTION
}

type ResourceLimit
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  available: Boolean!
  quantityAvailable: Int
  quantityLimit: Int
  quantityUsed: Int
}

type ResourcePublication
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  isPublished: Boolean!
  publication: Publication!
  publishDate: DateTime!
  publishable: Publishable!
}

type ResourcePublicationConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ResourcePublicationEdge!]!
  nodes: [ResourcePublication!]!
  pageInfo: PageInfo!
}

type ResourcePublicationEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: ResourcePublication!
}

type ResourcePublicationV2
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  isPublished: Boolean!
  publication: Publication!
  publishDate: DateTime
  publishable: Publishable!
}

type ResourcePublicationV2Connection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ResourcePublicationV2Edge!]!
  nodes: [ResourcePublicationV2!]!
  pageInfo: PageInfo!
}

type ResourcePublicationV2Edge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: ResourcePublicationV2!
}

interface Sale
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  actionType: SaleActionType!
  id: ID!
  lineType: SaleLineType!
  quantity: Int
  taxes: [SaleTax!]!
  totalAmount: MoneyBag!
  totalDiscountAmountAfterTaxes: MoneyBag!
  totalDiscountAmountBeforeTaxes: MoneyBag!
  totalTaxAmount: MoneyBag!
}

enum SaleActionType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ORDER
  RETURN
  UPDATE
  UNKNOWN
}

type SaleConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SaleEdge!]!
  nodes: [Sale!]!
  pageInfo: PageInfo!
}

type SaleEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: Sale!
}

enum SaleLineType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PRODUCT
  TIP
  GIFT_CARD
  SHIPPING
  DUTY
  UNKNOWN
  ADJUSTMENT
}

interface SalesAgreement
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App
  happenedAt: DateTime!
  id: ID!
  reason: OrderActionType!
  sales(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SaleConnection!
  user: StaffMember
}

type SalesAgreementConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SalesAgreementEdge!]!
  nodes: [SalesAgreement!]!
  pageInfo: PageInfo!
}

type SalesAgreementEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SalesAgreement!
}

type SaleTax
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyBag!
  id: ID!
  taxLine: TaxLine!
}

type SavedSearch implements LegacyInteroperability & Node
  @join__implements(graph: CUSTOMER, interface: "LegacyInteroperability")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "LegacyInteroperability")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "LegacyInteroperability")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "LegacyInteroperability")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  filters: [SearchFilter!]!
  id: ID!
  legacyResourceId: UnsignedInt64!
  name: String!
  query: String!
  resourceType: SearchResultType!
  searchTerms: String!
}

type SavedSearchConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SavedSearchEdge!]!
  nodes: [SavedSearch!]!
  pageInfo: PageInfo!
}

type SavedSearchEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SavedSearch!
}

type ScriptDiscountApplication implements DiscountApplication
  @join__implements(graph: CUSTOMER, interface: "DiscountApplication")
  @join__implements(graph: ORDER, interface: "DiscountApplication")
  @join__implements(graph: PRODUCT, interface: "DiscountApplication")
  @join__implements(graph: SHOP, interface: "DiscountApplication")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  allocationMethod: DiscountApplicationAllocationMethod!
  index: Int!
  targetSelection: DiscountApplicationTargetSelection!
  targetType: DiscountApplicationTargetType!
  title: String!
  value: PricingValue!
}

type SearchFilter
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  key: String!
  value: String!
}

type SearchFilterOptions
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  productAvailability: [FilterOption!]!
}

type SearchResult
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  image: Image
  reference: Node!
  title: String!
  url: URL!
}

type SearchResultConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SearchResultEdge!]!
  pageInfo: PageInfo!
}

type SearchResultEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SearchResult!
}

enum SearchResultType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CUSTOMER
  DRAFT_ORDER
  PRODUCT
  COLLECTION
  FILE
  ONLINE_STORE_PAGE
  ONLINE_STORE_BLOG
  ONLINE_STORE_ARTICLE
  URL_REDIRECT
  PRICE_RULE
  DISCOUNT_REDEEM_CODE
  ORDER
}

type SelectedOption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  name: String!
  value: String!
}

type SellingPlan implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  billingPolicy: SellingPlanBillingPolicy!
  category: SellingPlanCategory
  createdAt: DateTime!
  deliveryPolicy: SellingPlanDeliveryPolicy!
  description: String
  id: ID!
  inventoryPolicy: SellingPlanInventoryPolicy
  name: String!
  options: [String!]!
  position: Int
  pricingPolicies: [SellingPlanPricingPolicy!]!
}

type SellingPlanAnchor
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cutoffDay: Int
  day: Int!
  month: Int
  type: SellingPlanAnchorType!
}

enum SellingPlanAnchorType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  WEEKDAY
  MONTHDAY
  YEARDAY
}

union SellingPlanBillingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SellingPlanFixedBillingPolicy | SellingPlanRecurringBillingPolicy

enum SellingPlanCategory
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  OTHER
  PRE_ORDER
  SUBSCRIPTION
  TRY_BEFORE_YOU_BUY
}

type SellingPlanCheckoutCharge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  type: SellingPlanCheckoutChargeType!
  value: SellingPlanCheckoutChargeValue!
}

type SellingPlanCheckoutChargePercentageValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  percentage: Float!
}

enum SellingPlanCheckoutChargeType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PERCENTAGE
  PRICE
}

union SellingPlanCheckoutChargeValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = MoneyV2 | SellingPlanCheckoutChargePercentageValue

type SellingPlanConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SellingPlanEdge!]!
  nodes: [SellingPlan!]!
  pageInfo: PageInfo!
}

union SellingPlanDeliveryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SellingPlanFixedDeliveryPolicy | SellingPlanRecurringDeliveryPolicy

type SellingPlanEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SellingPlan!
}

type SellingPlanFixedBillingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  checkoutCharge: SellingPlanCheckoutCharge!
  remainingBalanceChargeExactTime: DateTime
  remainingBalanceChargeTimeAfterCheckout: String
  remainingBalanceChargeTrigger: SellingPlanRemainingBalanceChargeTrigger!
}

type SellingPlanFixedDeliveryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  anchors: [SellingPlanAnchor!]!
  cutoff: Int
  fulfillmentExactTime: DateTime
  fulfillmentTrigger: SellingPlanFulfillmentTrigger!
  intent: SellingPlanFixedDeliveryPolicyIntent!
  preAnchorBehavior: SellingPlanFixedDeliveryPolicyPreAnchorBehavior!
}

enum SellingPlanFixedDeliveryPolicyIntent
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  FULFILLMENT_BEGIN
}

enum SellingPlanFixedDeliveryPolicyPreAnchorBehavior
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ASAP
  NEXT
}

type SellingPlanFixedPricingPolicy implements SellingPlanPricingPolicyBase
  @join__implements(graph: CUSTOMER, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: ORDER, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: PRODUCT, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: SHOP, interface: "SellingPlanPricingPolicyBase")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!
  createdAt: DateTime!
}

enum SellingPlanFulfillmentTrigger
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ANCHOR
  ASAP
  EXACT_TIME
  UNKNOWN
}

type SellingPlanGroup implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  appId: String
  appliesToProduct(productId: ID!): Boolean!
  appliesToProductVariant(productVariantId: ID!): Boolean!
  appliesToProductVariants(productId: ID!): Boolean!
  createdAt: DateTime!
  description: String
  id: ID!
  merchantCode: String!
  name: String!
  options: [String!]!
  position: Int
  productCount: Int!
  productVariantCount(productId: ID): Int!
  productVariants(productId: ID, first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ProductVariantConnection!
  products(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): ProductConnection!
  sellingPlans(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SellingPlanConnection!
  summary: String
}

type SellingPlanGroupConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SellingPlanGroupEdge!]!
  nodes: [SellingPlanGroup!]!
  pageInfo: PageInfo!
}

type SellingPlanGroupEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SellingPlanGroup!
}

type SellingPlanGroupUserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: SellingPlanGroupUserErrorCode
  field: [String!]
  message: String!
}

enum SellingPlanGroupUserErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  BLANK
  EQUAL_TO
  GREATER_THAN
  GREATER_THAN_OR_EQUAL_TO
  INCLUSION
  INVALID
  LESS_THAN
  LESS_THAN_OR_EQUAL_TO
  NOT_A_NUMBER
  NOT_FOUND
  PRESENT
  TAKEN
  TOO_BIG
  TOO_LONG
  TOO_SHORT
  WRONG_LENGTH
  SELLING_PLAN_COUNT_UPPER_BOUND
  SELLING_PLAN_COUNT_LOWER_BOUND
  SELLING_PLAN_MAX_CYCLES_MUST_BE_GREATER_THAN_MIN_CYCLES
  SELLING_PLAN_BILLING_AND_DELIVERY_POLICY_ANCHORS_MUST_BE_EQUAL
  SELLING_PLAN_BILLING_CYCLE_MUST_BE_A_MULTIPLE_OF_DELIVERY_CYCLE
  SELLING_PLAN_PRICING_POLICIES_MUST_CONTAIN_A_FIXED_PRICING_POLICY
  SELLING_PLAN_MISSING_OPTION2_LABEL_ON_PARENT_GROUP
  SELLING_PLAN_MISSING_OPTION3_LABEL_ON_PARENT_GROUP
  SELLING_PLAN_OPTION2_REQUIRED_AS_DEFINED_ON_PARENT_GROUP
  SELLING_PLAN_OPTION3_REQUIRED_AS_DEFINED_ON_PARENT_GROUP
  SELLING_PLAN_PRICING_POLICIES_LIMIT
  RESOURCE_LIST_CONTAINS_INVALID_IDS
  PRODUCT_VARIANT_DOES_NOT_EXIST
  PRODUCT_DOES_NOT_EXIST
  GROUP_DOES_NOT_EXIST
  GROUP_COULD_NOT_BE_DELETED
  ERROR_ADDING_RESOURCE_TO_GROUP
  SELLING_PLAN_DELIVERY_POLICY_MISSING
  SELLING_PLAN_BILLING_POLICY_MISSING
  PLAN_DOES_NOT_EXIST
  PLAN_ID_MUST_BE_SPECIFIED_TO_UPDATE
  ONLY_NEED_ONE_BILLING_POLICY_TYPE
  ONLY_NEED_ONE_DELIVERY_POLICY_TYPE
  ONLY_NEED_ONE_PRICING_POLICY_TYPE
  BILLING_AND_DELIVERY_POLICY_TYPES_MUST_BE_THE_SAME
  ONLY_NEED_ONE_PRICING_POLICY_VALUE
  PRICING_POLICY_ADJUSTMENT_VALUE_AND_TYPE_MUST_MATCH
  SELLING_PLAN_DUPLICATE_NAME
  SELLING_PLAN_DUPLICATE_OPTIONS
  SELLING_PLAN_FIXED_PRICING_POLICIES_LIMIT
  REMAINING_BALANCE_CHARGE_EXACT_TIME_REQUIRED
  CHECKOUT_CHARGE_VALUE_AND_TYPE_MUST_MATCH
  ONLY_NEED_ONE_CHECKOUT_CHARGE_VALUE
  REMAINING_BALANCE_CHARGE_EXACT_TIME_NOT_ALLOWED
  REMAINING_BALANCE_CHARGE_TIME_AFTER_CHECKOUT_MUST_BE_GREATER_THAN_ZERO
  REMAINING_BALANCE_CHARGE_TRIGGER_ON_FULL_CHECKOUT
  REMAINING_BALANCE_CHARGE_TRIGGER_NO_REMAINING_BALANCE_ON_PARTIAL_PERCENTAGE_CHECKOUT_CHARGE
  REMAINING_BALANCE_CHARGE_TRIGGER_NO_REMAINING_BALANCE_ON_PRICE_CHECKOUT_CHARGE
  FULFILLMENT_EXACT_TIME_REQUIRED
  FULFILLMENT_EXACT_TIME_NOT_ALLOWED
  SELLING_PLAN_ANCHORS_NOT_ALLOWED
  SELLING_PLAN_ANCHORS_REQUIRED
  ONLY_ONE_OF_FIXED_OR_RECURRING_BILLING
  ONLY_ONE_OF_FIXED_OR_RECURRING_DELIVERY
}

enum SellingPlanInterval
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  DAY
  WEEK
  MONTH
  YEAR
}

type SellingPlanInventoryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  reserve: SellingPlanReserve!
}

union SellingPlanPricingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SellingPlanFixedPricingPolicy | SellingPlanRecurringPricingPolicy

enum SellingPlanPricingPolicyAdjustmentType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PERCENTAGE
  FIXED_AMOUNT
  PRICE
}

union SellingPlanPricingPolicyAdjustmentValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = MoneyV2 | SellingPlanPricingPolicyPercentageValue

interface SellingPlanPricingPolicyBase
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!
}

type SellingPlanPricingPolicyPercentageValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  percentage: Float!
}

type SellingPlanRecurringBillingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  anchors: [SellingPlanAnchor!]!
  createdAt: DateTime!
  interval: SellingPlanInterval!
  intervalCount: Int!
  maxCycles: Int
  minCycles: Int
}

type SellingPlanRecurringDeliveryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  anchors: [SellingPlanAnchor!]!
  createdAt: DateTime!
  cutoff: Int
  intent: SellingPlanRecurringDeliveryPolicyIntent!
  interval: SellingPlanInterval!
  intervalCount: Int!
  preAnchorBehavior: SellingPlanRecurringDeliveryPolicyPreAnchorBehavior!
}

enum SellingPlanRecurringDeliveryPolicyIntent
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  FULFILLMENT_BEGIN
}

enum SellingPlanRecurringDeliveryPolicyPreAnchorBehavior
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ASAP
  NEXT
}

type SellingPlanRecurringPricingPolicy implements SellingPlanPricingPolicyBase
  @join__implements(graph: CUSTOMER, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: ORDER, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: PRODUCT, interface: "SellingPlanPricingPolicyBase")
  @join__implements(graph: SHOP, interface: "SellingPlanPricingPolicyBase")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!
  afterCycle: Int
  createdAt: DateTime!
}

enum SellingPlanRemainingBalanceChargeTrigger
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NO_REMAINING_BALANCE
  EXACT_TIME
  TIME_AFTER_CHECKOUT
}

enum SellingPlanReserve
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ON_FULFILLMENT
  ON_SALE
}

type SEO
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  title: String
}

input SEOInput
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  title: String
  description: String
}

type ShippingLine
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  carrierIdentifier: String
  code: String
  custom: Boolean!
  deliveryCategory: String
  discountAllocations: [DiscountAllocation!]!
  discountedPriceSet: MoneyBag!
  id: ID
  originalPriceSet: MoneyBag!
  phone: String
  requestedFulfillmentService: FulfillmentService
  shippingRateHandle: String
  source: String
  taxLines: [TaxLine!]!
  title: String!
}

type ShippingLineConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [ShippingLineEdge!]!
  nodes: [ShippingLine!]!
  pageInfo: PageInfo!
}

type ShippingLineEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: ShippingLine!
}

type ShippingRefund
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amountSet: MoneyBag!
  maximumRefundableSet: MoneyBag!
  taxSet: MoneyBag!
}

type Shop implements HasMetafields & HasPublishedTranslations & Node
  @join__implements(graph: SHOP, interface: "HasMetafields")
  @join__implements(graph: SHOP, interface: "HasPublishedTranslations")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: PRODUCT, key: "id")
  @join__type(graph: SHOP, key: "id")
{
  id: ID!
  alerts: [ShopAlert!]! @join__field(graph: SHOP)
  allProductCategories: [ProductCategory!]! @join__field(graph: SHOP)
  assignedFulfillmentOrders(after: String, assignmentStatus: FulfillmentOrderAssignmentStatus, before: String, first: Int, last: Int, locationIds: [ID!], reverse: Boolean = false, sortKey: FulfillmentOrderSortKeys = ID): FulfillmentOrderConnection! @join__field(graph: SHOP)
  availableChannelApps(after: String, before: String, first: Int, last: Int, reverse: Boolean = false): AppConnection! @join__field(graph: SHOP)
  billingAddress: MailingAddress! @join__field(graph: SHOP)
  channelDefinitionsForInstalledChannels: [AvailableChannelDefinitionsByChannel!]! @join__field(graph: SHOP)
  checkoutApiSupported: Boolean! @join__field(graph: SHOP)
  contactEmail: String! @join__field(graph: SHOP)
  countriesInShippingZones: CountriesInShippingZones! @join__field(graph: SHOP)
  currencyCode: CurrencyCode! @join__field(graph: SHOP)
  currencyFormats: CurrencyFormats! @join__field(graph: SHOP)
  currencySettings(after: String, before: String, first: Int, last: Int, reverse: Boolean = false): CurrencySettingConnection! @join__field(graph: SHOP)
  customerAccounts: ShopCustomerAccountsSetting! @join__field(graph: SHOP)
  customerTags(first: Int!): StringConnection! @join__field(graph: SHOP)
  description: String @join__field(graph: SHOP)
  draftOrderTags(first: Int!): StringConnection! @join__field(graph: SHOP)
  email: String! @join__field(graph: SHOP)
  enabledPresentmentCurrencies: [CurrencyCode!]! @join__field(graph: SHOP)
  features: ShopFeatures! @join__field(graph: SHOP)
  fulfillmentServices: [FulfillmentService!]! @join__field(graph: SHOP)
  ianaTimezone: String! @join__field(graph: SHOP)
  limitedPendingOrderCount: LimitedPendingOrderCount! @join__field(graph: SHOP)
  merchantApprovalSignals: MerchantApprovalSignals @join__field(graph: SHOP)
  metafield(key: String!, namespace: String!): Metafield @join__field(graph: SHOP)
  metafields(after: String, before: String, first: Int, last: Int, namespace: String, reverse: Boolean = false): MetafieldConnection! @join__field(graph: SHOP)
  myshopifyDomain: String! @join__field(graph: SHOP)
  name: String! @join__field(graph: SHOP)
  navigationSettings: [NavigationItem!]! @join__field(graph: SHOP)
  orderNumberFormatPrefix: String! @join__field(graph: SHOP)
  orderNumberFormatSuffix: String! @join__field(graph: SHOP)
  orderTags(first: Int!, sort: ShopTagSort = ALPHABETICAL): StringConnection! @join__field(graph: SHOP)
  paymentSettings: PaymentSettings! @join__field(graph: SHOP)
  plan: ShopPlan! @join__field(graph: SHOP)
  primaryDomain: Domain! @join__field(graph: SHOP)
  privateMetafield(key: String!, namespace: String!): PrivateMetafield @join__field(graph: SHOP)
  privateMetafields(after: String, before: String, first: Int, last: Int, namespace: String, reverse: Boolean = false): PrivateMetafieldConnection! @join__field(graph: SHOP)
  productImages(after: String, before: String, first: Int, last: Int, reverse: Boolean = false, sortKey: ProductImageSortKeys = CREATED_AT): ImageConnection! @join__field(graph: SHOP)
  productTags(first: Int!): StringConnection! @join__field(graph: SHOP)
  productTypes(first: Int!): StringConnection! @join__field(graph: SHOP)
  productVendors(first: Int!): StringConnection! @join__field(graph: SHOP)
  publicationCount: Int! @join__field(graph: SHOP)
  resourceLimits: ShopResourceLimits! @join__field(graph: SHOP)
  richTextEditorUrl: URL! @join__field(graph: SHOP)
  search(after: String, first: Int!, query: String!, types: [SearchResultType!]): SearchResultConnection! @join__field(graph: SHOP)
  searchFilters: SearchFilterOptions! @join__field(graph: SHOP)
  setupRequired: Boolean! @join__field(graph: SHOP)
  shipsToCountries: [CountryCode!]! @join__field(graph: SHOP)
  shopPolicies: [ShopPolicy!]! @join__field(graph: SHOP)
  staffMembers(after: String, before: String, first: Int, last: Int, reverse: Boolean = false): StaffMemberConnection! @join__field(graph: SHOP)
  storefrontAccessTokens(after: String, before: String, first: Int, last: Int, reverse: Boolean = false): StorefrontAccessTokenConnection! @join__field(graph: SHOP)
  taxShipping: Boolean! @join__field(graph: SHOP)
  taxesIncluded: Boolean! @join__field(graph: SHOP)
  timezoneAbbreviation: String! @join__field(graph: SHOP)
  timezoneOffset: String! @join__field(graph: SHOP)
  timezoneOffsetMinutes: Int! @join__field(graph: SHOP)
  transactionalSmsDisabled: Boolean! @join__field(graph: SHOP)
  translations(locale: String!, marketId: ID): [PublishedTranslation!]! @join__field(graph: SHOP)
  unitSystem: UnitSystem! @join__field(graph: SHOP)
  uploadedImagesByIds(imageIds: [ID!]!): [Image!]! @join__field(graph: SHOP)
  url: URL! @join__field(graph: SHOP)
  weightUnit: WeightUnit! @join__field(graph: SHOP)
}

type ShopAlert
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  action: ShopAlertAction!
  description: String!
}

type ShopAlertAction
  @join__type(graph: ORDER)
  @join__type(graph: SHOP)
{
  title: String!
  url: URL!
}

enum ShopBranding
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SHOPIFY_GOLD
  SHOPIFY_PLUS
  ROGERS
  SHOPIFY
}

enum ShopCustomerAccountsSetting
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  REQUIRED
  OPTIONAL
  DISABLED
}

type ShopFeatures
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  avalaraAvatax: Boolean!
  branding: ShopBranding!
  captcha: Boolean!
  captchaExternalDomains: Boolean!
  dynamicRemarketing: Boolean!
  eligibleForSubscriptionMigration: Boolean!
  eligibleForSubscriptions: Boolean!
  giftCards: Boolean!
  harmonizedSystemCode: Boolean!
  internationalDomains: Boolean!
  internationalPriceOverrides: Boolean!
  internationalPriceRules: Boolean!
  legacySubscriptionGatewayEnabled: Boolean!
  liveView: Boolean!
  onboardingVisual: Boolean!
  paypalExpressSubscriptionGatewayStatus: PaypalExpressSubscriptionsGatewayStatus!
  reports: Boolean!
  sellsSubscriptions: Boolean!
  showMetrics: Boolean!
  storefront: Boolean!
  usingShopifyBalance: Boolean!
}

type ShopifyPaymentsExtendedAuthorization
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  extendedAuthorizationExpiresAt: DateTime!
  standardAuthorizationExpiresAt: DateTime!
}

type ShopifyPaymentsRefundSet
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  acquirerReferenceNumber: String
}

type ShopifyPaymentsTransactionSet
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  extendedAuthorizationSet: ShopifyPaymentsExtendedAuthorization
  refundSet: ShopifyPaymentsRefundSet
}

type ShopPlan
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  displayName: String!
  partnerDevelopment: Boolean!
  shopifyPlus: Boolean!
}

type ShopPolicy implements HasPublishedTranslations & Node
  @join__implements(graph: CUSTOMER, interface: "HasPublishedTranslations")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "HasPublishedTranslations")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "HasPublishedTranslations")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "HasPublishedTranslations")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  body: HTML!
  id: ID!
  translations(locale: String!, marketId: ID): [PublishedTranslation!]!
  type: ShopPolicyType!
  url: URL!
}

enum ShopPolicyType
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  REFUND_POLICY
  SHIPPING_POLICY
  PRIVACY_POLICY
  TERMS_OF_SERVICE
  TERMS_OF_SALE
  LEGAL_NOTICE
  SUBSCRIPTION_POLICY
}

type ShopResourceLimits
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  locationLimit: Int!
  maxProductOptions: Int!
  maxProductVariants: Int!
  redirectLimitReached: Boolean!
  skuResourceLimits: ResourceLimit!
}

enum ShopTagSort
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ALPHABETICAL
  POPULAR
}

type StaffMember implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  active: Boolean!
  avatar(fallback: StaffMemberDefaultImage = DEFAULT): Image!
  email: String!
  exists: Boolean!
  firstName: String
  id: ID!
  initials: [String!]
  isShopOwner: Boolean!
  lastName: String
  locale: String!
  name: String!
  phone: String
  privateData: StaffMemberPrivateData!
}

type StaffMemberConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [StaffMemberEdge!]!
  nodes: [StaffMember!]!
  pageInfo: PageInfo!
}

enum StaffMemberDefaultImage
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  DEFAULT
  TRANSPARENT
  NOT_FOUND
}

type StaffMemberEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: StaffMember!
}

type StaffMemberPrivateData
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  accountSettingsUrl: URL!
  createdAt: DateTime!
}

input StandardizedProductTypeInput
  @join__type(graph: PRODUCT)
{
  productTaxonomyNodeId: ID!
}

type StandardMetafieldDefinitionTemplate implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  description: String
  id: ID!
  key: String!
  name: String!
  namespace: String!
  ownerTypes: [MetafieldOwnerType!]!
  type: MetafieldDefinitionType!
  validations: [MetafieldDefinitionValidation!]!
  visibleToStorefrontApi: Boolean!
}

type StorefrontAccessToken implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  accessScopes: [AccessScope!]!
  accessToken: String!
  createdAt: DateTime!
  id: ID!
  title: String!
  updatedAt: DateTime!
}

type StorefrontAccessTokenConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [StorefrontAccessTokenEdge!]!
  nodes: [StorefrontAccessToken!]!
  pageInfo: PageInfo!
}

type StorefrontAccessTokenEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: StorefrontAccessToken!
}

type StringConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [StringEdge!]!
  pageInfo: PageInfo!
}

type StringEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: String!
}

type SubscriptionAppliedCodeDiscount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  id: ID!
  redeemCode: String!
  rejectionReason: SubscriptionDiscountRejectionReason
}

type SubscriptionBillingAttempt implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  completedAt: DateTime
  createdAt: DateTime!
  errorCode: SubscriptionBillingAttemptErrorCode
  errorMessage: String
  id: ID!
  idempotencyKey: String!
  nextActionUrl: URL
  order: Order
  originTime: DateTime
  ready: Boolean!
  subscriptionContract: SubscriptionContract!
}

type SubscriptionBillingAttemptConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SubscriptionBillingAttemptEdge!]!
  nodes: [SubscriptionBillingAttempt!]!
  pageInfo: PageInfo!
}

type SubscriptionBillingAttemptEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SubscriptionBillingAttempt!
}

enum SubscriptionBillingAttemptErrorCode
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  PAYMENT_METHOD_NOT_FOUND
  PAYMENT_PROVIDER_IS_NOT_ENABLED
  INVALID_PAYMENT_METHOD
  UNEXPECTED_ERROR
  EXPIRED_PAYMENT_METHOD
  PAYMENT_METHOD_DECLINED
  AUTHENTICATION_ERROR
  TEST_MODE
  BUYER_CANCELED_PAYMENT_METHOD
  CUSTOMER_NOT_FOUND
  CUSTOMER_INVALID
  INVALID_SHIPPING_ADDRESS
  INVALID_CUSTOMER_BILLING_AGREEMENT
  INVOICE_ALREADY_PAID
  PAYMENT_METHOD_INCOMPATIBLE_WITH_GATEWAY_CONFIG
  AMOUNT_TOO_SMALL
}

type SubscriptionBillingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  anchors: [SellingPlanAnchor!]!
  interval: SellingPlanInterval!
  intervalCount: Int!
  maxCycles: Int
  minCycles: Int
}

type SubscriptionContract implements Node & SubscriptionContractBase
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: CUSTOMER, interface: "SubscriptionContractBase")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: ORDER, interface: "SubscriptionContractBase")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "SubscriptionContractBase")
  @join__implements(graph: SHOP, interface: "Node")
  @join__implements(graph: SHOP, interface: "SubscriptionContractBase")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App
  appAdminUrl: URL
  billingAttempts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionBillingAttemptConnection!
  billingPolicy: SubscriptionBillingPolicy!
  createdAt: DateTime!
  currencyCode: CurrencyCode!
  customAttributes: [Attribute!]!
  customer: Customer
  customerPaymentMethod(showRevoked: Boolean = false): CustomerPaymentMethod
  deliveryMethod: SubscriptionDeliveryMethod
  deliveryPolicy: SubscriptionDeliveryPolicy!
  deliveryPrice: MoneyV2!
  discounts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionManualDiscountConnection!
  id: ID!
  lastPaymentStatus: SubscriptionContractLastPaymentStatus
  lineCount: Int!
  lines(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionLineConnection!
  nextBillingDate: DateTime
  note: String
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): OrderConnection!
  originOrder: Order
  status: SubscriptionContractSubscriptionStatus!
  updatedAt: DateTime!
}

interface SubscriptionContractBase
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  app: App
  appAdminUrl: URL
  currencyCode: CurrencyCode!
  customAttributes: [Attribute!]!
  customer: Customer
  customerPaymentMethod(showRevoked: Boolean = false): CustomerPaymentMethod
  deliveryMethod: SubscriptionDeliveryMethod
  deliveryPrice: MoneyV2!
  discounts(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionManualDiscountConnection!
  lineCount: Int!
  lines(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionLineConnection!
  note: String
  orders(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): OrderConnection!
  updatedAt: DateTime!
}

type SubscriptionContractConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SubscriptionContractEdge!]!
  nodes: [SubscriptionContract!]!
  pageInfo: PageInfo!
}

type SubscriptionContractEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SubscriptionContract!
}

enum SubscriptionContractLastPaymentStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SUCCEEDED
  FAILED
}

enum SubscriptionContractSubscriptionStatus
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  ACTIVE
  PAUSED
  CANCELLED
  EXPIRED
  FAILED
}

type SubscriptionCyclePriceAdjustment
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!
  afterCycle: Int!
  computedPrice: MoneyV2!
}

union SubscriptionDeliveryMethod
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SubscriptionDeliveryMethodLocalDelivery | SubscriptionDeliveryMethodPickup | SubscriptionDeliveryMethodShipping

type SubscriptionDeliveryMethodLocalDelivery
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address: SubscriptionMailingAddress!
  localDeliveryOption: SubscriptionDeliveryMethodLocalDeliveryOption!
}

type SubscriptionDeliveryMethodLocalDeliveryOption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: String
  description: String
  instructions: String
  phone: String!
  presentmentTitle: String
  title: String
}

type SubscriptionDeliveryMethodPickup
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  pickupOption: SubscriptionDeliveryMethodPickupOption!
}

type SubscriptionDeliveryMethodPickupOption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  code: String
  description: String
  location: Location!
  presentmentTitle: String
  title: String
}

type SubscriptionDeliveryMethodShipping
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address: SubscriptionMailingAddress!
  shippingOption: SubscriptionDeliveryMethodShippingOption!
}

type SubscriptionDeliveryMethodShippingOption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  carrierService: DeliveryCarrierService
  code: String
  description: String
  presentmentTitle: String
  title: String
}

type SubscriptionDeliveryPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  anchors: [SellingPlanAnchor!]!
  interval: SellingPlanInterval!
  intervalCount: Int!
}

union SubscriptionDiscount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SubscriptionAppliedCodeDiscount | SubscriptionManualDiscount

type SubscriptionDiscountAllocation
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  discount: SubscriptionDiscount!
}

type SubscriptionDiscountEntitledLines
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  all: Boolean!
  lines(first: Int, after: String, last: Int, before: String, reverse: Boolean = false): SubscriptionLineConnection!
}

type SubscriptionDiscountFixedAmountValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  appliesOnEachItem: Boolean!
}

type SubscriptionDiscountPercentageValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  percentage: Int!
}

enum SubscriptionDiscountRejectionReason
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  NOT_FOUND
  NO_ENTITLED_LINE_ITEMS
  QUANTITY_NOT_IN_RANGE
  PURCHASE_NOT_IN_RANGE
  CUSTOMER_NOT_ELIGIBLE
  USAGE_LIMIT_REACHED
  CUSTOMER_USAGE_LIMIT_REACHED
  CURRENTLY_INACTIVE
  NO_ENTITLED_SHIPPING_LINES
  INCOMPATIBLE_PURCHASE_TYPE
  INTERNAL_ERROR
}

union SubscriptionDiscountValue
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
 = SubscriptionDiscountFixedAmountValue | SubscriptionDiscountPercentageValue

type SubscriptionLine
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  currentPrice: MoneyV2!
  customAttributes: [Attribute!]!
  discountAllocations: [SubscriptionDiscountAllocation!]!
  id: ID!
  lineDiscountedPrice: MoneyV2!
  pricingPolicy: SubscriptionPricingPolicy
  productId: ID
  quantity: Int!
  requiresShipping: Boolean!
  sellingPlanId: ID
  sellingPlanName: String
  sku: String
  taxable: Boolean!
  title: String!
  variantId: ID
  variantImage: Image
  variantTitle: String
}

type SubscriptionLineConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SubscriptionLineEdge!]!
  nodes: [SubscriptionLine!]!
  pageInfo: PageInfo!
}

type SubscriptionLineEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SubscriptionLine!
}

type SubscriptionMailingAddress
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  address1: String
  address2: String
  city: String
  company: String
  country: String
  countryCode: CountryCode
  firstName: String
  lastName: String
  name: String
  phone: String
  province: String
  provinceCode: String
  zip: String
}

type SubscriptionManualDiscount
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  entitledLines: SubscriptionDiscountEntitledLines!
  id: ID!
  recurringCycleLimit: Int
  rejectionReason: SubscriptionDiscountRejectionReason
  targetType: DiscountTargetType!
  title: String
  type: DiscountType!
  usageCount: Int!
  value: SubscriptionDiscountValue!
}

type SubscriptionManualDiscountConnection
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  edges: [SubscriptionManualDiscountEdge!]!
  nodes: [SubscriptionManualDiscount!]!
  pageInfo: PageInfo!
}

type SubscriptionManualDiscountEdge
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  cursor: String!
  node: SubscriptionManualDiscount!
}

type SubscriptionPricingPolicy
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  basePrice: MoneyV2!
  cycleDiscounts: [SubscriptionCyclePriceAdjustment!]!
}

type SuggestedOrderTransaction
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  accountNumber: String
  amountSet: MoneyBag!
  formattedGateway: String
  gateway: String
  kind: SuggestedOrderTransactionKind!
  maximumRefundableSet: MoneyBag
  parentTransaction: OrderTransaction
}

enum SuggestedOrderTransactionKind
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  SUGGESTED_REFUND
}

type SuggestedRefund
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amountSet: MoneyBag!
  discountedSubtotalSet: MoneyBag!
  maximumRefundableSet: MoneyBag!
  refundDuties: [RefundDuty!]!
  refundLineItems: [RefundLineItem!]!
  shipping: ShippingRefund!
  subtotalSet: MoneyBag!
  suggestedTransactions: [SuggestedOrderTransaction!]!
  totalCartDiscountAmountSet: MoneyBag!
  totalDutiesSet: MoneyBag!
  totalTaxSet: MoneyBag!
}

enum TaxExemption
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  CA_STATUS_CARD_EXEMPTION
  CA_BC_RESELLER_EXEMPTION
  CA_MB_RESELLER_EXEMPTION
  CA_SK_RESELLER_EXEMPTION
  CA_DIPLOMAT_EXEMPTION
  CA_BC_COMMERCIAL_FISHERY_EXEMPTION
  CA_MB_COMMERCIAL_FISHERY_EXEMPTION
  CA_NS_COMMERCIAL_FISHERY_EXEMPTION
  CA_PE_COMMERCIAL_FISHERY_EXEMPTION
  CA_SK_COMMERCIAL_FISHERY_EXEMPTION
  CA_BC_PRODUCTION_AND_MACHINERY_EXEMPTION
  CA_SK_PRODUCTION_AND_MACHINERY_EXEMPTION
  CA_BC_SUB_CONTRACTOR_EXEMPTION
  CA_SK_SUB_CONTRACTOR_EXEMPTION
  CA_BC_CONTRACTOR_EXEMPTION
  CA_SK_CONTRACTOR_EXEMPTION
  CA_ON_PURCHASE_EXEMPTION
  CA_MB_FARMER_EXEMPTION
  CA_NS_FARMER_EXEMPTION
  CA_SK_FARMER_EXEMPTION
  EU_REVERSE_CHARGE_EXEMPTION_RULE
  US_AL_RESELLER_EXEMPTION
  US_AK_RESELLER_EXEMPTION
  US_AZ_RESELLER_EXEMPTION
  US_AR_RESELLER_EXEMPTION
  US_CA_RESELLER_EXEMPTION
  US_CO_RESELLER_EXEMPTION
  US_CT_RESELLER_EXEMPTION
  US_DE_RESELLER_EXEMPTION
  US_FL_RESELLER_EXEMPTION
  US_GA_RESELLER_EXEMPTION
  US_HI_RESELLER_EXEMPTION
  US_ID_RESELLER_EXEMPTION
  US_IL_RESELLER_EXEMPTION
  US_IN_RESELLER_EXEMPTION
  US_IA_RESELLER_EXEMPTION
  US_KS_RESELLER_EXEMPTION
  US_KY_RESELLER_EXEMPTION
  US_LA_RESELLER_EXEMPTION
  US_ME_RESELLER_EXEMPTION
  US_MD_RESELLER_EXEMPTION
  US_MA_RESELLER_EXEMPTION
  US_MI_RESELLER_EXEMPTION
  US_MN_RESELLER_EXEMPTION
  US_MS_RESELLER_EXEMPTION
  US_MO_RESELLER_EXEMPTION
  US_MT_RESELLER_EXEMPTION
  US_NE_RESELLER_EXEMPTION
  US_NV_RESELLER_EXEMPTION
  US_NH_RESELLER_EXEMPTION
  US_NJ_RESELLER_EXEMPTION
  US_NM_RESELLER_EXEMPTION
  US_NY_RESELLER_EXEMPTION
  US_NC_RESELLER_EXEMPTION
  US_ND_RESELLER_EXEMPTION
  US_OH_RESELLER_EXEMPTION
  US_OK_RESELLER_EXEMPTION
  US_OR_RESELLER_EXEMPTION
  US_PA_RESELLER_EXEMPTION
  US_RI_RESELLER_EXEMPTION
  US_SC_RESELLER_EXEMPTION
  US_SD_RESELLER_EXEMPTION
  US_TN_RESELLER_EXEMPTION
  US_TX_RESELLER_EXEMPTION
  US_UT_RESELLER_EXEMPTION
  US_VT_RESELLER_EXEMPTION
  US_VA_RESELLER_EXEMPTION
  US_WA_RESELLER_EXEMPTION
  US_WV_RESELLER_EXEMPTION
  US_WI_RESELLER_EXEMPTION
  US_WY_RESELLER_EXEMPTION
  US_DC_RESELLER_EXEMPTION
}

type TaxLine
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  channelLiable: Boolean
  priceSet: MoneyBag!
  rate: Float
  ratePercentage: Float
  title: String!
}

type TransactionFee implements Node
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  amount: MoneyV2!
  flatFee: MoneyV2!
  flatFeeName: String
  id: ID!
  rate: Decimal!
  rateName: String
  taxAmount: MoneyV2!
  type: String!
}

type TypedAttribute
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  key: String!
  value: String!
}

enum UnitSystem
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  IMPERIAL_SYSTEM
  METRIC_SYSTEM
}

scalar UnsignedInt64
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

input UpdateMediaInput
  @join__type(graph: PRODUCT)
{
  id: ID!
  previewImageSource: String
  alt: String
}

scalar URL
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)

type UserError implements DisplayableError
  @join__implements(graph: CUSTOMER, interface: "DisplayableError")
  @join__implements(graph: ORDER, interface: "DisplayableError")
  @join__implements(graph: PRODUCT, interface: "DisplayableError")
  @join__implements(graph: SHOP, interface: "DisplayableError")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  field: [String!]
  message: String!
}

type UTMParameters
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  campaign: String
  content: String
  medium: String
  source: String
  term: String
}

type VaultCreditCard
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  billingAddress: CustomerCreditCardBillingAddress
  brand: String!
  expired: Boolean!
  expiryMonth: Int!
  expiryYear: Int!
  lastDigits: String!
  name: String!
}

type VaultPaypalBillingAgreement
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  inactive: Boolean!
  name: String!
  paypalAccountEmail: String!
}

type Video implements File & Media & Node
  @join__implements(graph: CUSTOMER, interface: "File")
  @join__implements(graph: CUSTOMER, interface: "Media")
  @join__implements(graph: CUSTOMER, interface: "Node")
  @join__implements(graph: ORDER, interface: "File")
  @join__implements(graph: ORDER, interface: "Media")
  @join__implements(graph: ORDER, interface: "Node")
  @join__implements(graph: PRODUCT, interface: "File")
  @join__implements(graph: PRODUCT, interface: "Media")
  @join__implements(graph: PRODUCT, interface: "Node")
  @join__implements(graph: SHOP, interface: "File")
  @join__implements(graph: SHOP, interface: "Media")
  @join__implements(graph: SHOP, interface: "Node")
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  alt: String
  createdAt: DateTime!
  duration: Int
  fileErrors: [FileError!]!
  fileStatus: FileStatus!
  filename: String!
  id: ID!
  mediaContentType: MediaContentType!
  mediaErrors: [MediaError!]!
  mediaWarnings: [MediaWarning!]!
  originalSource: VideoSource
  preview: MediaPreviewImage
  sources: [VideoSource!]!
  status: MediaStatus!
}

type VideoSource
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  fileSize: Int
  format: String!
  height: Int!
  mimeType: String!
  url: String!
  width: Int!
}

type Weight
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  unit: WeightUnit!
  value: Float!
}

enum WeightUnit
  @join__type(graph: CUSTOMER)
  @join__type(graph: ORDER)
  @join__type(graph: PRODUCT)
  @join__type(graph: SHOP)
{
  KILOGRAMS
  GRAMS
  POUNDS
  OUNCES
}

directive @inContext(
    language: LanguageCode,
    country: CountryCode
) on QUERY | MUTATION | OBJECT
