schema {
  query: QueryRoot
  mutation: Mutation
}

"""
Requires that exactly one field must be supplied and that field must not be `null`.
"""
directive @oneOf on INPUT_OBJECT

"""Marks an element of a GraphQL schema as having restricted access."""
directive @accessRestricted(
  """Explains the reason around this restriction"""
  reason: String = null
) on FIELD_DEFINITION | OBJECT

"""
Provides a weighted cost for GraphQL fields and types while calculating the complexity of a request during static analysis.
"""
directive @cost(
  """
  Specifies a cost added to request complexity for each possible appearance of
  the tagged schema element. A `weight` value may be a serialized float or
  string formula.
  """
  weight: String!
) on FIELD_DEFINITION | OBJECT

"""
Provides the maximum possible size of a returned list, or how to inspect this
information in a request. This value is used during static analysis to calculate
the overall complexity of a request.
"""
directive @listSize(
  """Statically defines the maximum possible size of the returned list."""
  assumedSize: Int

  """
  The names of numeric slicing arguments that can statically define the maximum length of the returned list.
  """
  slicingArguments: [String!]

  """
  The names of list sub-fields that adhere to the maximum length defined by `assumedSize` and `slicingArguments`.
  """
  sizedFields: [String!]

  """
  Informs static analysis to expect exactly one of the defined slicing arguments to be present in a query.
  """
  requireOneSlicingArgument: Boolean = true
) on FIELD_DEFINITION

"""
Direct the client to resolve this field locally, either from the cache or local resolvers.
"""
directive @client(
  """
  When true, the client will never use the cache for this value. See
  https://www.apollographql.com/docs/react/essentials/local-state/#forcing-resolvers-with-clientalways-true
  """
  always: Boolean
) on FIELD | FRAGMENT_DEFINITION | INLINE_FRAGMENT

"""
Export this locally resolved field as a variable to be used in the remainder of this query. See
https://www.apollographql.com/docs/react/essentials/local-state/#using-client-fields-as-variables
"""
directive @export(
  """The variable name to export this field as."""
  as: String!
) on FIELD

"""
Specify a custom store key for this result. See
https://www.apollographql.com/docs/react/advanced/caching/#the-connection-directive
"""
directive @connection(
  """Specify the store key."""
  key: String!

  """
  An array of query argument names to include in the generated custom store key.
  """
  filter: [String!]
) on FIELD

"""A checkout that was abandoned by the customer."""
type AbandonedCheckout implements Navigable & Node {
  """The URL for the buyer to recover their checkout."""
  abandonedCheckoutUrl: URL!

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """A globally-unique ID."""
  id: ID!

  """The number of products in the checkout."""
  lineItemsQuantity: Int!

  """
  The sum of all items in the checkout, including discounts, shipping, taxes, and tips.
  """
  totalPriceSet: MoneyBag!
}

"""A browse, cart, or checkout that was abandoned by a customer."""
type Abandonment implements Node {
  """The abandonment payload for the abandoned checkout."""
  abandonedCheckoutPayload: AbandonedCheckout

  """The abandonment type."""
  abandonmentType: AbandonmentAbandonmentType!

  """The app associated with an abandoned checkout."""
  app: App!

  """The date and time when the abandonment was created."""
  createdAt: DateTime!

  """The customer who abandoned this event."""
  customer: Customer!

  """
  Whether the customer has completed an order since this checkout has been abandoned.
  """
  customerHasNoOrderSinceAbandonment: Boolean!

  """
  The number of days since the last abandonment email was sent to the customer.
  """
  daysSinceLastAbandonmentEmail: Int!

  """When the email was sent, if that's the case."""
  emailSentAt: DateTime

  """The email state (e.g., sent or not sent)."""
  emailState: AbandonmentEmailState

  """The number of hours since the customer has last abandoned a checkout."""
  hoursSinceLastAbandonedCheckout: Float

  """A globally-unique ID."""
  id: ID!

  """Whether the products in abandonment are available."""
  inventoryAvailable: Boolean!

  """
  Whether the abandonment event comes from the Online Store sales channel.
  """
  isFromOnlineStore: Boolean!

  """Whether the abandonment event comes from the Shop app sales channel."""
  isFromShopApp: Boolean!

  """Whether the abandonment event comes from Shop Pay."""
  isFromShopPay: Boolean!

  """
  Whether the customer didn't complete another most significant step since this abandonment.
  """
  isMostSignificantAbandonment: Boolean!

  """The date for the latest browse abandonment."""
  lastBrowseAbandonmentDate: DateTime!

  """The date for the latest cart abandonment."""
  lastCartAbandonmentDate: DateTime!

  """The date for the latest checkout abandonment."""
  lastCheckoutAbandonmentDate: DateTime!

  """The most recent step type."""
  mostRecentStep: AbandonmentAbandonmentType!

  """The products added to the cart during the customer abandoned visit."""
  productsAddedToCart(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CustomerVisitProductInfoConnection!

  """The products viewed during the customer abandoned visit."""
  productsViewed(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CustomerVisitProductInfoConnection!

  """The date and time when the visit started."""
  visitStartedAt: DateTime
}

"""Specifies the abandonment type."""
enum AbandonmentAbandonmentType {
  """The abandonment event is an abandoned browse."""
  BROWSE

  """The abandonment event is an abandoned cart."""
  CART

  """The abandonment event is an abandoned checkout."""
  CHECKOUT
}

"""Specifies the email state."""
enum AbandonmentEmailState {
  """The email has not yet been sent."""
  NOT_SENT

  """The email has been sent."""
  SENT

  """The email has been scheduled for later delivery."""
  SCHEDULED
}

"""Return type for `abandonmentEmailStateUpdate` mutation."""
type AbandonmentEmailStateUpdatePayload {
  """The updated abandonment."""
  abandonment: Abandonment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [AbandonmentEmailStateUpdateUserError!]!
}

"""
An error that occurs during the execution of `AbandonmentEmailStateUpdate`.
"""
type AbandonmentEmailStateUpdateUserError implements DisplayableError {
  """The error code."""
  code: AbandonmentEmailStateUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `AbandonmentEmailStateUpdateUserError`.
"""
enum AbandonmentEmailStateUpdateUserErrorCode {
  """Unable to find an Abandonment for the provided ID."""
  ABANDONMENT_NOT_FOUND
}

"""
The permission required to access a Shopify Admin API or Storefront API resource
for a shop. Merchants grant access scopes that are requested by applications.
"""
type AccessScope {
  """
  A description of the actions that the access scope allows an app to perform.
  """
  description: String!

  """
  A readable string that represents the access scope. The string usually follows
  the format `{action}_{resource}`. `{action}` is `read` or `write`, and
  `{resource}` is the resource that the action can be performed on. `{action}`
  and `{resource}` are separated by an underscore. For example, `read_orders` or
  `write_products`.
  """
  handle: String!
}

"""A sale associated with an order price adjustment."""
type AdjustmentSale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""Targets all items the cart for a specified discount."""
type AllDiscountItems {
  """
  Whether all items are eligible for the discount. This value always returns `true`.
  """
  allItems: Boolean!
}

"""
A version of the API, as defined by [Shopify API versioning](https://shopify.dev/api/usage/versioning).
Versions are commonly referred to by their handle (for example, `2021-10`).
"""
type ApiVersion {
  """The human-readable name of the version."""
  displayName: String!

  """
  The unique identifier of an ApiVersion. All supported API versions have a date-based (YYYY-MM) or `unstable` handle.
  """
  handle: String!

  """
  Whether the version is actively supported by Shopify. Supported API versions
  are guaranteed to be stable. Unsupported API versions include unstable,
  release candidate, and end-of-life versions that are marked as unsupported.
  For more information, refer to
  [Versioning](https://shopify.dev/api/usage/versioning).
  """
  supported: Boolean!
}

"""A Shopify application."""
type App implements Node {
  """A unique application API identifier."""
  apiKey: String!

  """App store page URL of the app."""
  appStoreAppUrl: URL

  """App store page URL of the developer who created the app."""
  appStoreDeveloperUrl: URL

  """The access scopes available to the app."""
  availableAccessScopes: [AccessScope!]!

  """Banner image for the app."""
  banner: Image!

  """Description of the app."""
  description: String

  """The name of the app developer."""
  developerName: String

  """The type of app developer."""
  developerType: AppDeveloperType!

  """Website of the developer who created the app."""
  developerUrl: URL! @deprecated(reason: "Use `appStoreDeveloperUrl` instead.")

  """Whether the app uses the Embedded App SDK."""
  embedded: Boolean!

  """Requirements that must be met before the app can be installed."""
  failedRequirements: [FailedRequirement!]!

  """
  A list of app features that are shown in the Shopify App Store listing.
  """
  features: [String!]!

  """Feedback from this app about the store."""
  feedback: AppFeedback

  """Handle of the app."""
  handle: String

  """Icon that represents the app."""
  icon: Image!

  """A globally-unique ID."""
  id: ID!

  """Webpage where you can install the app."""
  installUrl: URL

  """
  Corresponding AppInstallation for this shop and App.
  Returns null if the App is not installed.
  """
  installation: AppInstallation

  """
  Whether the app is the [post purchase](https://shopify.dev/apps/checkout/post-purchase) app in use.
  """
  isPostPurchaseAppInUse: Boolean!

  """Webpage that the app starts in."""
  launchUrl: URL! @deprecated(reason: "Use AppInstallation.launchUrl instead")

  """
  Menu items for the app, which also appear as submenu items in left navigation sidebar in the Shopify admin.
  """
  navigationItems: [NavigationItem!]! @deprecated(reason: "Use AppInstallation.navigationItems instead")

  """Whether the app was previously installed on the current shop."""
  previouslyInstalled: Boolean!

  """Detailed information about the app pricing."""
  pricingDetails: String

  """Summary of the app pricing details."""
  pricingDetailsSummary: String!

  """Link to app privacy policy."""
  privacyPolicyUrl: URL

  """The public category for the app."""
  publicCategory: AppPublicCategory!

  """Whether the app is published to the Shopify App Store."""
  published: Boolean!

  """The access scopes requested by the app."""
  requestedAccessScopes: [AccessScope!]!

  """Screenshots of the app."""
  screenshots: [Image!]!

  """Whether the app was developed by Shopify."""
  shopifyDeveloped: Boolean!

  """Name of the app."""
  title: String!

  """
  Message that appears when the app is uninstalled. For example:
  By removing this app, you will no longer be able to publish products to
  MySocialSite or view this app in your Shopify admin. You can re-enable this
  channel at any time.
  """
  uninstallMessage: String!

  """Webpage where you can uninstall the app."""
  uninstallUrl: URL @deprecated(reason: "Use AppInstallation.uninstallUrl instead")

  """The webhook API version for the app."""
  webhookApiVersion: String!
}

"""An auto-generated type for paginating through multiple Apps."""
type AppConnection {
  """A list of edges."""
  edges: [AppEdge!]!

  """A list of the nodes contained in AppEdge."""
  nodes: [App!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
App credits can be applied by the merchant towards future app purchases, subscriptions, or usage records in Shopify.
"""
type AppCredit implements Node {
  """The amount that can be used towards future app purchases in Shopify."""
  amount: MoneyV2!

  """The date and time when the app credit was created."""
  createdAt: DateTime!

  """The description of the app credit."""
  description: String!

  """A globally-unique ID."""
  id: ID!

  """Whether the app credit is a test transaction."""
  test: Boolean!
}

"""An auto-generated type for paginating through multiple AppCredits."""
type AppCreditConnection {
  """A list of edges."""
  edges: [AppCreditEdge!]!

  """A list of the nodes contained in AppCreditEdge."""
  nodes: [AppCredit!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `appCreditCreate` mutation."""
type AppCreditCreatePayload {
  """The newly created app credit."""
  appCredit: AppCredit

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one AppCredit and a cursor during pagination.
"""
type AppCreditEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppCreditEdge."""
  node: AppCredit!
}

"""Possible types of app developer."""
enum AppDeveloperType {
  """Indicates the app developer is Shopify."""
  SHOPIFY

  """Indicates the app developer is a Partner."""
  PARTNER

  """Indicates the app developer works directly for a Merchant."""
  MERCHANT

  """
  Indicates the app developer is unknown. It is not categorized as any of the other developer types.
  """
  UNKNOWN
}

"""A script that defines a discount type."""
type AppDiscountType {
  """The app providing the app discount type."""
  app: App!

  """The App Bridge details for discount type configuration."""
  appBridge: FunctionsAppBridge!

  """The client ID of the app providing the app discount type."""
  appKey: String!

  """A description of the app discount type."""
  description: String

  """The class of the app discount type."""
  discountClass: DiscountClass!

  """The ID of the function providing the app discount type."""
  functionId: String!

  """
  The target type of the app discount type. Possible values: `SHIPPING_LINE` and `LINE_ITEM`.
  """
  targetType: DiscountApplicationTargetType!

  """The title of the app discount type."""
  title: String!
}

"""
An auto-generated type which holds one App and a cursor during pagination.
"""
type AppEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppEdge."""
  node: App!
}

"""
Reports the status of shops and their resources and displays this information
within Shopify admin. AppFeedback is used to notify merchants about steps they need to take
to set up an app on their store.
"""
type AppFeedback {
  """The application associated to the feedback."""
  app: App!

  """A link to where merchants can resolve errors."""
  link: Link

  """The feedback message presented to the merchant."""
  messages: [UserError!]!
}

"""Represents an installed application on a shop."""
type AppInstallation implements HasMetafields & Node {
  """
  The access scopes granted to the application by a merchant during installation.
  """
  accessScopes: [AccessScope!]!

  """
  The active application subscriptions billed to the shop on a recurring basis.
  """
  activeSubscriptions: [AppSubscription!]!

  """All subscriptions created for a shop."""
  allSubscriptions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppSubscriptionSortKeys = CREATED_AT
  ): AppSubscriptionConnection!

  """Application which is installed."""
  app: App!

  """Channel associated with the installed application."""
  channel: Channel @deprecated(reason: "Use `publication` instead.")

  """Credits that can be used towards future app purchases."""
  credits(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppTransactionSortKeys = CREATED_AT
  ): AppCreditConnection!

  """A globally-unique ID."""
  id: ID!

  """The URL to launch the application."""
  launchUrl: URL!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """One-time purchases to a shop."""
  oneTimePurchases(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppTransactionSortKeys = CREATED_AT
  ): AppPurchaseOneTimeConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The publication associated with the installed application."""
  publication: Publication

  """
  The records that track the externally-captured revenue for the app. The records are used for revenue attribution purposes.
  """
  revenueAttributionRecords(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppRevenueAttributionRecordSortKeys = CREATED_AT
  ): AppRevenueAttributionRecordConnection!

  """Subscriptions charge to a shop on a recurring basis."""
  subscriptions: [AppSubscription!]! @deprecated(reason: "Use `activeSubscriptions` instead.")

  """The URL to uninstall the application."""
  uninstallUrl: URL
}

"""
The possible categories of an app installation, based on their purpose
or the environment they can run in.
"""
enum AppInstallationCategory {
  """
  Apps that serve as channels through which sales are made, such as the online store.
  """
  CHANNEL

  """Apps that can be used in the POS mobile client."""
  POS_EMBEDDED
}

"""
An auto-generated type for paginating through multiple AppInstallations.
"""
type AppInstallationConnection {
  """A list of edges."""
  edges: [AppInstallationEdge!]!

  """A list of the nodes contained in AppInstallationEdge."""
  nodes: [AppInstallation!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one AppInstallation and a cursor during pagination.
"""
type AppInstallationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppInstallationEdge."""
  node: AppInstallation!
}

"""The levels of privacy of an app installation."""
enum AppInstallationPrivacy {
  PUBLIC
  PRIVATE
}

"""The set of valid sort keys for the AppInstallation query."""
enum AppInstallationSortKeys {
  """Sort by the `installed_at` value."""
  INSTALLED_AT

  """Sort by the `app_title` value."""
  APP_TITLE

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
The pricing model for the app subscription.
The pricing model input can be either `appRecurringPricingDetails` or `appUsagePricingDetails`.
"""
input AppPlanInput {
  """The pricing details for usage-based billing."""
  appUsagePricingDetails: AppUsagePricingInput

  """The pricing details for recurring billing."""
  appRecurringPricingDetails: AppRecurringPricingInput
}

"""The app plan that the merchant is subscribed to."""
type AppPlanV2 {
  """The plan billed to a shop on a recurring basis."""
  pricingDetails: AppPricingDetails!
}

"""
The information about the price that's charged to a shop every plan period.
The concrete type can be `AppRecurringPricing` for recurring billing or `AppUsagePricing` for usage-based billing.
"""
union AppPricingDetails = AppRecurringPricing | AppUsagePricing

"""The frequency at which the shop is billed for an app subscription."""
enum AppPricingInterval {
  """The app subscription bills the shop annually."""
  ANNUAL

  """The app subscription bills the shop every 30 days."""
  EVERY_30_DAYS
}

"""The public-facing category for an app."""
enum AppPublicCategory {
  """
  The app's public category is [private](https://shopify.dev/apps/distribution#deprecated-app-types).
  """
  PRIVATE

  """
  The app's public category is [public](https://shopify.dev/apps/distribution#capabilities-and-requirements).
  """
  PUBLIC

  """
  The app's public category is [custom](https://shopify.dev/apps/distribution#capabilities-and-requirements).
  """
  CUSTOM

  """
  The app's public category is other. An app is in this category if it's not
  classified under any of the other app types (private, public, or custom).
  """
  OTHER
}

"""Services and features purchased once by the store."""
interface AppPurchase {
  """The date and time when the app purchase occurred."""
  createdAt: DateTime!

  """The name of the app purchase."""
  name: String!

  """The amount to be charged to the store for the app purchase."""
  price: MoneyV2!

  """The status of the app purchase."""
  status: AppPurchaseStatus!

  """Whether the app purchase is a test transaction."""
  test: Boolean!
}

"""Services and features purchased once by a store."""
type AppPurchaseOneTime implements AppPurchase & Node {
  """The date and time when the app purchase occurred."""
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The name of the app purchase."""
  name: String!

  """The amount to be charged to the store for the app purchase."""
  price: MoneyV2!

  """The status of the app purchase."""
  status: AppPurchaseStatus!

  """Whether the app purchase is a test transaction."""
  test: Boolean!
}

"""
An auto-generated type for paginating through multiple AppPurchaseOneTimes.
"""
type AppPurchaseOneTimeConnection {
  """A list of edges."""
  edges: [AppPurchaseOneTimeEdge!]!

  """A list of the nodes contained in AppPurchaseOneTimeEdge."""
  nodes: [AppPurchaseOneTime!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `appPurchaseOneTimeCreate` mutation."""
type AppPurchaseOneTimeCreatePayload {
  """The newly created app one-time purchase."""
  appPurchaseOneTime: AppPurchaseOneTime

  """
  The URL that the merchant can access to approve or decline the newly created app one-time purchase.
  
  If the merchant declines, then the merchant is redirected to the app and
  receives a notification message stating that the charge was declined.
  If the merchant approves and they're successfully invoiced, then the state of
  the charge changes from `pending` to `active`.
  
  You get paid after the charge is activated.
  """
  confirmationUrl: URL

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one AppPurchaseOneTime and a cursor during pagination.
"""
type AppPurchaseOneTimeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppPurchaseOneTimeEdge."""
  node: AppPurchaseOneTime!
}

"""
The approval status of the app purchase.

The merchant is charged for the purchase immediately after approval, and the status changes to `active`.
If the payment fails, then the app purchase remains `pending`.

Purchases start as `pending` and can change to: `active`, `declined`, `expired`. After a purchase changes, it
remains in that final state.
"""
enum AppPurchaseStatus {
  """
  The app purchase has been approved by the merchant and is ready to be
  activated by the app. App purchases created through the GraphQL Admin API are
  activated upon approval.
  """
  ACCEPTED @deprecated(reason: "As of API version 2021-01, when a merchant accepts an app purchase, the status immediately changes from `pending` to `active`.")

  """
  The app purchase was approved by the merchant and has been activated by the
  app. Active app purchases are charged to the merchant and are paid out to the partner.
  """
  ACTIVE

  """The app purchase was declined by the merchant."""
  DECLINED

  """The app purchase was not accepted within two days of being created."""
  EXPIRED

  """The app purchase is pending approval by the merchant."""
  PENDING
}

"""
The pricing information about a subscription app.
The object contains an interval (the frequency at which the shop is billed for an app subscription) and
a price (the amount to be charged to the subscribing shop at each interval).
"""
type AppRecurringPricing {
  """
  The discount applied to the subscription for a given number of billing intervals.
  """
  discount: AppSubscriptionDiscount

  """
  The frequency at which the subscribing shop is billed for an app subscription.
  """
  interval: AppPricingInterval!

  """
  The amount and currency to be charged to the subscribing shop every billing interval.
  """
  price: MoneyV2!
}

"""
Instructs the app subscription to generate a fixed charge on a recurring basis.
The frequency is specified by the billing interval.
"""
input AppRecurringPricingInput {
  """How often the app subscription generates a charge."""
  interval: AppPricingInterval = EVERY_30_DAYS

  """The amount to be charged to the store every billing interval."""
  price: MoneyInput!

  """
  The discount applied to the subscription for a given number of billing intervals.
  """
  discount: AppSubscriptionDiscountInput
}

"""Represents app revenue that was captured externally by the partner."""
type AppRevenueAttributionRecord implements Node {
  """The financial amount captured in this attribution."""
  amount: MoneyV2!

  """The timestamp when the financial amount was captured."""
  capturedAt: DateTime!

  """The timestamp at which this revenue attribution was issued."""
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """
  The unique value submitted during the creation of the app revenue attribution record.
  For more information, refer to
  [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests).
  """
  idempotencyKey: String!

  """Indicates whether this is a test submission."""
  test: Boolean!

  """The type of revenue attribution."""
  type: AppRevenueAttributionType!
}

"""
An auto-generated type for paginating through multiple AppRevenueAttributionRecords.
"""
type AppRevenueAttributionRecordConnection {
  """A list of edges."""
  edges: [AppRevenueAttributionRecordEdge!]!

  """A list of the nodes contained in AppRevenueAttributionRecordEdge."""
  nodes: [AppRevenueAttributionRecord!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `appRevenueAttributionRecordCreate` mutation."""
type AppRevenueAttributionRecordCreatePayload {
  """The created app revenue attribution record."""
  appRevenueAttributionRecord: AppRevenueAttributionRecord

  """The list of errors that occurred from executing the mutation."""
  userErrors: [AppRevenueAttributionRecordCreateUserError!]!
}

"""
An error that occurs during the execution of `AppRevenueAttributionRecordCreate`.
"""
type AppRevenueAttributionRecordCreateUserError implements DisplayableError {
  """The error code."""
  code: AppRevenueAttributionRecordCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `AppRevenueAttributionRecordCreateUserError`.
"""
enum AppRevenueAttributionRecordCreateUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is already taken."""
  TAKEN
}

"""Return type for `appRevenueAttributionRecordDelete` mutation."""
type AppRevenueAttributionRecordDeletePayload {
  """The ID of the revenue attribution that was deleted, if one was."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [AppRevenueAttributionRecordDeleteUserError!]!
}

"""
An error that occurs during the execution of `AppRevenueAttributionRecordDelete`.
"""
type AppRevenueAttributionRecordDeleteUserError implements DisplayableError {
  """The error code."""
  code: AppRevenueAttributionRecordDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `AppRevenueAttributionRecordDeleteUserError`.
"""
enum AppRevenueAttributionRecordDeleteUserErrorCode {
  """The input value is invalid."""
  INVALID
}

"""
An auto-generated type which holds one AppRevenueAttributionRecord and a cursor during pagination.
"""
type AppRevenueAttributionRecordEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppRevenueAttributionRecordEdge."""
  node: AppRevenueAttributionRecord!
}

"""The input fields to supply an app revenue attribution record."""
input AppRevenueAttributionRecordInput {
  """
  The unique value submitted during creation.
  For more information, refer to
  [Idempotent requests](https://shopify.dev/api/usage/idempotent-requests).
  """
  idempotencyKey: String!

  """The timestamp when the financial amount was captured."""
  capturedAt: DateTime!

  """The financial amount captured in this attribution."""
  amount: MoneyInput!

  """The type of revenue attribution."""
  type: AppRevenueAttributionType!

  """Indicates whether this is a test submission."""
  test: Boolean!
}

"""The set of valid sort keys for the AppRevenueAttributionRecord query."""
enum AppRevenueAttributionRecordSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Represents the billing types of revenue attribution."""
enum AppRevenueAttributionType {
  """App purchase related revenue collection."""
  APPLICATION_PURCHASE

  """App subscription revenue collection."""
  APPLICATION_SUBSCRIPTION

  """App usage-based revenue collection."""
  APPLICATION_USAGE

  """Other app revenue collection type."""
  OTHER
}

"""
Provides users access to services and/or features for a duration of time.
"""
type AppSubscription implements Node {
  """The date and time when the app subscription was created."""
  createdAt: DateTime!

  """
  The date and time when the current app subscription period ends. Returns `null` if the subscription isn't active.
  """
  currentPeriodEnd: DateTime

  """A globally-unique ID."""
  id: ID!

  """The plans attached to the app subscription."""
  lineItems: [AppSubscriptionLineItem!]!

  """The name of the app subscription."""
  name: String!

  """
  The URL that the merchant is redirected to after approving the app subscription.
  """
  returnUrl: URL!

  """The status of the app subscription."""
  status: AppSubscriptionStatus!

  """Specifies whether the app subscription is a test transaction."""
  test: Boolean!

  """
  The number of free trial days, starting at the subscription's creation date, by which billing is delayed.
  """
  trialDays: Int!
}

"""Return type for `appSubscriptionCancel` mutation."""
type AppSubscriptionCancelPayload {
  """The cancelled app subscription."""
  appSubscription: AppSubscription

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type for paginating through multiple AppSubscriptions.
"""
type AppSubscriptionConnection {
  """A list of edges."""
  edges: [AppSubscriptionEdge!]!

  """A list of the nodes contained in AppSubscriptionEdge."""
  nodes: [AppSubscription!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `appSubscriptionCreate` mutation."""
type AppSubscriptionCreatePayload {
  """The newly-created app subscription."""
  appSubscription: AppSubscription

  """
  The URL pointing to the page where the merchant approves or declines the charges for an app subscription.
  """
  confirmationUrl: URL

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Discount applied to the recurring pricing portion of a subscription."""
type AppSubscriptionDiscount {
  """
  The total number of billing intervals to which the discount will be applied.
  The discount will be applied to an indefinite number of billing intervals if this value is blank.
  """
  durationLimitInIntervals: Int

  """The price of the subscription after the discount is applied."""
  priceAfterDiscount: MoneyV2!

  """
  The remaining number of billing intervals to which the discount will be applied.
  """
  remainingDurationInIntervals: Int

  """The value of the discount applied every billing interval."""
  value: AppSubscriptionDiscountValue!
}

"""The fixed amount value of a discount."""
type AppSubscriptionDiscountAmount {
  """The fixed amount value of a discount."""
  amount: MoneyV2!
}

"""
The input fields to specify a discount to the recurring pricing portion of a
subscription over a number of billing intervals.
"""
input AppSubscriptionDiscountInput {
  """The value to be discounted every billing interval."""
  value: AppSubscriptionDiscountValueInput

  """
  The total number of billing intervals to which the discount will be applied.
  The discount will be applied to an indefinite number of billing intervals if this value is left blank.
  """
  durationLimitInIntervals: Int
}

"""The percentage value of a discount."""
type AppSubscriptionDiscountPercentage {
  """The percentage value of a discount."""
  percentage: Float!
}

"""The value of the discount."""
union AppSubscriptionDiscountValue = AppSubscriptionDiscountAmount | AppSubscriptionDiscountPercentage

"""
The input fields to specify the value discounted every billing interval.
"""
input AppSubscriptionDiscountValueInput {
  """The percentage value of a discount."""
  percentage: Float

  """The monetary value of a discount."""
  amount: Decimal
}

"""
An auto-generated type which holds one AppSubscription and a cursor during pagination.
"""
type AppSubscriptionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppSubscriptionEdge."""
  node: AppSubscription!
}

"""The plan attached to an app subscription."""
type AppSubscriptionLineItem {
  """A globally-unique ID."""
  id: ID!

  """The pricing model for the app subscription."""
  plan: AppPlanV2!

  """A list of the store's usage records for a usage pricing plan."""
  usageRecords(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppUsageRecordSortKeys = CREATED_AT
  ): AppUsageRecordConnection!
}

"""
The input fields to add more than one pricing plan to an app subscription.
"""
input AppSubscriptionLineItemInput {
  """The pricing model for the app subscription."""
  plan: AppPlanInput!
}

"""Return type for `appSubscriptionLineItemUpdate` mutation."""
type AppSubscriptionLineItemUpdatePayload {
  """The updated app subscription."""
  appSubscription: AppSubscription

  """
  The URL where the merchant approves or declines the updated app subscription line item.
  """
  confirmationUrl: URL

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The replacement behavior when creating an app subscription for a merchant with an already existing app subscription.
"""
enum AppSubscriptionReplacementBehavior {
  """
  Cancels the merchant's current app subscription immediately and replaces it with the newly created app subscription.
  """
  APPLY_IMMEDIATELY

  """
  Defers canceling the merchant's current app subscription and applying the
  newly created app subscription until the start of the next billing cycle. This
  value is ignored if the new app subscription is using a different currency
  than the current app subscription, in which case the new app subscription is
  applied immediately.
  """
  APPLY_ON_NEXT_BILLING_CYCLE

  """
  Cancels the merchant's current app subscription immediately and replaces it
  with the newly created app subscription, with the exception of
  the following scenarios where replacing the current app subscription will be
  deferred until the start of the next billing cycle.
  1) The current app subscription is annual and the newly created app
  subscription is annual, using the same currency, but is of a lesser value.
  2) The current app subscription is annual and the newly created app subscription is monthly and using the same currency.
  3) The current app subscription and the newly created app subscription are identical except for the `discount` value.
  """
  STANDARD
}

"""The set of valid sort keys for the AppSubscription query."""
enum AppSubscriptionSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The status of the app subscription."""
enum AppSubscriptionStatus {
  """The app subscription is pending approval by the merchant."""
  PENDING

  """
  The app subscription has been approved by the merchant and is ready to be activated by the app.
  """
  ACCEPTED @deprecated(reason: "As of API version 2021-01, when a merchant approves an app subscription, the status immediately transitions from `pending` to `active`.")

  """
  The app subscription has been approved by the merchant. Active app
  subscriptions are billed to the shop. After payment, partners receive payouts.
  """
  ACTIVE

  """
  The app subscription was declined by the merchant. This is a terminal state.
  """
  DECLINED

  """
  The app subscription wasn't approved by the merchant within two days of being created. This is a terminal state.
  """
  EXPIRED

  """
  The app subscription is on hold due to non-payment. The subscription re-activates after payments resume.
  """
  FROZEN

  """
  The app subscription was cancelled by the app. This could be caused by the app
  being uninstalled, a new app subscription being activated, or a direct
  cancellation by the app. This is a terminal state.
  """
  CANCELLED
}

"""Return type for `appSubscriptionTrialExtend` mutation."""
type AppSubscriptionTrialExtendPayload {
  """The app subscription that had its trial extended."""
  appSubscription: AppSubscription

  """The list of errors that occurred from executing the mutation."""
  userErrors: [AppSubscriptionTrialExtendUserError!]!
}

"""
An error that occurs during the execution of `AppSubscriptionTrialExtend`.
"""
type AppSubscriptionTrialExtendUserError implements DisplayableError {
  """The error code."""
  code: AppSubscriptionTrialExtendUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `AppSubscriptionTrialExtendUserError`.
"""
enum AppSubscriptionTrialExtendUserErrorCode {
  """The app subscription wasn't found."""
  SUBSCRIPTION_NOT_FOUND

  """The trial isn't active."""
  TRIAL_NOT_ACTIVE

  """The app subscription isn't active."""
  SUBSCRIPTION_NOT_ACTIVE
}

"""The set of valid sort keys for the AppTransaction query."""
enum AppTransactionSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
Defines a usage pricing model for the app subscription.
These charges are variable based on how much the merchant uses the app.
"""
type AppUsagePricing {
  """The total usage records for interval."""
  balanceUsed: MoneyV2!

  """
  The capped amount prevents the merchant from being charged for any usage over that amount during a billing period.
  This prevents billing from exceeding a maximum threshold over the duration of the billing period.
  For the merchant to continue using the app after exceeding a capped amount,
  they would need to agree to a new usage charge.
  """
  cappedAmount: MoneyV2!

  """The frequency with which the app usage records are billed."""
  interval: AppPricingInterval!

  """
  The terms and conditions for app usage pricing.
  Must be present in order to create usage charges.
  The terms are presented to the merchant when they approve an app's usage charges.
  """
  terms: String!
}

"""
The input fields to issue arbitrary charges for app usage associated with a subscription.
"""
input AppUsagePricingInput {
  """
  The maximum amount of usage charges that can be incurred within a subscription billing interval.
  """
  cappedAmount: MoneyInput!

  """
  The terms and conditions for app usage. These terms stipulate the pricing model for the charges that an app creates.
  """
  terms: String!
}

"""Store usage for app subscriptions with usage pricing."""
type AppUsageRecord implements Node {
  """The date and time when the usage record was created."""
  createdAt: DateTime!

  """The description of the app usage record."""
  description: String!

  """A globally-unique ID."""
  id: ID!

  """The price of the usage record."""
  price: MoneyV2!

  """Defines the usage pricing plan the merchant is subscribed to."""
  subscriptionLineItem: AppSubscriptionLineItem!
}

"""
An auto-generated type for paginating through multiple AppUsageRecords.
"""
type AppUsageRecordConnection {
  """A list of edges."""
  edges: [AppUsageRecordEdge!]!

  """A list of the nodes contained in AppUsageRecordEdge."""
  nodes: [AppUsageRecord!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `appUsageRecordCreate` mutation."""
type AppUsageRecordCreatePayload {
  """The newly created app usage record."""
  appUsageRecord: AppUsageRecord

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one AppUsageRecord and a cursor during pagination.
"""
type AppUsageRecordEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of AppUsageRecordEdge."""
  node: AppUsageRecord!
}

"""The set of valid sort keys for the AppUsageRecord query."""
enum AppUsageRecordSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
An Amazon Web Services Amazon Resource Name (ARN), including the Region and account ID.
For more information, refer to [Amazon Resource Names](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
"""
scalar ARN

"""Represents a generic custom attribute."""
type Attribute {
  """Key or name of the attribute."""
  key: String!

  """Value of the attribute."""
  value: String
}

"""The input fields for an attribute."""
input AttributeInput {
  """Key or name of the attribute."""
  key: String!

  """Value of the attribute."""
  value: String!
}

"""
Automatic discount applications capture the intentions of a discount that was automatically applied.
"""
type AutomaticDiscountApplication implements DiscountApplication {
  """
  The method by which the discount's value is applied to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """
  An ordered index that can be used to identify the discount application and indicate the precedence
  of the discount application for calculations.
  """
  index: Int!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The title of the discount application."""
  title: String!

  """The value of the discount application."""
  value: PricingValue!
}

"""The set of valid sort keys for the AutomaticDiscount query."""
enum AutomaticDiscountSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
Represents an object containing all information for channels available to a shop.
"""
type AvailableChannelDefinitionsByChannel {
  """The channel definitions for channels installed on a shop."""
  channelDefinitions: [ChannelDefinition!]!

  """The name of the channel."""
  channelName: String!
}

"""The possible types for a badge."""
enum BadgeType {
  """This badge has type `default`."""
  DEFAULT

  """This badge has type `success`."""
  SUCCESS

  """This badge has type `attention`."""
  ATTENTION

  """This badge has type `warning`."""
  WARNING

  """This badge has type `info`."""
  INFO
}

"""
Basic events chronicle resource activities such as the creation of an article, the fulfillment of an order, or
the addition of a product.
"""
type BasicEvent implements Event & Node {
  """The name of the app that created the event."""
  appTitle: String

  """Whether the event was created by an app."""
  attributeToApp: Boolean!

  """Whether the event was caused by an admin user."""
  attributeToUser: Boolean!

  """The date and time when the event was created."""
  createdAt: DateTime!

  """Whether the event is critical."""
  criticalAlert: Boolean!

  """A globally-unique ID."""
  id: ID!

  """Human readable text that describes the event."""
  message: FormattedString!
}

"""
Represents an error that happens during the execution of a billing attempt mutation.
"""
type BillingAttemptUserError implements DisplayableError {
  """The error code."""
  code: BillingAttemptUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `BillingAttemptUserError`.
"""
enum BillingAttemptUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """Subscription contract does not exist."""
  CONTRACT_NOT_FOUND

  """Origin time cannot be before the contract creation time."""
  ORIGIN_TIME_BEFORE_CONTRACT_CREATION

  """
  Billing cycle selector cannot select upcoming billing cycle past limit.
  """
  UPCOMING_CYCLE_LIMIT_EXCEEDED

  """
  Billing cycle selector cannot select billing cycle outside of index range.
  """
  CYCLE_INDEX_OUT_OF_RANGE

  """
  Billing cycle selector cannot select billing cycle outside of start date range.
  """
  CYCLE_START_DATE_OUT_OF_RANGE

  """
  Origin time needs to be within the selected billing cycle's start and end at date.
  """
  ORIGIN_TIME_OUT_OF_RANGE
}

"""Possible error codes that can be returned by `BulkMutationUserError`."""
enum BulkMutationErrorCode {
  """
  The operation did not run because another bulk mutation is already running.
  [Wait for the operation to finish](https://shopify.dev/api/usage/bulk-operations/imports#wait-for-the-operation-to-finish)
  before retrying this operation.
  """
  OPERATION_IN_PROGRESS

  """
  The operation did not run because the mutation is invalid. Check your mutation syntax and try again.
  """
  INVALID_MUTATION

  """
  The JSONL file submitted via the `stagedUploadsCreate` mutation is invalid. Update the file and try again.
  """
  INVALID_STAGED_UPLOAD_FILE

  """
  The JSONL file could not be found. Try [uploading the file](https://shopify.dev/api/usage/bulk-operations/imports#generate-the-uploaded-url-and-parameters)
  again, and check that you've entered the URL correctly for the
  `stagedUploadPath` mutation argument.
  """
  NO_SUCH_FILE

  """
  There was a problem reading the JSONL file. This error might be intermittent,
  so you can try performing the same query again.
  """
  INTERNAL_FILE_SERVER_ERROR
}

"""Represents an error that happens during execution of a bulk mutation."""
type BulkMutationUserError implements DisplayableError {
  """The error code."""
  code: BulkMutationErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
An asynchronous long-running operation to fetch data in bulk or to bulk import data.

Bulk operations are created using the `bulkOperationRunQuery` or `bulkOperationRunMutation` mutation. After
they are created, clients should poll the `status` field for updates. When `COMPLETED`, the `url` field contains
a link to the data in [JSONL](http://jsonlines.org/) format.

Refer to the [bulk operations guide](https://shopify.dev/api/usage/bulk-operations/imports) for more details.
"""
type BulkOperation implements Node {
  """When the bulk operation was successfully completed."""
  completedAt: DateTime

  """When the bulk operation was created."""
  createdAt: DateTime!

  """Error code for failed operations."""
  errorCode: BulkOperationErrorCode

  """File size in bytes of the file in the `url` field."""
  fileSize: UnsignedInt64

  """A globally-unique ID."""
  id: ID!

  """
  A running count of all the objects processed.
  For example, when fetching all the products and their variants, this field counts both products and variants.
  This field can be used to track operation progress.
  """
  objectCount: UnsignedInt64!

  """
  The URL that points to the partial or incomplete response data (in
  [JSONL](http://jsonlines.org/) format) that was returned by a failed operation.
  The URL expires 7 days after the operation fails. Returns `null` when there's no data available.
  """
  partialDataUrl: URL

  """GraphQL query document specified in `bulkOperationRunQuery`."""
  query: String!

  """
  A running count of all the objects that are processed at the root of the query.
  For example, when fetching all the products and their variants, this field only counts products.
  This field can be used to track operation progress.
  """
  rootObjectCount: UnsignedInt64!

  """Status of the bulk operation."""
  status: BulkOperationStatus!

  """The bulk operation's type."""
  type: BulkOperationType!

  """
  The URL that points to the response data in [JSONL](http://jsonlines.org/) format.
  The URL expires 7 days after the operation completes.
  """
  url: URL
}

"""Return type for `bulkOperationCancel` mutation."""
type BulkOperationCancelPayload {
  """The bulk operation to be canceled."""
  bulkOperation: BulkOperation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Error codes for failed bulk operations."""
enum BulkOperationErrorCode {
  """
  The provided operation `query` returned access denied due to missing
  [access scopes](https://shopify.dev/api/usage/access-scopes).
  Review the requested object permissions and execute the query as a normal non-bulk GraphQL request to see more details.
  """
  ACCESS_DENIED

  """
  The operation resulted in partial or incomplete data due to internal server errors during execution.
  These errors might be intermittent, so you can try performing the same query again.
  """
  INTERNAL_SERVER_ERROR

  """
  The operation resulted in partial or incomplete data due to query timeouts during execution.
  In some cases, timeouts can be avoided by modifying your `query` to select fewer fields.
  """
  TIMEOUT
}

"""Return type for `bulkOperationRunMutation` mutation."""
type BulkOperationRunMutationPayload {
  """The newly created bulk operation."""
  bulkOperation: BulkOperation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BulkMutationUserError!]!
}

"""Return type for `bulkOperationRunQuery` mutation."""
type BulkOperationRunQueryPayload {
  """The newly created bulk operation."""
  bulkOperation: BulkOperation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The valid values for the status of a bulk operation."""
enum BulkOperationStatus {
  """The bulk operation has been canceled."""
  CANCELED

  """
  Cancelation has been initiated on the bulk operation. There may be a short delay from when a cancelation
  starts until the operation is actually canceled.
  """
  CANCELING

  """The bulk operation has successfully completed."""
  COMPLETED

  """The bulk operation has been created."""
  CREATED

  """The bulk operation URL has expired."""
  EXPIRED

  """
  The bulk operation has failed. For information on why the operation failed, use
  [BulkOperation.errorCode](https://shopify.dev/api/admin-graphql/latest/enums/bulkoperationerrorcode).
  """
  FAILED

  """The bulk operation is runnning."""
  RUNNING
}

"""The valid values for the bulk operation's type."""
enum BulkOperationType {
  """The bulk operation is a query."""
  QUERY

  """The bulk operation is a mutation."""
  MUTATION
}

"""Return type for `bulkProductResourceFeedbackCreate` mutation."""
type BulkProductResourceFeedbackCreatePayload {
  """The feedback that's created."""
  feedback: [ProductResourceFeedback!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BulkProductResourceFeedbackCreateUserError!]!
}

"""
An error that occurs during the execution of `BulkProductResourceFeedbackCreate`.
"""
type BulkProductResourceFeedbackCreateUserError implements DisplayableError {
  """The error code."""
  code: BulkProductResourceFeedbackCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `BulkProductResourceFeedbackCreateUserError`.
"""
enum BulkProductResourceFeedbackCreateUserErrorCode {
  """
  The operation was attempted on too many feedback objects. The maximum number
  of feedback objects that you can operate on is 50.
  """
  MAXIMUM_FEEDBACK_LIMIT_EXCEEDED

  """
  The feedback for a later version of this resource was already accepted.
  """
  OUTDATED_FEEDBACK

  """The product wasn't found or isn't available to the channel."""
  PRODUCT_NOT_FOUND

  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """The input value needs to be blank."""
  PRESENT

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO
}

"""
Possible error codes that can be returned by `BusinessCustomerUserError`.
"""
enum BusinessCustomerErrorCode {
  """An internal error occurred."""
  INTERNAL_ERROR

  """The resource wasn't found."""
  RESOURCE_NOT_FOUND

  """Deleting the resource failed."""
  FAILED_TO_DELETE

  """Missing a required field."""
  REQUIRED

  """The input is empty."""
  NO_INPUT

  """The input is invalid."""
  INVALID_INPUT

  """Unexpected type."""
  UNEXPECTED_TYPE

  """The field value is too long."""
  TOO_LONG

  """The number of resources exceeded the limit."""
  LIMIT_REACHED

  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """The input value is already taken."""
  TAKEN
}

"""
An error that happens during the execution of a business customer mutation.
"""
type BusinessCustomerUserError implements DisplayableError {
  """The error code."""
  code: BusinessCustomerErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Settings describing the behavior of checkout for a B2B buyer."""
type BuyerExperienceConfiguration {
  """Whether to checkout to draft order for merchant review."""
  checkoutToDraft: Boolean!

  """
  Whether a buyer must pay at checkout or they can also choose to pay
  later using net terms.
  """
  payNowOnly: Boolean!

  """Represents the merchant configured payment terms."""
  paymentTermsTemplate: PaymentTermsTemplate
}

"""The input fields specifying the behavior of checkout for a B2B buyer."""
input BuyerExperienceConfigurationInput {
  """Whether to checkout to draft order for merchant review."""
  checkoutToDraft: Boolean

  """Represents the merchant configured payment terms."""
  paymentTermsTemplateId: ID
}

"""
A discount that is automatically applied to an order that is being edited.
"""
type CalculatedAutomaticDiscountApplication implements CalculatedDiscountApplication {
  """
  The method by which the discount's value is allocated to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The level at which the discount was applied."""
  appliedTo: DiscountApplicationLevel!

  """
  The description of discount application. Indicates the reason why the discount was applied.
  """
  description: String

  """A globally-unique ID."""
  id: ID!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""
An amount discounting the line that has been allocated by an associated discount application.
"""
type CalculatedDiscountAllocation {
  """
  The money amount that's allocated by the discount application in shop and presentment currencies.
  """
  allocatedAmountSet: MoneyBag!

  """The discount that the allocated amount originated from."""
  discountApplication: CalculatedDiscountApplication!
}

"""
A [discount application](https://shopify.dev/api/admin-graphql/latest/interfaces/discountapplication) involved in order editing that might be newly added or have new changes applied.
"""
interface CalculatedDiscountApplication {
  """
  The method by which the discount's value is allocated to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The level at which the discount was applied."""
  appliedTo: DiscountApplicationLevel!

  """
  The description of discount application. Indicates the reason why the discount was applied.
  """
  description: String

  """A globally-unique ID."""
  id: ID!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""
An auto-generated type for paginating through multiple CalculatedDiscountApplications.
"""
type CalculatedDiscountApplicationConnection {
  """A list of edges."""
  edges: [CalculatedDiscountApplicationEdge!]!

  """A list of the nodes contained in CalculatedDiscountApplicationEdge."""
  nodes: [CalculatedDiscountApplication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CalculatedDiscountApplication and a cursor during pagination.
"""
type CalculatedDiscountApplicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CalculatedDiscountApplicationEdge."""
  node: CalculatedDiscountApplication!
}

"""A discount code that is applied to an order that is being edited."""
type CalculatedDiscountCodeApplication implements CalculatedDiscountApplication {
  """
  The method by which the discount's value is allocated to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The level at which the discount was applied."""
  appliedTo: DiscountApplicationLevel!

  """
  The string identifying the discount code that was used at the time of application.
  """
  code: String!

  """
  The description of discount application. Indicates the reason why the discount was applied.
  """
  description: String

  """A globally-unique ID."""
  id: ID!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""The computed properties for a draft order."""
type CalculatedDraftOrder {
  """Order-level discount applied to the draft order."""
  appliedDiscount: DraftOrderAppliedDiscount

  """
  The available shipping rates for the draft order. Requires a customer with a
  valid shipping address and at least one line item.
  """
  availableShippingRates: [ShippingRate!]!

  """Whether the billing address matches the shipping address."""
  billingAddressMatchesShippingAddress: Boolean!

  """The currency of the store for this draft order."""
  currencyCode: CurrencyCode!

  """
  Customer who will be sent an invoice for the draft order, if there's one.
  """
  customer: Customer

  """Line items in the draft order with their computed properties."""
  lineItems: [CalculatedDraftOrderLineItem!]!

  """
  A subtotal of the line items and corresponding discounts. The subtotal doesn't
  include shipping charges, shipping discounts, taxes, or order discounts.
  """
  lineItemsSubtotalPrice: MoneyBag!

  """The name of the selected market."""
  marketName: String!

  """The selected market region country code for the draft order."""
  marketRegionCountryCode: CountryCode!

  """Phone number assigned to draft order."""
  phone: String

  """The payment currency of the customer for this draft order."""
  presentmentCurrencyCode: CurrencyCode!

  """The purchasing entity for the draft order."""
  purchasingEntity: PurchasingEntity

  """Line item that contains the shipping costs."""
  shippingLine: ShippingLine

  """
  Subtotal of the line items and their discounts (doesn't contain shipping charges or shipping discounts, or taxes).
  """
  subtotalPrice: Money!

  """
  Subtotal of the line items and their discounts (doesn't contain shipping charges or shipping discounts, or taxes).
  """
  subtotalPriceSet: MoneyBag!

  """Total amount of taxes charged for each line item and shipping line."""
  taxLines: [TaxLine!]!

  """Total discounts for this draft order."""
  totalDiscountsSet: MoneyBag!

  """Total price of line items for this draft order."""
  totalLineItemsPriceSet: MoneyBag!

  """
  Total amount of the draft order (includes taxes, shipping charges, and discounts).
  """
  totalPrice: Money!

  """
  Total amount of the draft order(includes taxes, shipping charges, and discounts).
  """
  totalPriceSet: MoneyBag!

  """Total shipping charge for the draft order."""
  totalShippingPrice: Money!

  """Total shipping charge for the draft order."""
  totalShippingPriceSet: MoneyBag!

  """Total amount of taxes for the draft order."""
  totalTax: Money!

  """Total amount of taxes for the draft order."""
  totalTaxSet: MoneyBag!
}

"""The computed line items for a draft order."""
type CalculatedDraftOrderLineItem {
  """The discount applied to the line item."""
  appliedDiscount: DraftOrderAppliedDiscount

  """
  Whether the line item is a custom line item (`true`) or a product variant line item (`false`).
  """
  custom: Boolean!

  """
  A list of attributes that represent custom features or special requests.
  """
  customAttributes: [Attribute!]!

  """
  Additional information (metafields) about the line item with the associated types.
  """
  customAttributesV2: [TypedAttribute!]!

  """Total price with discounts applied."""
  discountedTotal: MoneyV2!

  """The total price with discounts applied."""
  discountedTotalSet: MoneyBag!

  """The unit price with discounts applied."""
  discountedUnitPrice: MoneyV2!

  """Unit price with discounts applied."""
  discountedUnitPriceSet: MoneyBag!

  """
  Name of the service provider who fulfilled the order.
  
  Valid values are either **manual** or the name of the provider.
  For example, **amazon**, **shipwire**.
  
  Deleted fulfillment services will return null.
  """
  fulfillmentService: FulfillmentService

  """The image associated with the draft order line item."""
  image: Image

  """Whether the line item represents the purchase of a gift card."""
  isGiftCard: Boolean!

  """The name of the product."""
  name: String!

  """
  The total price (without discounts) of the line item, based on the original unit price of the variant x quantity.
  """
  originalTotal: MoneyV2!

  """
  The total price (without discounts) of the line item, based on the original unit price of the variant x quantity.
  """
  originalTotalSet: MoneyBag!

  """The variant price without any discounts applied."""
  originalUnitPrice: MoneyV2!

  """The variant price without any discounts applied."""
  originalUnitPriceSet: MoneyBag!

  """The product associated with the draft order line item."""
  product: Product

  """The number of variant items requested in the draft order."""
  quantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """The SKU number of the product variant."""
  sku: String

  """Whether the variant is taxable."""
  taxable: Boolean!

  """
  The title of the product or variant. This field only applies to custom line items.
  """
  title: String!

  """The total value of the discount."""
  totalDiscount: MoneyV2!

  """The total value of the discount."""
  totalDiscountSet: MoneyBag!

  """The variant associated with the draft order line item."""
  variant: ProductVariant

  """The name of the variant."""
  variantTitle: String

  """The name of the vendor who created the product variant."""
  vendor: String

  """The weight unit and value for a draft order line item."""
  weight: Weight
}

"""
A line item involved in order editing that may be newly added or have new changes applied.
"""
type CalculatedLineItem {
  """
  The discounts that have been allocated onto the line item by discount applications.
  """
  calculatedDiscountAllocations: [CalculatedDiscountAllocation!]!

  """
  A list of attributes that represent custom features or special requests.
  """
  customAttributes: [Attribute!]!

  """
  The discounts that have been allocated onto the line item by discount applications.
  """
  discountAllocations: [DiscountAllocation!]! @deprecated(reason: "Use `calculatedDiscountAllocations` instead.")

  """
  The price of a single quantity of the line item with line item discounts
  applied, in shop and presentment currencies. Discounts applied to the entire
  order aren't included in this price.
  """
  discountedUnitPriceSet: MoneyBag!

  """The total number of items that can be edited."""
  editableQuantity: Int!

  """The editable quantity prior to any changes made in the current edit."""
  editableQuantityBeforeChanges: Int!

  """The total price of editable lines in shop and presentment currencies."""
  editableSubtotalSet: MoneyBag!

  """Whether the calculated line item has a staged discount."""
  hasStagedLineItemDiscount: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The image object associated to the line item's variant."""
  image: Image

  """
  The variant unit price in shop and presentment currencies, without any discounts applied.
  """
  originalUnitPriceSet: MoneyBag!

  """The total number of items."""
  quantity: Int!

  """Whether the line item can be restocked or not."""
  restockable: Boolean!

  """Whether the changes on the line item will result in a restock."""
  restocking: Boolean!

  """The variant SKU number."""
  sku: String

  """A list of changes that affect this line item."""
  stagedChanges: [OrderStagedChange!]!

  """The title of the product."""
  title: String!

  """
  The total price of uneditable lines in shop and presentment currencies.
  """
  uneditableSubtotalSet: MoneyBag!

  """
  The product variant associated with this line item. The value is null for custom line items and items where
  the variant has been deleted.
  """
  variant: ProductVariant

  """The title of the variant."""
  variantTitle: String
}

"""
An auto-generated type for paginating through multiple CalculatedLineItems.
"""
type CalculatedLineItemConnection {
  """A list of edges."""
  edges: [CalculatedLineItemEdge!]!

  """A list of the nodes contained in CalculatedLineItemEdge."""
  nodes: [CalculatedLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CalculatedLineItem and a cursor during pagination.
"""
type CalculatedLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CalculatedLineItemEdge."""
  node: CalculatedLineItem!
}

"""
Represents a discount that was manually created for an order that is being edited.
"""
type CalculatedManualDiscountApplication implements CalculatedDiscountApplication {
  """
  The method by which the discount's value is allocated to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The level at which the discount was applied."""
  appliedTo: DiscountApplicationLevel!

  """
  The description of discount application. Indicates the reason why the discount was applied.
  """
  description: String

  """A globally-unique ID."""
  id: ID!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""An order with edits applied but not saved."""
type CalculatedOrder implements Node {
  """
  Returns only the new discount applications being added to the order in the current edit.
  """
  addedDiscountApplications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CalculatedDiscountApplicationConnection!

  """
  Returns only the new line items being added to the order during the current edit.
  """
  addedLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CalculatedLineItemConnection!

  """
  Amount of the order-level discount (doesn't contain any line item discounts) in shop and presentment currencies.
  """
  cartDiscountAmountSet: MoneyBag

  """Whether the changes have been applied and saved to the order."""
  committed: Boolean!

  """A globally-unique ID."""
  id: ID!

  """
  Returns all items on the order that existed before starting the edit.
  Will include any changes that have been made.
  Will not include line items added during the current edit.
  """
  lineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `editable`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CalculatedLineItemConnection!

  """The HTML of the customer notification for the order edit."""
  notificationPreviewHtml: HTML

  """The customer notification title."""
  notificationPreviewTitle: String!

  """The order without any changes applied."""
  order: Order! @deprecated(reason: "Use `originalOrder` instead.")

  """The order without any changes applied."""
  originalOrder: Order!

  """List of changes made to the order during the current edit."""
  stagedChanges(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): OrderStagedChangeConnection!

  """
  The sum of the quantities for the line items that contribute to the order's subtotal.
  """
  subtotalLineItemsQuantity: Int!

  """
  The subtotal of the line items, in shop and presentment currencies, after all
  the discounts are applied.  The subtotal doesn't include shipping.  The
  subtotal includes taxes for taxes-included orders and excludes taxes for
  taxes-excluded orders.
  """
  subtotalPriceSet: MoneyBag

  """Taxes charged for the line item."""
  taxLines: [TaxLine!]!

  """
  Total price of the order less the total amount received from the customer in shop and presentment currencies.
  """
  totalOutstandingSet: MoneyBag!

  """
  Total amount of the order (includes taxes and discounts) in shop and presentment currencies.
  """
  totalPriceSet: MoneyBag!
}

"""
A discount created by a Shopify script for an order that is being edited.
"""
type CalculatedScriptDiscountApplication implements CalculatedDiscountApplication {
  """
  The method by which the discount's value is allocated to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The level at which the discount was applied."""
  appliedTo: DiscountApplicationLevel!

  """
  The description of discount application. Indicates the reason why the discount was applied.
  """
  description: String

  """A globally-unique ID."""
  id: ID!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""Card payment details related to a transaction."""
type CardPaymentDetails {
  """
  The response code from the address verification system (AVS). The code is always a single letter.
  """
  avsResultCode: String

  """
  The issuer identification number (IIN), formerly known as bank identification
  number (BIN) of the customer's credit card. This is made up of the first few
  digits of the credit card number.
  """
  bin: String

  """The name of the company that issued the customer's credit card."""
  company: String

  """
  The response code from the credit card company indicating whether the customer
  entered the card security code, or card verification value, correctly. The
  code is a single letter or empty string.
  """
  cvvResultCode: String

  """The month in which the used credit card expires."""
  expirationMonth: Int

  """The year in which the used credit card expires."""
  expirationYear: Int

  """The holder of the credit card."""
  name: String

  """
  The customer's credit card number, with most of the leading digits redacted.
  """
  number: String

  """Digital wallet used for the payment."""
  wallet: DigitalWallet
}

"""
A channel represents an app where you sell a group of products and collections.
A channel can be a platform or marketplace such as Facebook or Pinterest, an online store, or POS.
"""
type Channel implements Node {
  """The underlying app used by the channel."""
  app: App!

  """
  The collection publications for the list of collections published to the channel.
  """
  collectionPublicationsV3(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """The list of collections published to the channel."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionConnection!

  """The unique identifier for the channel."""
  handle: String! @deprecated(reason: "Use `id` instead.")

  """Whether the collection is available to the channel."""
  hasCollection(
    """The collection ID to check."""
    id: ID!
  ): Boolean!

  """A globally-unique ID."""
  id: ID!

  """The name of the channel."""
  name: String!

  """
  The menu items for the channel, which also appear as submenu items in the left navigation sidebar in the Shopify admin.
  """
  navigationItems: [NavigationItem!]! @deprecated(reason: "Use [AppInstallation.navigationItems](\n          https://shopify.dev/api/admin-graphql/current/objects/AppInstallation#field-appinstallation-navigationitems) instead.")

  """Home page for the channel."""
  overviewPath: URL @deprecated(reason: "Use [AppInstallation.launchUrl](\n          https://shopify.dev/api/admin-graphql/current/objects/AppInstallation#field-appinstallation-launchurl) instead.")

  """The product publications for the products published to the channel."""
  productPublications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductPublicationConnection! @deprecated(reason: "Use `productPublicationsV3` instead.")

  """
  The product publications for the list of products published to the channel.
  """
  productPublicationsV3(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """The list of products published to the channel."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!

  """Whether the channel supports future publishing."""
  supportsFuturePublishing: Boolean!
}

"""An auto-generated type for paginating through multiple Channels."""
type ChannelConnection {
  """A list of edges."""
  edges: [ChannelEdge!]!

  """A list of the nodes contained in ChannelEdge."""
  nodes: [Channel!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
A channel definition represents channels surfaces on the platform.
A channel definition can be a platform or a subsegment of it such as Facebook
Home, Instagram Live, Instagram Shops, or WhatsApp chat.
"""
type ChannelDefinition implements Node {
  """Name of the channel that this sub channel belongs to."""
  channelName: String!

  """Unique string used as a public identifier for the channel definition."""
  handle: String!

  """The unique ID for the channel definition."""
  id: ID!

  """
  Name of the sub channel (e.g. Online Store, Instagram Shopping, TikTok Live).
  """
  subChannelName: String!

  """Icon displayed when showing the channel in admin."""
  svgIcon: String
}

"""
An auto-generated type which holds one Channel and a cursor during pagination.
"""
type ChannelEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ChannelEdge."""
  node: Channel!
}

"""Contains the information for a given sales channel."""
type ChannelInformation implements Node {
  """The app associated with the channel."""
  app: App!

  """The channel definition associated with the channel."""
  channelDefinition: ChannelDefinition

  """The unique ID for the channel."""
  channelId: ID!

  """A globally-unique ID."""
  id: ID!
}

"""
A checkout profile defines the branding settings and the UI extensions for a
store's checkout. A checkout profile could be published or draft. A store might
have at most one published checkout profile, which is used to render their live
checkout. The store could also have multiple draft profiles that were created,
previewed, and published using the admin checkout editor.
"""
type CheckoutProfile implements Node {
  """The date and time when the checkout profile was created."""
  createdAt: DateTime!

  """The date and time when the checkout profile was last edited."""
  editedAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """Whether the checkout profile is published or not."""
  isPublished: Boolean!

  """The profile name."""
  name: String!

  """The date and time when the checkout profile was last updated."""
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple CheckoutProfiles.
"""
type CheckoutProfileConnection {
  """A list of edges."""
  edges: [CheckoutProfileEdge!]!

  """A list of the nodes contained in CheckoutProfileEdge."""
  nodes: [CheckoutProfile!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CheckoutProfile and a cursor during pagination.
"""
type CheckoutProfileEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CheckoutProfileEdge."""
  node: CheckoutProfile!
}

"""The set of valid sort keys for the CheckoutProfile query."""
enum CheckoutProfileSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `edited_at` value."""
  EDITED_AT

  """Sort by the `is_published` value."""
  IS_PUBLISHED

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The set of valid sort keys for the CodeDiscount query."""
enum CodeDiscountSortKeys {
  """Sort by the `starts_at` value."""
  STARTS_AT

  """Sort by the `ends_at` value."""
  ENDS_AT

  """Sort by the `title` value."""
  TITLE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
Represents a group of products that can be displayed in online stores and other
sales channels in categories, which makes it easy for customers to find them.
For example, an athletics store might create different collections for running
attire, shoes, and accessories.

Collections can be defined by conditions, such as whether they match certain
product tags. These are called smart or automated collections.

Collections can also be created for a custom group of products. These are called custom or manual collections.
"""
type Collection implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & Node & Publishable {
  """
  The number of publications a resource is published to without feedback errors.
  """
  availablePublicationCount: Int!

  """
  A single-line, text-only description of the collection, stripped of any HTML
  tags and formatting that were included in the description.
  """
  description(
    """Truncates string after the given length."""
    truncateAt: Int
  ): String!

  """
  The description of the collection, including any HTML tags and formatting.
  This content is typically displayed to customers, such as on an online store,
  depending on the theme.
  """
  descriptionHtml: HTML!

  """
  Information about the collection that's provided through resource feedback.
  """
  feedback: ResourceFeedback

  """
  A unique string that identifies the collection. If a handle isn't specified
  when a collection is created, it's automatically generated from the
  collection's original title, and typically includes words from the title
  separated by hyphens. For example, a collection that was created with the
  title `Summer Catalog 2022` might have the handle `summer-catalog-2022`.
  
  If the title is changed, the handle doesn't automatically change.
  
  The handle can be used in themes by the Liquid templating language to refer to
  the collection, but using the ID is preferred because it never changes.
  """
  handle: String!

  """Whether the collection includes the specified product."""
  hasProduct(
    """The ID of the product to check."""
    id: ID!
  ): Boolean!

  """A globally-unique ID."""
  id: ID!

  """The image associated with the collection."""
  image: Image

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The products that are included in the collection."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductCollectionSortKeys = COLLECTION_DEFAULT
  ): ProductConnection!

  """The number of products in the collection."""
  productsCount: Int!

  """The number of publications a resource is published on."""
  publicationCount(
    """
    Include only the resource's publications that are published. If false, then
    return all the resource's publications including future publications.
    """
    onlyPublished: Boolean = true
  ): Int!

  """The channels where the collection is published."""
  publications(
    """
    Whether or not to return only the collection publications that are published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionPublicationConnection! @deprecated(reason: "Use `resourcePublications` instead.")

  """Check to see whether the resource is published to a given channel."""
  publishedOnChannel(
    """The ID of the channel to check."""
    channelId: ID!
  ): Boolean! @deprecated(reason: "Use `publishedOnPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's channel.
  """
  publishedOnCurrentChannel: Boolean! @deprecated(reason: "Use `publishedOnCurrentPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's publication.
  """
  publishedOnCurrentPublication: Boolean!

  """Check to see whether the resource is published to a given publication."""
  publishedOnPublication(
    """The ID of the publication to check."""
    publicationId: ID!
  ): Boolean!

  """The list of resources that are published to a publication."""
  resourcePublications(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """
  The list of resources that are either published or staged to be published to a publication.
  """
  resourcePublicationsV2(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled or staged to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationV2Connection!

  """
  For a smart (automated) collection, specifies the rules that determine whether a product is included.
  """
  ruleSet: CollectionRuleSet

  """
  If the default SEO fields for page title and description have been modified, contains the modified information.
  """
  seo: SEO!

  """
  The order in which the products in the collection are displayed by default in
  the Shopify admin and in sales channels, such as an online store.
  """
  sortOrder: CollectionSortOrder!

  """
  The Storefront GraphQL API ID of the `Collection`.
  
  As of the `2022-04` version release, the Storefront GraphQL API will no longer
  return Base64 encoded IDs to match the behavior of the Admin GraphQL API.
  Therefore, you can safely use the `id` field's value instead.
  """
  storefrontId: StorefrontID! @deprecated(reason: "Use `id` instead.")

  """
  The suffix of the Liquid template being used to show the collection in an
  online store. For example, if the value is `custom`, then the collection is
  using the `collection.custom.liquid` template. If the value is `null`, then
  the collection is using the default `collection.liquid` template.
  """
  templateSuffix: String

  """
  The name of the collection. It's displayed in the Shopify admin and is
  typically displayed in sales channels, such as an online store.
  """
  title: String!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The list of channels that the resource is not published to."""
  unpublishedChannels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ChannelConnection! @deprecated(reason: "Use `unpublishedPublications` instead.")

  """The list of publications that the resource is not published to."""
  unpublishedPublications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PublicationConnection!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the collection was last modified.
  """
  updatedAt: DateTime!
}

"""Return type for `collectionAddProducts` mutation."""
type CollectionAddProductsPayload {
  """The updated collection. Returns `null` if an error is raised."""
  collection: Collection

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `collectionAddProductsV2` mutation."""
type CollectionAddProductsV2Payload {
  """The asynchronous job adding the products."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CollectionAddProductsV2UserError!]!
}

"""
An error that occurs during the execution of `CollectionAddProductsV2`.
"""
type CollectionAddProductsV2UserError implements DisplayableError {
  """The error code."""
  code: CollectionAddProductsV2UserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CollectionAddProductsV2UserError`.
"""
enum CollectionAddProductsV2UserErrorCode {
  """Can't manually add products to a smart collection."""
  CANT_ADD_TO_SMART_COLLECTION

  """Collection doesn't exist."""
  COLLECTION_DOES_NOT_EXIST
}

"""An auto-generated type for paginating through multiple Collections."""
type CollectionConnection {
  """A list of edges."""
  edges: [CollectionEdge!]!

  """A list of the nodes contained in CollectionEdge."""
  nodes: [Collection!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `collectionCreate` mutation."""
type CollectionCreatePayload {
  """The collection that has been created."""
  collection: Collection

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for specifying the collection to delete."""
input CollectionDeleteInput {
  """The ID of the collection to be deleted."""
  id: ID!
}

"""Return type for `collectionDelete` mutation."""
type CollectionDeletePayload {
  """
  The ID of the collection that was deleted. Returns `null` if the collection doesn't exist.
  """
  deletedCollectionId: ID

  """The shop associated with the collection."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one Collection and a cursor during pagination.
"""
type CollectionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CollectionEdge."""
  node: Collection!
}

"""The input fields required to create a collection."""
input CollectionInput {
  """The description of the collection, in HTML format."""
  descriptionHtml: String

  """
  A unique human-friendly string for the collection. Automatically generated from the collection's title.
  """
  handle: String

  """
  Specifies the collection to update or create a new collection if absent. Required for updating a collection.
  """
  id: ID

  """The image associated with the collection."""
  image: ImageInput

  """
  Initial list of collection products. Only valid with `collectionCreate` and without rules.
  """
  products: [ID!]

  """The rules used to assign products to the collection."""
  ruleSet: CollectionRuleSetInput

  """The theme template used when viewing the collection in a store."""
  templateSuffix: String

  """The order in which the collection's products are sorted."""
  sortOrder: CollectionSortOrder

  """The title of the collection. Required for creating a new collection."""
  title: String

  """The metafields to associate with the collection."""
  metafields: [MetafieldInput!]

  """SEO information for the collection."""
  seo: SEOInput

  """
  Indicates whether a redirect is required after a new handle has been provided.
  If true, then the old handle is redirected to the new one automatically.
  """
  redirectNewHandle: Boolean = false
}

"""Represents the publications where a collection is published."""
type CollectionPublication {
  """The channel where the collection will be published."""
  channel: Channel! @deprecated(reason: "Use `publication` instead.")

  """The collection to be published on the publication."""
  collection: Collection!

  """Whether the publication is published or not."""
  isPublished: Boolean!

  """The publication where the collection will be published."""
  publication: Publication!

  """The date that the publication was or is going to be published."""
  publishDate: DateTime!
}

"""
An auto-generated type for paginating through multiple CollectionPublications.
"""
type CollectionPublicationConnection {
  """A list of edges."""
  edges: [CollectionPublicationEdge!]!

  """A list of the nodes contained in CollectionPublicationEdge."""
  nodes: [CollectionPublication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CollectionPublication and a cursor during pagination.
"""
type CollectionPublicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CollectionPublicationEdge."""
  node: CollectionPublication!
}

"""
The input fields for publications to which a collection will be published.
"""
input CollectionPublicationInput {
  """The ID of the publication."""
  publicationId: ID
}

"""
The input fields for specifying a collection to publish and the sales channels to publish it to.
"""
input CollectionPublishInput {
  """The collection to create or update publications for."""
  id: ID!

  """The channels where the collection will be published."""
  collectionPublications: [CollectionPublicationInput!]!
}

"""Return type for `collectionPublish` mutation."""
type CollectionPublishPayload {
  """The published collection."""
  collection: Collection

  """The channels where the collection has been published."""
  collectionPublications: [CollectionPublication!]

  """The shop associated with the collection."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `collectionRemoveProducts` mutation."""
type CollectionRemoveProductsPayload {
  """The asynchronous job removing the products."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `collectionReorderProducts` mutation."""
type CollectionReorderProductsPayload {
  """The asynchronous job reordering the products."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Represents at rule that's used to assign products to a collection."""
type CollectionRule {
  """
  The attribute that the rule focuses on. For example, `title` or `product_type`.
  """
  column: CollectionRuleColumn!

  """The value that the operator is applied to. For example, `Hats`."""
  condition: String!

  """The value that the operator is applied to."""
  conditionObject: CollectionRuleConditionObject

  """
  The type of operator that the rule is based on. For example, `equals`, `contains`, or `not_equals`.
  """
  relation: CollectionRuleRelation!
}

"""
Specifies the attribute of a product being used to populate the smart collection.
"""
enum CollectionRuleColumn {
  """
  The [`tag`](https://shopify.dev/api/admin-graphql/latest/objects/Product#field-product-producttype) attribute.
  """
  TAG

  """
  The [`title`](https://shopify.dev/api/admin-graphql/latest/objects/Product#field-product-title) attribute.
  """
  TITLE

  """
  The [`type`](https://shopify.dev/api/admin-graphql/latest/objects/Product#field-product-producttype) attribute.
  """
  TYPE

  """
  The [`product_taxonomy_node_id`](https://shopify.dev/api/admin-graphql/latest/objects/Product#field-product-productcategory) attribute.
  """
  PRODUCT_TAXONOMY_NODE_ID

  """
  The [`vendor`](https://shopify.dev/api/admin-graphql/latest/objects/Product#field-product-vendor) attribute.
  """
  VENDOR

  """
  The [`variant_price`](https://shopify.dev/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-price) attribute.
  """
  VARIANT_PRICE

  """
  An attribute evaluated based on the `compare_at_price` attribute of the product's variants.
  With `is_set` relation, the rule matches products with at least one variant with `compare_at_price` set.
  With `is_not_set` relation, the rule matches matches products with at least one variant with `compare_at_price` not set.
  """
  IS_PRICE_REDUCED

  """
  The [`variant_compare_at_price`](https://shopify.dev/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-compareatprice) attribute.
  """
  VARIANT_COMPARE_AT_PRICE

  """
  The [`variant_weight`](https://shopify.dev/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-weight) attribute.
  """
  VARIANT_WEIGHT

  """
  The [`variant_inventory`](https://shopify.dev/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-inventoryquantity) attribute.
  """
  VARIANT_INVENTORY

  """
  The [`variant_title`](https://shopify.dev/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-title) attribute.
  """
  VARIANT_TITLE

  """
  This category includes metafield definitions that have the `useAsCollectionCondition` flag set to true.
  """
  PRODUCT_METAFIELD_DEFINITION

  """
  This category includes metafield definitions that have the `useAsCollectionCondition` flag set to true.
  """
  VARIANT_METAFIELD_DEFINITION
}

"""Specifies object for the condition of the rule."""
union CollectionRuleConditionObject = CollectionRuleMetafieldCondition | CollectionRuleProductCategoryCondition | CollectionRuleTextCondition

"""
This object defines all columns and allowed relations that can be used in rules
for smart collections to automatically include the matching products.
"""
type CollectionRuleConditions {
  """Allowed relations of the rule."""
  allowedRelations: [CollectionRuleRelation!]!

  """Most commonly used relation for this rule."""
  defaultRelation: CollectionRuleRelation!

  """Additional attributes defining the rule."""
  ruleObject: CollectionRuleConditionsRuleObject

  """Type of the rule."""
  ruleType: CollectionRuleColumn!
}

"""Specifies object with additional rule attributes."""
union CollectionRuleConditionsRuleObject = CollectionRuleMetafieldCondition

"""The input fields for a rule to associate with a collection."""
input CollectionRuleInput {
  """
  The attribute that the rule focuses on. For example, `title` or `product_type`.
  """
  column: CollectionRuleColumn!

  """
  The type of operator that the rule is based on. For example, `equals`, `contains`, or `not_equals`.
  """
  relation: CollectionRuleRelation!

  """The value that the operator is applied to. For example, `Hats`."""
  condition: String!

  """
  The object ID that points to additional attributes for the collection rule.
  This is only required when using metafield definition rules.
  """
  conditionObjectId: ID
}

"""
Identifies a metafield definition used as a rule for the smart collection.
"""
type CollectionRuleMetafieldCondition {
  """The metafield definition associated with the condition."""
  metafieldDefinition: MetafieldDefinition!
}

"""Specifies the condition for a Product Category field."""
type CollectionRuleProductCategoryCondition {
  """The value of the condition."""
  value: ProductTaxonomyNode!
}

"""Specifies the relationship between the `column` and the `condition`."""
enum CollectionRuleRelation {
  """The attribute contains the condition."""
  CONTAINS

  """The attribute ends with the condition."""
  ENDS_WITH

  """The attribute is equal to the condition."""
  EQUALS

  """The attribute is greater than the condition."""
  GREATER_THAN

  """The attribute is not set (equal to `null`)."""
  IS_NOT_SET

  """The attribute is set (not equal to `null`)."""
  IS_SET

  """The attribute is less than the condition."""
  LESS_THAN

  """The attribute does not contain the condition."""
  NOT_CONTAINS

  """The attribute does not equal the condition."""
  NOT_EQUALS

  """The attribute starts with the condition."""
  STARTS_WITH
}

"""
The set of rules that are used to determine which products are included in the collection.
"""
type CollectionRuleSet {
  """
  Whether products must match any or all of the rules to be included in the collection.
  If true, then products must match at least one of the rules to be included in the collection.
  If false, then products must match all of the rules to be included in the collection.
  """
  appliedDisjunctively: Boolean!

  """The rules used to assign products to the collection."""
  rules: [CollectionRule!]!
}

"""The input fields for a rule set of the collection."""
input CollectionRuleSetInput {
  """
  Whether products must match any or all of the rules to be included in the collection.
  If true, then products must match at least one of the rules to be included in the collection.
  If false, then products must match all of the rules to be included in the collection.
  """
  appliedDisjunctively: Boolean!

  """The rules used to assign products to the collection."""
  rules: [CollectionRuleInput!]
}

"""Specifies the condition for a text field."""
type CollectionRuleTextCondition {
  """The value of the condition."""
  value: String!
}

"""The set of valid sort keys for the Collection query."""
enum CollectionSortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Specifies the sort order for the products in the collection."""
enum CollectionSortOrder {
  """Alphabetically, in ascending order (A - Z)."""
  ALPHA_ASC

  """Alphabetically, in descending order (Z - A)."""
  ALPHA_DESC

  """By best-selling products."""
  BEST_SELLING

  """By date created, in ascending order (oldest - newest)."""
  CREATED

  """By date created, in descending order (newest - oldest)."""
  CREATED_DESC

  """In the order set manually by the merchant."""
  MANUAL

  """By price, in ascending order (lowest - highest)."""
  PRICE_ASC

  """By price, in descending order (highest - lowest)."""
  PRICE_DESC
}

"""
The input fields for specifying the collection to unpublish and the sales channels to remove it from.
"""
input CollectionUnpublishInput {
  """The collection to create or update publications for."""
  id: ID!

  """The channels where the collection is published."""
  collectionPublications: [CollectionPublicationInput!]!
}

"""Return type for `collectionUnpublish` mutation."""
type CollectionUnpublishPayload {
  """The collection that has been unpublished."""
  collection: Collection

  """The shop associated with the collection."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `collectionUpdate` mutation."""
type CollectionUpdatePayload {
  """The updated collection."""
  collection: Collection

  """The asynchronous job updating the products based on the new rule set."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Comment events are generated by staff members of a shop.
They are created when a staff member adds a comment to the timeline of an order, draft order, customer, or transfer.
"""
type CommentEvent implements Event & Node {
  """The name of the app that created the event."""
  appTitle: String

  """The attachments associated with the comment event."""
  attachments: [CommentEventAttachment!]!

  """Whether the event was created by an app."""
  attributeToApp: Boolean!

  """Whether the event was caused by an admin user."""
  attributeToUser: Boolean!

  """The name of the user that authored the comment event."""
  author: StaffMember!

  """
  Whether the comment event can be deleted. If true, then the comment event can be deleted.
  """
  canDelete: Boolean!

  """
  Whether the comment event can be edited. If true, then the comment event can be edited.
  """
  canEdit: Boolean!

  """The date and time when the event was created."""
  createdAt: DateTime!

  """Whether the event is critical."""
  criticalAlert: Boolean!

  """
  Whether the comment event has been edited. If true, then the comment event has been edited.
  """
  edited: Boolean!

  """
  The object reference associated with the comment event. For example, a product or discount).
  """
  embed: CommentEventEmbed

  """A globally-unique ID."""
  id: ID!

  """Human readable text that describes the event."""
  message: FormattedString!

  """The raw body of the comment event."""
  rawMessage: String!

  """The parent subject to which the comment event belongs."""
  subject: CommentEventSubject!
}

"""A file attachment associated to a comment event."""
type CommentEventAttachment {
  """
  The file extension of the comment event attachment, indicating the file format.
  """
  fileExtension: String

  """A globally-unique ID."""
  id: ID!

  """The image attached to the comment event."""
  image: Image

  """The filename of the comment event attachment."""
  name: String!

  """The size of the attachment."""
  size: Int!

  """The URL of the attachment."""
  url: URL!
}

"""The main embed of a comment event."""
union CommentEventEmbed = Customer | DraftOrder | Order | Product | ProductVariant

"""The subject line of a comment event."""
interface CommentEventSubject {
  """
  Whether the timeline subject has a timeline comment. If true, then a timeline comment exists.
  """
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!
}

"""Return type for `companiesDelete` mutation."""
type CompaniesDeletePayload {
  """A list of IDs of the deleted companies."""
  deletedCompanyIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
Represents information about a company which is also a customer of the shop.
"""
type Company implements CommentEventSubject & HasEvents & HasMetafieldDefinitions & HasMetafields & Navigable & Node {
  """The number of contacts that belong to the company."""
  contactCount: Int!

  """The list of roles for the company contacts."""
  contactRoles(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyContactRoleSortKeys = ID
  ): CompanyContactRoleConnection!

  """The list of contacts in the company."""
  contacts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyContactSortKeys = ID

    """
    Supported filter parameters:
     - `company_id`
     - `company_location_id`
     - `created_at`
     - `email`
     - `location_name`
     - `name`
     - `role_name`
     - `status`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyContactConnection!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) at which the company was created in Shopify.
  """
  createdAt: DateTime!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) at which the company became the customer.
  """
  customerSince: DateTime!

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """The role proposed by default for a contact at the company."""
  defaultRole: CompanyContactRole

  """The list of the company's draft orders."""
  draftOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DraftOrderSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `customer_id`
     - `source`
     - `status`
     - `tag`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): DraftOrderConnection!

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A unique externally-supplied ID for the company."""
  externalId: String

  """Whether the merchant added a timeline comment to the company."""
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!

  """
  The lifetime duration of the company, since it became a customer of the shop. Examples: `2 days`, `3 months`, `1 year`.
  """
  lifetimeDuration: String!

  """The number of locations that belong to the company."""
  locationCount: Int!

  """The list of locations in the company."""
  locations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyLocationSortKeys = ID

    """
    Supported filter parameters:
     - `company_id`
     - `created_at`
     - `external_id`
     - `ids`
     - `name`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyLocationConnection!

  """The main contact for the company."""
  mainContact: CompanyContact

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The name of the company."""
  name: String!

  """A note about the company."""
  note: String

  """
  The total number of orders placed for this company, across all its locations.
  """
  orderCount: Int!

  """The list of the company's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = ID
  ): OrderConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The total amount spent by this company, across all its locations."""
  totalSpent: MoneyV2!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) at which the company was last modified.
  """
  updatedAt: DateTime!
}

"""Represents a billing or shipping address for a company location."""
type CompanyAddress implements Node {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String!

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the company."""
  companyName: String!

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  For example, US.
  """
  countryCode: CountryCode!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) at which the company address was created.
  """
  createdAt: DateTime!

  """The formatted version of the address."""
  formattedAddress(
    """Whether to include the recipient's name in the formatted address."""
    withName: Boolean = false

    """Whether to include the company name in the formatted address."""
    withCompanyName: Boolean = true
  ): [String!]!

  """A comma-separated list of the values for city, province, and country."""
  formattedArea: String

  """A globally-unique ID."""
  id: ID!

  """
  A unique phone number for the customer.
  Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """The identity of the recipient e.g. 'Receiving Department'."""
  recipient: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  at which the company address was last updated.
  """
  updatedAt: DateTime!

  """The zip or postal code of the address."""
  zip: String

  """
  The two-letter code for the region.
  For example, ON.
  """
  zoneCode: String
}

"""Return type for `companyAddressDelete` mutation."""
type CompanyAddressDeletePayload {
  """The ID of the deleted address."""
  deletedAddressId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
The input fields to create or update the address of a company location.
"""
input CompanyAddressInput {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The zip or postal code of the address."""
  zip: String

  """The identity of the recipient e.g. 'Receiving Department'."""
  recipient: String

  """
  A phone number for the recipient. Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """
  The two-letter code ([ISO 3166-2
  alpha-2]](https://en.wikipedia.org/wiki/ISO_3166-2) format) for the region of
  the address, such as the province, state, or district. For example, `ON` for
  Ontario, Canada.
  """
  zoneCode: String

  """
  The two-letter code ([ISO 3166-1
  alpha-2]](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) format) for the
  country of the address. For example, `US`` for the United States.
  """
  countryCode: CountryCode
}

"""The valid values for the address type of a company."""
enum CompanyAddressType {
  """The address is a billing address."""
  BILLING

  """The address is a shipping address."""
  SHIPPING
}

"""Return type for `companyAssignCustomerAsContact` mutation."""
type CompanyAssignCustomerAsContactPayload {
  """The created company contact."""
  companyContact: CompanyContact

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyAssignMainContact` mutation."""
type CompanyAssignMainContactPayload {
  """The company for which the main contact is assigned."""
  company: Company

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""An auto-generated type for paginating through multiple Companies."""
type CompanyConnection {
  """A list of edges."""
  edges: [CompanyEdge!]!

  """A list of the nodes contained in CompanyEdge."""
  nodes: [Company!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
A person that acts on behalf of company associated to [a
customer](https://shopify.dev/api/admin-graphql/latest/objects/customer).
"""
type CompanyContact implements Node {
  """The company to which the contact belongs."""
  company: Company!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  at which the company contact was created at Shopify.
  """
  createdAt: DateTime!

  """The customer associated to this contact."""
  customer: Customer!

  """The list of draft orders for the company contact."""
  draftOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DraftOrderSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `customer_id`
     - `source`
     - `status`
     - `tag`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): DraftOrderConnection!

  """A globally-unique ID."""
  id: ID!

  """Whether the contact is the main contact of the company."""
  isMainContact: Boolean!

  """
  The lifetime duration of the company contact, since its creation date on
  Shopify. Examples: `1 year`, `2 months`, `3 days`.
  """
  lifetimeDuration: String!

  """The company contact's locale (language)."""
  locale: String

  """The list of orders for the company contact."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = ID
  ): OrderConnection!

  """The list of roles assigned to this company contact."""
  roleAssignments(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyContactRoleAssignmentSortKeys = ID

    """
    Supported filter parameters:
     - `company_contact_id`
     - `company_contact_role_id`
     - `company_id`
     - `company_location_id`
     - `created_at`
     - `location_name`
     - `role_name`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyContactRoleAssignmentConnection!

  """The company contact's job title."""
  title: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  at which the company contact was last updated.
  """
  updatedAt: DateTime!
}

"""Return type for `companyContactAssignRole` mutation."""
type CompanyContactAssignRolePayload {
  """The company contact role assignment."""
  companyContactRoleAssignment: CompanyContactRoleAssignment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyContactAssignRoles` mutation."""
type CompanyContactAssignRolesPayload {
  """
  A list of newly created assignments of company contacts to a company location.
  """
  roleAssignments: [CompanyContactRoleAssignment!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
An auto-generated type for paginating through multiple CompanyContacts.
"""
type CompanyContactConnection {
  """A list of edges."""
  edges: [CompanyContactEdge!]!

  """A list of the nodes contained in CompanyContactEdge."""
  nodes: [CompanyContact!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `companyContactCreate` mutation."""
type CompanyContactCreatePayload {
  """The created company contact."""
  companyContact: CompanyContact

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyContactDelete` mutation."""
type CompanyContactDeletePayload {
  """The ID of the deleted company contact."""
  deletedCompanyContactId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
An auto-generated type which holds one CompanyContact and a cursor during pagination.
"""
type CompanyContactEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CompanyContactEdge."""
  node: CompanyContact!
}

"""
The input fields for company contact attributes when creating or updating a company contact.
"""
input CompanyContactInput {
  """The company contact's first name."""
  firstName: String

  """The company contact's last name."""
  lastName: String

  """The unique email address of the company contact."""
  email: String

  """The title of the company contact."""
  title: String

  """The contact's locale."""
  locale: String

  """The phone number of the company contact."""
  phone: String
}

"""Return type for `companyContactRevokeRole` mutation."""
type CompanyContactRevokeRolePayload {
  """The role assignment that was revoked."""
  revokedCompanyContactRoleAssignmentId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyContactRevokeRoles` mutation."""
type CompanyContactRevokeRolesPayload {
  """
  A list of role assignment IDs that were removed from the company contact.
  """
  revokedRoleAssignmentIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
The role for a [company contact](https://shopify.dev/api/admin-graphql/latest/objects/companycontact).
"""
type CompanyContactRole implements Node {
  """A globally-unique ID."""
  id: ID!

  """
  The name of a role.
  For example, `admin` or `buyer`.
  """
  name: String!

  """A note for the role."""
  note: String
}

"""
The input fields for the role and location to assign to a company contact.
"""
input CompanyContactRoleAssign {
  """The role ID."""
  companyContactRoleId: ID!

  """The location."""
  companyLocationId: ID!
}

"""
The CompanyContactRoleAssignment describes the company and location associated to a company contact's role.
"""
type CompanyContactRoleAssignment implements Node {
  """The company this role assignment belongs to."""
  company: Company!

  """The company contact for whom this role is assigned."""
  companyContact: CompanyContact!

  """The company location to which the role is assigned."""
  companyLocation: CompanyLocation!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the assignment record was created.
  """
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The role that's assigned to the company contact."""
  role: CompanyContactRole!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the assignment record was last updated.
  """
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple CompanyContactRoleAssignments.
"""
type CompanyContactRoleAssignmentConnection {
  """A list of edges."""
  edges: [CompanyContactRoleAssignmentEdge!]!

  """A list of the nodes contained in CompanyContactRoleAssignmentEdge."""
  nodes: [CompanyContactRoleAssignment!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CompanyContactRoleAssignment and a cursor during pagination.
"""
type CompanyContactRoleAssignmentEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CompanyContactRoleAssignmentEdge."""
  node: CompanyContactRoleAssignment!
}

"""The set of valid sort keys for the CompanyContactRoleAssignment query."""
enum CompanyContactRoleAssignmentSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `location_name` value."""
  LOCATION_NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
An auto-generated type for paginating through multiple CompanyContactRoles.
"""
type CompanyContactRoleConnection {
  """A list of edges."""
  edges: [CompanyContactRoleEdge!]!

  """A list of the nodes contained in CompanyContactRoleEdge."""
  nodes: [CompanyContactRole!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CompanyContactRole and a cursor during pagination.
"""
type CompanyContactRoleEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CompanyContactRoleEdge."""
  node: CompanyContactRole!
}

"""The set of valid sort keys for the CompanyContactRole query."""
enum CompanyContactRoleSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `companyContactsDelete` mutation."""
type CompanyContactsDeletePayload {
  """The list of IDs of the deleted company contacts."""
  deletedCompanyContactIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""The set of valid sort keys for the CompanyContact query."""
enum CompanyContactSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `title` value."""
  TITLE

  """Sort by the `company_id` value."""
  COMPANY_ID

  """Sort by the `name` value."""
  NAME

  """Sort by the `email` value."""
  EMAIL

  """Sort by the `name_email` value."""
  NAME_EMAIL

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `companyContactUpdate` mutation."""
type CompanyContactUpdatePayload {
  """The updated company contact."""
  companyContact: CompanyContact

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
The input fields and values for creating a company and its associated resources.
"""
input CompanyCreateInput {
  """The attributes for the company."""
  company: CompanyInput!

  """The attributes for the company contact."""
  companyContact: CompanyContactInput

  """The attributes for the company location."""
  companyLocation: CompanyLocationInput
}

"""Return type for `companyCreate` mutation."""
type CompanyCreatePayload {
  """The created company."""
  company: Company

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyDelete` mutation."""
type CompanyDeletePayload {
  """The ID of the deleted company."""
  deletedCompanyId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
An auto-generated type which holds one Company and a cursor during pagination.
"""
type CompanyEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CompanyEdge."""
  node: Company!
}

"""
The input fields for company attributes when creating or updating a company.
"""
input CompanyInput {
  """The name of the company."""
  name: String

  """A note about the company."""
  note: String

  """A unique externally-supplied ID for the company."""
  externalId: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) at
            which the company became the customer.
  """
  customerSince: DateTime
}

"""
A location or branch of a [company that's a
customer](https://shopify.dev/api/admin-graphql/latest/objects/company) of the
shop. Configuration of B2B relationship, for example prices lists and checkout
settings, may be done for a location.
"""
type CompanyLocation implements CommentEventSubject & HasEvents & HasMetafieldDefinitions & HasMetafields & Navigable & Node {
  """The address used as billing address for the location."""
  billingAddress: CompanyAddress

  """The configuration for the buyer's B2B checkout."""
  buyerExperienceConfiguration: BuyerExperienceConfiguration

  """The company that the company location belongs to."""
  company: Company!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  at which the company location was created in Shopify.
  """
  createdAt: DateTime!

  """
  The location's currency based on the shipping address. If the shipping address
  is empty, then the value is the shop's primary market.
  """
  currency: CurrencyCode!

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """The list of draft orders for the company location."""
  draftOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DraftOrderSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `customer_id`
     - `source`
     - `status`
     - `tag`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): DraftOrderConnection!

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A unique externally-supplied ID for the company location."""
  externalId: String

  """Whether the merchant added a timeline comment to the company location."""
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The preferred locale of the company location."""
  locale: String

  """
  The market that includes the location's shipping address. If the shipping
  address is empty, then the value is the shop's primary market.
  """
  market: Market!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The name of the company location."""
  name: String!

  """A note about the company location."""
  note: String

  """The total number of orders placed for the location."""
  orderCount: Int!

  """The list of orders for the company location."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = ID
  ): OrderConnection!

  """The phone number of the company location."""
  phone: String

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The list of roles assigned to the company location."""
  roleAssignments(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyContactRoleAssignmentSortKeys = ID

    """
    Supported filter parameters:
     - `company_contact_id`
     - `company_contact_role_id`
     - `company_id`
     - `company_location_id`
     - `created_at`
     - `location_name`
     - `role_name`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyContactRoleAssignmentConnection!

  """The address used as shipping address for the location."""
  shippingAddress: CompanyAddress

  """The list of tax exemptions applied to the location."""
  taxExemptions: [TaxExemption!]!

  """The tax registration ID for the company location."""
  taxRegistrationId: String

  """The total amount spent by the location."""
  totalSpent: MoneyV2!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  at which the company location was last modified.
  """
  updatedAt: DateTime!
}

"""Return type for `companyLocationAssignAddress` mutation."""
type CompanyLocationAssignAddressPayload {
  """The list of updated addresses on the company location."""
  addresses: [CompanyAddress!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationAssignRoles` mutation."""
type CompanyLocationAssignRolesPayload {
  """
  A list of newly created assignments of company contacts to a company location.
  """
  roleAssignments: [CompanyContactRoleAssignment!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationAssignTaxExemptions` mutation."""
type CompanyLocationAssignTaxExemptionsPayload {
  """The updated company location."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
An auto-generated type for paginating through multiple CompanyLocations.
"""
type CompanyLocationConnection {
  """A list of edges."""
  edges: [CompanyLocationEdge!]!

  """A list of the nodes contained in CompanyLocationEdge."""
  nodes: [CompanyLocation!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `companyLocationCreate` mutation."""
type CompanyLocationCreatePayload {
  """The created company location."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationCreateTaxRegistration` mutation."""
type CompanyLocationCreateTaxRegistrationPayload {
  """The company location with the created tax registration."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationDelete` mutation."""
type CompanyLocationDeletePayload {
  """The ID of the deleted company location."""
  deletedCompanyLocationId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
An auto-generated type which holds one CompanyLocation and a cursor during pagination.
"""
type CompanyLocationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CompanyLocationEdge."""
  node: CompanyLocation!
}

"""
The input fields for company location when creating or updating a company location.
"""
input CompanyLocationInput {
  """The name of the company location."""
  name: String

  """The phone number of the company location."""
  phone: String

  """The preferred locale of the company location."""
  locale: String

  """A unique externally-supplied ID for the company location."""
  externalId: String

  """A note about the company location."""
  note: String

  """The configuration for the buyer's checkout at the company location."""
  buyerExperienceConfiguration: BuyerExperienceConfigurationInput

  """
  The input fields to create or update the billing address for a company location.
  """
  billingAddress: CompanyAddressInput

  """
  The input fields to create or update the shipping address for a company location.
  """
  shippingAddress: CompanyAddressInput

  """
  Whether the billing address is the same as the shipping address. If the value
  is true, then the input for `billingAddress` is ignored.
  """
  billingSameAsShipping: Boolean

  """The tax registration ID of the company location."""
  taxRegistrationId: String

  """The list of tax exemptions to apply to the company location."""
  taxExemptions: [TaxExemption!]
}

"""Return type for `companyLocationRevokeRoles` mutation."""
type CompanyLocationRevokeRolesPayload {
  """
  A list of role assignment IDs that were removed from the company location.
  """
  revokedRoleAssignmentIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationRevokeTaxExemptions` mutation."""
type CompanyLocationRevokeTaxExemptionsPayload {
  """The updated company location."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyLocationRevokeTaxRegistration` mutation."""
type CompanyLocationRevokeTaxRegistrationPayload {
  """The updated company location."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""The input fields for the role and contact to assign on a location."""
input CompanyLocationRoleAssign {
  """The role ID."""
  companyContactRoleId: ID!

  """The company contact ID.."""
  companyContactId: ID!
}

"""Return type for `companyLocationsDelete` mutation."""
type CompanyLocationsDeletePayload {
  """A list of IDs of the deleted company locations."""
  deletedCompanyLocationIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""The set of valid sort keys for the CompanyLocation query."""
enum CompanyLocationSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `name` value."""
  NAME

  """Sort by the `company_id` value."""
  COMPANY_ID

  """Sort by the `company_and_location_name` value."""
  COMPANY_AND_LOCATION_NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
The input fields for company location when creating or updating a company location.
"""
input CompanyLocationUpdateInput {
  """The name of the company location."""
  name: String

  """The phone number of the company location."""
  phone: String

  """The preferred locale of the company location."""
  locale: String

  """A unique externally-supplied ID for the company location."""
  externalId: String

  """A note about the company location."""
  note: String

  """The configuration for the buyer's checkout at the company location."""
  buyerExperienceConfiguration: BuyerExperienceConfigurationInput
}

"""Return type for `companyLocationUpdate` mutation."""
type CompanyLocationUpdatePayload {
  """The updated company location."""
  companyLocation: CompanyLocation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""Return type for `companyRevokeMainContact` mutation."""
type CompanyRevokeMainContactPayload {
  """The company from which the main contact is revoked."""
  company: Company

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""The set of valid sort keys for the Company query."""
enum CompanySortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `since_date` value."""
  SINCE_DATE

  """Sort by the `name` value."""
  NAME

  """Sort by the `order_count` value."""
  ORDER_COUNT

  """Sort by the `total_spent` value."""
  TOTAL_SPENT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `companyUpdate` mutation."""
type CompanyUpdatePayload {
  """The updated company."""
  company: Company

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BusinessCustomerUserError!]!
}

"""
The input fields for the context data that determines the pricing of a variant.
"""
input ContextualPricingContext {
  """The country code used to fetch country-specific prices."""
  country: CountryCode

  """The CompanyLocation ID used to fetch company location specific prices."""
  companyLocationId: ID
}

"""
The list of all the countries from the combined shipping zones for the shop.
"""
type CountriesInShippingZones {
  """The list of all the countries from all the combined shipping zones."""
  countryCodes: [CountryCode!]!

  """Whether 'Rest of World' has been defined in any of the shipping zones."""
  includeRestOfWorld: Boolean!
}

"""
The code designating a country/region, which generally follows ISO 3166-1 alpha-2 guidelines.
If a territory doesn't have a country code value in the `CountryCode` enum, then it might be considered a subdivision
of another country. For example, the territories associated with Spain are represented by the country code `ES`,
and the territories associated with the United States of America are represented by the country code `US`.
"""
enum CountryCode {
  """Afghanistan."""
  AF

  """Åland Islands."""
  AX

  """Albania."""
  AL

  """Algeria."""
  DZ

  """Andorra."""
  AD

  """Angola."""
  AO

  """Anguilla."""
  AI

  """Antigua & Barbuda."""
  AG

  """Argentina."""
  AR

  """Armenia."""
  AM

  """Aruba."""
  AW

  """Ascension Island."""
  AC

  """Australia."""
  AU

  """Austria."""
  AT

  """Azerbaijan."""
  AZ

  """Bahamas."""
  BS

  """Bahrain."""
  BH

  """Bangladesh."""
  BD

  """Barbados."""
  BB

  """Belarus."""
  BY

  """Belgium."""
  BE

  """Belize."""
  BZ

  """Benin."""
  BJ

  """Bermuda."""
  BM

  """Bhutan."""
  BT

  """Bolivia."""
  BO

  """Bosnia & Herzegovina."""
  BA

  """Botswana."""
  BW

  """Bouvet Island."""
  BV

  """Brazil."""
  BR

  """British Indian Ocean Territory."""
  IO

  """Brunei."""
  BN

  """Bulgaria."""
  BG

  """Burkina Faso."""
  BF

  """Burundi."""
  BI

  """Cambodia."""
  KH

  """Canada."""
  CA

  """Cape Verde."""
  CV

  """Caribbean Netherlands."""
  BQ

  """Cayman Islands."""
  KY

  """Central African Republic."""
  CF

  """Chad."""
  TD

  """Chile."""
  CL

  """China."""
  CN

  """Christmas Island."""
  CX

  """Cocos (Keeling) Islands."""
  CC

  """Colombia."""
  CO

  """Comoros."""
  KM

  """Congo - Brazzaville."""
  CG

  """Congo - Kinshasa."""
  CD

  """Cook Islands."""
  CK

  """Costa Rica."""
  CR

  """Croatia."""
  HR

  """Cuba."""
  CU

  """Curaçao."""
  CW

  """Cyprus."""
  CY

  """Czechia."""
  CZ

  """Côte d’Ivoire."""
  CI

  """Denmark."""
  DK

  """Djibouti."""
  DJ

  """Dominica."""
  DM

  """Dominican Republic."""
  DO

  """Ecuador."""
  EC

  """Egypt."""
  EG

  """El Salvador."""
  SV

  """Equatorial Guinea."""
  GQ

  """Eritrea."""
  ER

  """Estonia."""
  EE

  """Eswatini."""
  SZ

  """Ethiopia."""
  ET

  """Falkland Islands."""
  FK

  """Faroe Islands."""
  FO

  """Fiji."""
  FJ

  """Finland."""
  FI

  """France."""
  FR

  """French Guiana."""
  GF

  """French Polynesia."""
  PF

  """French Southern Territories."""
  TF

  """Gabon."""
  GA

  """Gambia."""
  GM

  """Georgia."""
  GE

  """Germany."""
  DE

  """Ghana."""
  GH

  """Gibraltar."""
  GI

  """Greece."""
  GR

  """Greenland."""
  GL

  """Grenada."""
  GD

  """Guadeloupe."""
  GP

  """Guatemala."""
  GT

  """Guernsey."""
  GG

  """Guinea."""
  GN

  """Guinea-Bissau."""
  GW

  """Guyana."""
  GY

  """Haiti."""
  HT

  """Heard & McDonald Islands."""
  HM

  """Vatican City."""
  VA

  """Honduras."""
  HN

  """Hong Kong SAR."""
  HK

  """Hungary."""
  HU

  """Iceland."""
  IS

  """India."""
  IN

  """Indonesia."""
  ID

  """Iran."""
  IR

  """Iraq."""
  IQ

  """Ireland."""
  IE

  """Isle of Man."""
  IM

  """Israel."""
  IL

  """Italy."""
  IT

  """Jamaica."""
  JM

  """Japan."""
  JP

  """Jersey."""
  JE

  """Jordan."""
  JO

  """Kazakhstan."""
  KZ

  """Kenya."""
  KE

  """Kiribati."""
  KI

  """North Korea."""
  KP

  """Kosovo."""
  XK

  """Kuwait."""
  KW

  """Kyrgyzstan."""
  KG

  """Laos."""
  LA

  """Latvia."""
  LV

  """Lebanon."""
  LB

  """Lesotho."""
  LS

  """Liberia."""
  LR

  """Libya."""
  LY

  """Liechtenstein."""
  LI

  """Lithuania."""
  LT

  """Luxembourg."""
  LU

  """Macao SAR."""
  MO

  """Madagascar."""
  MG

  """Malawi."""
  MW

  """Malaysia."""
  MY

  """Maldives."""
  MV

  """Mali."""
  ML

  """Malta."""
  MT

  """Martinique."""
  MQ

  """Mauritania."""
  MR

  """Mauritius."""
  MU

  """Mayotte."""
  YT

  """Mexico."""
  MX

  """Moldova."""
  MD

  """Monaco."""
  MC

  """Mongolia."""
  MN

  """Montenegro."""
  ME

  """Montserrat."""
  MS

  """Morocco."""
  MA

  """Mozambique."""
  MZ

  """Myanmar (Burma)."""
  MM

  """Namibia."""
  NA

  """Nauru."""
  NR

  """Nepal."""
  NP

  """Netherlands."""
  NL

  """Netherlands Antilles."""
  AN

  """New Caledonia."""
  NC

  """New Zealand."""
  NZ

  """Nicaragua."""
  NI

  """Niger."""
  NE

  """Nigeria."""
  NG

  """Niue."""
  NU

  """Norfolk Island."""
  NF

  """North Macedonia."""
  MK

  """Norway."""
  NO

  """Oman."""
  OM

  """Pakistan."""
  PK

  """Palestinian Territories."""
  PS

  """Panama."""
  PA

  """Papua New Guinea."""
  PG

  """Paraguay."""
  PY

  """Peru."""
  PE

  """Philippines."""
  PH

  """Pitcairn Islands."""
  PN

  """Poland."""
  PL

  """Portugal."""
  PT

  """Qatar."""
  QA

  """Cameroon."""
  CM

  """Réunion."""
  RE

  """Romania."""
  RO

  """Russia."""
  RU

  """Rwanda."""
  RW

  """St. Barthélemy."""
  BL

  """St. Helena."""
  SH

  """St. Kitts & Nevis."""
  KN

  """St. Lucia."""
  LC

  """St. Martin."""
  MF

  """St. Pierre & Miquelon."""
  PM

  """Samoa."""
  WS

  """San Marino."""
  SM

  """São Tomé & Príncipe."""
  ST

  """Saudi Arabia."""
  SA

  """Senegal."""
  SN

  """Serbia."""
  RS

  """Seychelles."""
  SC

  """Sierra Leone."""
  SL

  """Singapore."""
  SG

  """Sint Maarten."""
  SX

  """Slovakia."""
  SK

  """Slovenia."""
  SI

  """Solomon Islands."""
  SB

  """Somalia."""
  SO

  """South Africa."""
  ZA

  """South Georgia & South Sandwich Islands."""
  GS

  """South Korea."""
  KR

  """South Sudan."""
  SS

  """Spain."""
  ES

  """Sri Lanka."""
  LK

  """St. Vincent & Grenadines."""
  VC

  """Sudan."""
  SD

  """Suriname."""
  SR

  """Svalbard & Jan Mayen."""
  SJ

  """Sweden."""
  SE

  """Switzerland."""
  CH

  """Syria."""
  SY

  """Taiwan."""
  TW

  """Tajikistan."""
  TJ

  """Tanzania."""
  TZ

  """Thailand."""
  TH

  """Timor-Leste."""
  TL

  """Togo."""
  TG

  """Tokelau."""
  TK

  """Tonga."""
  TO

  """Trinidad & Tobago."""
  TT

  """Tristan da Cunha."""
  TA

  """Tunisia."""
  TN

  """Turkey."""
  TR

  """Turkmenistan."""
  TM

  """Turks & Caicos Islands."""
  TC

  """Tuvalu."""
  TV

  """Uganda."""
  UG

  """Ukraine."""
  UA

  """United Arab Emirates."""
  AE

  """United Kingdom."""
  GB

  """United States."""
  US

  """U.S. Outlying Islands."""
  UM

  """Uruguay."""
  UY

  """Uzbekistan."""
  UZ

  """Vanuatu."""
  VU

  """Venezuela."""
  VE

  """Vietnam."""
  VN

  """British Virgin Islands."""
  VG

  """Wallis & Futuna."""
  WF

  """Western Sahara."""
  EH

  """Yemen."""
  YE

  """Zambia."""
  ZM

  """Zimbabwe."""
  ZW

  """Unknown Region."""
  ZZ
}

"""
The country-specific harmonized system code and ISO country code for an inventory item.
"""
type CountryHarmonizedSystemCode {
  """
  The ISO 3166-1 alpha-2 country code for the country that issued the specified harmonized system code.
  """
  countryCode: CountryCode!

  """
  The country-specific harmonized system code. These are usually longer than 6 digits.
  """
  harmonizedSystemCode: String!
}

"""
An auto-generated type for paginating through multiple CountryHarmonizedSystemCodes.
"""
type CountryHarmonizedSystemCodeConnection {
  """A list of edges."""
  edges: [CountryHarmonizedSystemCodeEdge!]!

  """A list of the nodes contained in CountryHarmonizedSystemCodeEdge."""
  nodes: [CountryHarmonizedSystemCode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CountryHarmonizedSystemCode and a cursor during pagination.
"""
type CountryHarmonizedSystemCodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CountryHarmonizedSystemCodeEdge."""
  node: CountryHarmonizedSystemCode!
}

"""The input fields required to specify a harmonized system code."""
input CountryHarmonizedSystemCodeInput {
  """Country specific harmonized system code."""
  harmonizedSystemCode: String!

  """
  The ISO 3166-1 alpha-2 country code for the country that issued the specified harmonized system code.
  """
  countryCode: CountryCode!
}

"""The input fields required to create a media object."""
input CreateMediaInput {
  """
  The original source of the media object. This might be an external URL or a staged upload URL.
  """
  originalSource: String!

  """The alt text associated with the media."""
  alt: String

  """The media content type."""
  mediaContentType: MediaContentType!
}

"""The part of the image that should remain after cropping."""
enum CropRegion {
  """Keep the center of the image."""
  CENTER

  """Keep the top of the image."""
  TOP

  """Keep the bottom of the image."""
  BOTTOM

  """Keep the left of the image."""
  LEFT

  """Keep the right of the image."""
  RIGHT
}

"""
The three-letter currency codes that represent the world currencies used in
stores. These include standard ISO 4217 codes, legacy codes,
and non-standard codes.
"""
enum CurrencyCode {
  """United States Dollars (USD)."""
  USD

  """Euro (EUR)."""
  EUR

  """United Kingdom Pounds (GBP)."""
  GBP

  """Canadian Dollars (CAD)."""
  CAD

  """Afghan Afghani (AFN)."""
  AFN

  """Albanian Lek (ALL)."""
  ALL

  """Algerian Dinar (DZD)."""
  DZD

  """Angolan Kwanza (AOA)."""
  AOA

  """Argentine Pesos (ARS)."""
  ARS

  """Armenian Dram (AMD)."""
  AMD

  """Aruban Florin (AWG)."""
  AWG

  """Australian Dollars (AUD)."""
  AUD

  """Barbadian Dollar (BBD)."""
  BBD

  """Azerbaijani Manat (AZN)."""
  AZN

  """Bangladesh Taka (BDT)."""
  BDT

  """Bahamian Dollar (BSD)."""
  BSD

  """Bahraini Dinar (BHD)."""
  BHD

  """Burundian Franc (BIF)."""
  BIF

  """Belize Dollar (BZD)."""
  BZD

  """Bermudian Dollar (BMD)."""
  BMD

  """Bhutanese Ngultrum (BTN)."""
  BTN

  """Bosnia and Herzegovina Convertible Mark (BAM)."""
  BAM

  """Brazilian Real (BRL)."""
  BRL

  """Bolivian Boliviano (BOB)."""
  BOB

  """Botswana Pula (BWP)."""
  BWP

  """Brunei Dollar (BND)."""
  BND

  """Bulgarian Lev (BGN)."""
  BGN

  """Burmese Kyat (MMK)."""
  MMK

  """Cambodian Riel."""
  KHR

  """Cape Verdean escudo (CVE)."""
  CVE

  """Cayman Dollars (KYD)."""
  KYD

  """Central African CFA Franc (XAF)."""
  XAF

  """Chilean Peso (CLP)."""
  CLP

  """Chinese Yuan Renminbi (CNY)."""
  CNY

  """Colombian Peso (COP)."""
  COP

  """Comorian Franc (KMF)."""
  KMF

  """Congolese franc (CDF)."""
  CDF

  """Costa Rican Colones (CRC)."""
  CRC

  """Croatian Kuna (HRK)."""
  HRK

  """Czech Koruny (CZK)."""
  CZK

  """Danish Kroner (DKK)."""
  DKK

  """Dominican Peso (DOP)."""
  DOP

  """East Caribbean Dollar (XCD)."""
  XCD

  """Egyptian Pound (EGP)."""
  EGP

  """Ethiopian Birr (ETB)."""
  ETB

  """CFP Franc (XPF)."""
  XPF

  """Fijian Dollars (FJD)."""
  FJD

  """Gambian Dalasi (GMD)."""
  GMD

  """Ghanaian Cedi (GHS)."""
  GHS

  """Guatemalan Quetzal (GTQ)."""
  GTQ

  """Guyanese Dollar (GYD)."""
  GYD

  """Georgian Lari (GEL)."""
  GEL

  """Haitian Gourde (HTG)."""
  HTG

  """Honduran Lempira (HNL)."""
  HNL

  """Hong Kong Dollars (HKD)."""
  HKD

  """Hungarian Forint (HUF)."""
  HUF

  """Icelandic Kronur (ISK)."""
  ISK

  """Indian Rupees (INR)."""
  INR

  """Indonesian Rupiah (IDR)."""
  IDR

  """Israeli New Shekel (NIS)."""
  ILS

  """Iraqi Dinar (IQD)."""
  IQD

  """Jamaican Dollars (JMD)."""
  JMD

  """Japanese Yen (JPY)."""
  JPY

  """Jersey Pound."""
  JEP

  """Jordanian Dinar (JOD)."""
  JOD

  """Kazakhstani Tenge (KZT)."""
  KZT

  """Kenyan Shilling (KES)."""
  KES

  """Kuwaiti Dinar (KWD)."""
  KWD

  """Kyrgyzstani Som (KGS)."""
  KGS

  """Laotian Kip (LAK)."""
  LAK

  """Latvian Lati (LVL)."""
  LVL

  """Lebanese Pounds (LBP)."""
  LBP

  """Lesotho Loti (LSL)."""
  LSL

  """Liberian Dollar (LRD)."""
  LRD

  """Lithuanian Litai (LTL)."""
  LTL

  """Malagasy Ariary (MGA)."""
  MGA

  """Macedonia Denar (MKD)."""
  MKD

  """Macanese Pataca (MOP)."""
  MOP

  """Malawian Kwacha (MWK)."""
  MWK

  """Maldivian Rufiyaa (MVR)."""
  MVR

  """Mexican Pesos (MXN)."""
  MXN

  """Malaysian Ringgits (MYR)."""
  MYR

  """Mauritian Rupee (MUR)."""
  MUR

  """Moldovan Leu (MDL)."""
  MDL

  """Moroccan Dirham."""
  MAD

  """Mongolian Tugrik."""
  MNT

  """Mozambican Metical."""
  MZN

  """Namibian Dollar."""
  NAD

  """Nepalese Rupee (NPR)."""
  NPR

  """Netherlands Antillean Guilder."""
  ANG

  """New Zealand Dollars (NZD)."""
  NZD

  """Nicaraguan Córdoba (NIO)."""
  NIO

  """Nigerian Naira (NGN)."""
  NGN

  """Norwegian Kroner (NOK)."""
  NOK

  """Omani Rial (OMR)."""
  OMR

  """Panamian Balboa (PAB)."""
  PAB

  """Pakistani Rupee (PKR)."""
  PKR

  """Papua New Guinean Kina (PGK)."""
  PGK

  """Paraguayan Guarani (PYG)."""
  PYG

  """Peruvian Nuevo Sol (PEN)."""
  PEN

  """Philippine Peso (PHP)."""
  PHP

  """Polish Zlotych (PLN)."""
  PLN

  """Qatari Rial (QAR)."""
  QAR

  """Romanian Lei (RON)."""
  RON

  """Russian Rubles (RUB)."""
  RUB

  """Rwandan Franc (RWF)."""
  RWF

  """Samoan Tala (WST)."""
  WST

  """Saudi Riyal (SAR)."""
  SAR

  """Serbian dinar (RSD)."""
  RSD

  """Seychellois Rupee (SCR)."""
  SCR

  """Singapore Dollars (SGD)."""
  SGD

  """Sudanese Pound (SDG)."""
  SDG

  """Syrian Pound (SYP)."""
  SYP

  """South African Rand (ZAR)."""
  ZAR

  """South Korean Won (KRW)."""
  KRW

  """South Sudanese Pound (SSP)."""
  SSP

  """Solomon Islands Dollar (SBD)."""
  SBD

  """Sri Lankan Rupees (LKR)."""
  LKR

  """Surinamese Dollar (SRD)."""
  SRD

  """Swazi Lilangeni (SZL)."""
  SZL

  """Swedish Kronor (SEK)."""
  SEK

  """Swiss Francs (CHF)."""
  CHF

  """Taiwan Dollars (TWD)."""
  TWD

  """Thai baht (THB)."""
  THB

  """Tanzanian Shilling (TZS)."""
  TZS

  """Trinidad and Tobago Dollars (TTD)."""
  TTD

  """Tunisian Dinar (TND)."""
  TND

  """Turkish Lira (TRY)."""
  TRY

  """Turkmenistani Manat (TMT)."""
  TMT

  """Ugandan Shilling (UGX)."""
  UGX

  """Ukrainian Hryvnia (UAH)."""
  UAH

  """United Arab Emirates Dirham (AED)."""
  AED

  """Uruguayan Pesos (UYU)."""
  UYU

  """Uzbekistan som (UZS)."""
  UZS

  """Vanuatu Vatu (VUV)."""
  VUV

  """Vietnamese đồng (VND)."""
  VND

  """West African CFA franc (XOF)."""
  XOF

  """Yemeni Rial (YER)."""
  YER

  """Zambian Kwacha (ZMW)."""
  ZMW

  """Belarusian Ruble (BYN)."""
  BYN

  """Belarusian Ruble (BYR)."""
  BYR @deprecated(reason: "`BYR` is deprecated. Use `BYN` available from version `2021-01` onwards instead.")

  """Djiboutian Franc (DJF)."""
  DJF

  """Eritrean Nakfa (ERN)."""
  ERN

  """Falkland Islands Pounds (FKP)."""
  FKP

  """Gibraltar Pounds (GIP)."""
  GIP

  """Guinean Franc (GNF)."""
  GNF

  """Iranian Rial (IRR)."""
  IRR

  """Kiribati Dollar (KID)."""
  KID

  """Libyan Dinar (LYD)."""
  LYD

  """Mauritanian Ouguiya (MRU)."""
  MRU

  """Sierra Leonean Leone (SLL)."""
  SLL

  """Saint Helena Pounds (SHP)."""
  SHP

  """Somali Shilling (SOS)."""
  SOS

  """Sao Tome And Principe Dobra (STD)."""
  STD @deprecated(reason: "`STD` is deprecated. Use `STN` available from version `2022-07` onwards instead.")

  """Sao Tome And Principe Dobra (STN)."""
  STN

  """Tajikistani Somoni (TJS)."""
  TJS

  """Tongan Pa'anga (TOP)."""
  TOP

  """Venezuelan Bolivares (VED)."""
  VED

  """Venezuelan Bolivares (VEF)."""
  VEF @deprecated(reason: "`VEF` is deprecated. Use `VES` available from version `2020-10` onwards instead.")

  """Venezuelan Bolivares (VES)."""
  VES

  """Unrecognized currency."""
  XXX
}

"""
Currency formats configured for the merchant. These formats are available to use within Liquid.
"""
type CurrencyFormats {
  """Money without currency in HTML."""
  moneyFormat: FormattedString!

  """Money without currency in emails."""
  moneyInEmailsFormat: String!

  """Money with currency in HTML."""
  moneyWithCurrencyFormat: FormattedString!

  """Money with currency in emails."""
  moneyWithCurrencyInEmailsFormat: String!
}

"""A setting for a presentment currency."""
type CurrencySetting {
  """The currency's ISO code."""
  currencyCode: CurrencyCode!

  """The full name of the currency."""
  currencyName: String!

  """
  Whether the currency is enabled or not. An enabled currency setting is visible
  to buyers and allows orders to be generated with that currency as presentment.
  """
  enabled: Boolean!

  """
  The date and time when the active exchange rate for the currency was last
  modified. It can be the automatic rate's creation date, or the manual rate's
  last updated at date if active.
  """
  rateUpdatedAt: DateTime
}

"""
An auto-generated type for paginating through multiple CurrencySettings.
"""
type CurrencySettingConnection {
  """A list of edges."""
  edges: [CurrencySettingEdge!]!

  """A list of the nodes contained in CurrencySettingEdge."""
  nodes: [CurrencySetting!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CurrencySetting and a cursor during pagination.
"""
type CurrencySettingEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CurrencySettingEdge."""
  node: CurrencySetting!
}

"""
Represents information about a customer of the shop, such as the customer's contact details, their order
history, and whether they've agreed to receive marketing material by email.

**Caution:** Only use this data if it's required for your app's functionality.
Shopify will restrict [access to
scopes](https://shopify.dev/api/usage/access-scopes) for apps that don't have a
legitimate use for the associated data.
"""
type Customer implements CommentEventSubject & HasEvents & HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node {
  """Whether the customer has agreed to receive marketing material."""
  acceptsMarketing: Boolean! @deprecated(reason: "Use `emailMarketingConsent` instead.")

  """
  The date and time when the customer consented or objected to receiving marketing material by email.
  """
  acceptsMarketingUpdatedAt: DateTime! @deprecated(reason: "Use `emailMarketingConsent` instead.")

  """A list of addresses associated with the customer."""
  addresses(
    """Truncate the array result to this size."""
    first: Int
  ): [MailingAddress!]!

  """
  The total amount that the customer has spent on orders in their lifetime.
  """
  amountSpent: MoneyV2!

  """The average amount that the customer spent per order."""
  averageOrderAmount: Money @deprecated(reason: "Use `averageOrderAmountV2` instead.")

  """The average amount that the customer spent per order."""
  averageOrderAmountV2: MoneyV2

  """
  Whether the merchant can delete the customer from their store.
  
  A customer can be deleted from a store only if they haven't yet made an order. After a customer makes an
  order, they can't be deleted from a store.
  """
  canDelete: Boolean!

  """A list of the customer's company contact profiles."""
  companyContactProfiles: [CompanyContact!]!

  """The date and time when the customer was added to the store."""
  createdAt: DateTime!

  """The default address associated with the customer."""
  defaultAddress: MailingAddress

  """
  The full name of the customer, based on the values for first_name and last_name. If the first_name and
  last_name are not available, then this falls back to the customer's email
  address, and if that is not available, the customer's phone number.
  """
  displayName: String!

  """The customer's email address."""
  email: String

  """
  The current email marketing state for the customer.
  If the customer doesn't have an email address, then this property is `null`.
  """
  emailMarketingConsent: CustomerEmailMarketingConsentState

  """A list of events associated with the customer."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """The customer's first name."""
  firstName: String

  """
  Whether the merchant has added timeline comments about the customer on the customer's page.
  """
  hasTimelineComment: Boolean! @deprecated(reason: "To query for comments on the timeline, use the events connection and a `query` argument containing `verb:comment`, or look for a `CommentEvent` in the `__typename` of events.")

  """A globally-unique ID."""
  id: ID!

  """The image associated with the customer."""
  image: Image!

  """The customer's last name."""
  lastName: String

  """The customer's last order."""
  lastOrder: Order

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """
  The amount of time since the customer was first added to the store.
  
  Example: 'about 12 years'.
  """
  lifetimeDuration: String!

  """The customer's locale."""
  locale: String!

  """The market that includes the customer’s default address."""
  market: Market

  """
  The marketing subscription opt-in level, as described by the M3AAWG best practices guidelines, that the
  customer gave when they consented to receive marketing material by email.
  
  If the customer doesn't accept email marketing, then this property is `null`.
  """
  marketingOptInLevel: CustomerMarketingOptInLevel @deprecated(reason: "Use `emailMarketingConsent` instead.")

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """A unique identifier for the customer that's used with Multipass login."""
  multipassIdentifier: String

  """A note about the customer."""
  note: String

  """
  The number of orders that the customer has made at the store in their lifetime.
  """
  numberOfOrders: UnsignedInt64!

  """A list of the customer's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = ID

    """
    Supported filter parameters:
     - `cart_token`
     - `channel`
     - `channel_id`
     - `chargeback_status`
     - `checkout_token`
     - `confirmation_number`
     - `created_at`
     - `credit_card_last4`
     - `customer_id`
     - `delivery_method`
     - `discount_code`
     - `earliest_fulfill_by`
     - `email`
     - `financial_status`
     - `fraud_protection_level`
     - `fulfillment_location_id`
     - `fulfillment_status`
     - `gateway`
     - `location_id`
     - `name`
     - `payment_id`
     - `payment_provider_id`
     - `po_number`
     - `processed_at`
     - `reference_location_id`
     - `return_status`
     - `risk_level`
     - `sales_channel`
     - `sku`
     - `source_identifier`
     - `source_name`
     - `status`
     - `tag`
     - `tag_not`
     - `test`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): OrderConnection!

  """A list of the customer's payment methods."""
  paymentMethods(
    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CustomerPaymentMethodConnection!

  """The customer's phone number."""
  phone: String

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """
  Possible subscriber states of a customer defined by their subscription contracts.
  """
  productSubscriberStatus: CustomerProductSubscriberStatus!

  """
  The current SMS marketing state for the customer's phone number.
  
  If the customer does not have a phone number, then this property is `null`.
  """
  smsMarketingConsent: CustomerSmsMarketingConsentState

  """The state of the customer's account with the shop."""
  state: CustomerState!

  """The statistics for a given customer."""
  statistics: CustomerStatistics!

  """A list of the customer's subscription contracts."""
  subscriptionContracts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionContractConnection!

  """A comma separated list of tags that have been added to the customer."""
  tags: [String!]!

  """
  Whether the customer is exempt from being charged taxes on their orders.
  """
  taxExempt: Boolean!

  """The list of tax exemptions applied to the customer."""
  taxExemptions: [TaxExemption!]!

  """The URL to unsubscribe the customer from the mailing list."""
  unsubscribeUrl: URL!

  """The date and time when the customer was last updated."""
  updatedAt: DateTime!

  """
  Whether the email address is formatted correctly.
  
  Returns `true` when the email is formatted correctly and
  belongs to an existing domain. This doesn't guarantee that
  the email address actually exists.
  """
  validEmailAddress: Boolean!

  """
  Whether the customer has verified their email address. Defaults to `true` if
  the customer is created through the Shopify admin or API.
  """
  verifiedEmail: Boolean!
}

"""Return type for `customerAddTaxExemptions` mutation."""
type CustomerAddTaxExemptionsPayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An auto-generated type for paginating through multiple Customers."""
type CustomerConnection {
  """A list of edges."""
  edges: [CustomerEdge!]!

  """A list of the nodes contained in CustomerEdge."""
  nodes: [Customer!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The source that collected the customer's consent to receive marketing materials.
"""
enum CustomerConsentCollectedFrom {
  """The customer consent was collected by Shopify."""
  SHOPIFY

  """The customer consent was collected outside of Shopify."""
  OTHER
}

"""Return type for `customerCreate` mutation."""
type CustomerCreatePayload {
  """The created customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Represents a card instrument for customer payment method."""
type CustomerCreditCard {
  """The billing address of the card."""
  billingAddress: CustomerCreditCardBillingAddress

  """The brand of the card."""
  brand: String!

  """Whether the card is about to expire."""
  expiresSoon: Boolean!

  """The expiry month of the card."""
  expiryMonth: Int!

  """The expiry year of the card."""
  expiryYear: Int!

  """The card's BIN number."""
  firstDigits: String

  """
  The payment method can be revoked if there are no active subscription contracts.
  """
  isRevocable: Boolean!

  """The last 4 digits of the card."""
  lastDigits: String!

  """The masked card number with only the last 4 digits displayed."""
  maskedNumber: String!

  """The name of the card holder."""
  name: String!

  """The source of the card if coming from a wallet such as Apple Pay."""
  source: String

  """The last 4 digits of the Device Account Number."""
  virtualLastDigits: String
}

"""The billing address of a credit card payment instrument."""
type CustomerCreditCardBillingAddress {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  For example, US.
  """
  countryCode: CountryCode

  """The first name in the billing address."""
  firstName: String

  """The last name in the billing address."""
  lastName: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """
  The two-letter code for the region.
  For example, ON.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""The input fields to delete a customer."""
input CustomerDeleteInput {
  """The ID of the customer to delete."""
  id: ID!
}

"""Return type for `customerDelete` mutation."""
type CustomerDeletePayload {
  """The ID of the deleted customer."""
  deletedCustomerId: ID

  """The shop of the deleted customer."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one Customer and a cursor during pagination.
"""
type CustomerEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CustomerEdge."""
  node: Customer!
}

"""Represents an email address."""
type CustomerEmailAddress {
  """The customer's default email address."""
  emailAddress: String!

  """Whether the customer has subscribed to email marketing."""
  marketingState: CustomerEmailAddressMarketingState!

  """The URL to unsubscribe a member from all mailing lists."""
  marketingUnsubscribeUrl: URL!

  """
  Whether the customer has opted in to having their opened emails tracked.
  """
  openTrackingLevel: CustomerEmailAddressOpenTrackingLevel!

  """
  The URL that can be used to opt a customer in or out of email open tracking.
  """
  openTrackingUrl: URL!
}

"""Possible marketing states for the customer’s email address."""
enum CustomerEmailAddressMarketingState {
  """The customer’s email address marketing state is invalid."""
  INVALID

  """The customer is not subscribed to email marketing."""
  NOT_SUBSCRIBED

  """The customer is in the process of subscribing to email marketing."""
  PENDING

  """The customer is subscribed to email marketing."""
  SUBSCRIBED

  """
  The customer is not subscribed to email marketing but was previously subscribed.
  """
  UNSUBSCRIBED
}

"""
The different levels related to whether a customer has opted in to having their opened emails tracked.
"""
enum CustomerEmailAddressOpenTrackingLevel {
  """
  The customer has not specified whether they want to opt in or out of having their open emails tracked.
  """
  UNKNOWN

  """The customer has opted in to having their open emails tracked."""
  OPTED_IN

  """The customer has opted out of having their open emails tracked."""
  OPTED_OUT
}

"""
Information that describes when a customer consented to
        receiving marketing material by email.
"""
input CustomerEmailMarketingConsentInput {
  """
  The customer opt-in level at the time of subscribing to marketing material.
  """
  marketingOptInLevel: CustomerMarketingOptInLevel

  """
  The current marketing state associated with the customer's email.
            If the customer doesn't have an email, then this field is `null`.
  """
  marketingState: CustomerEmailMarketingState!

  """
  The latest date and time when the customer consented or objected to
            receiving marketing material by email.
  """
  consentUpdatedAt: DateTime
}

"""
The record of when a customer consented to receive marketing material by email.
"""
type CustomerEmailMarketingConsentState {
  """
  The date and time at which the customer consented to receive marketing material by email.
  The customer's consent state reflects the consent record with the most recent `consent_updated_at` date.
  If no date is provided, then the date and time at which the consent information was sent is used.
  """
  consentUpdatedAt: DateTime

  """
  The marketing subscription opt-in level, as described by the M3AAWG best practices guidelines,
  that the customer gave when they consented to receive marketing material by email.
  """
  marketingOptInLevel: CustomerMarketingOptInLevel

  """The current email marketing state for the customer."""
  marketingState: CustomerEmailMarketingState!
}

"""
The input fields for the email consent information to update for a given customer ID.
"""
input CustomerEmailMarketingConsentUpdateInput {
  """
  The ID of the customer for which to update the email marketing consent
  information. The customer must have a unique email address associated to the
  record. If not, add the email address using the `customerUpdate` mutation first.
  """
  customerId: ID!

  """
  The marketing consent information when the customer consented to receiving marketing material by email.
  """
  emailMarketingConsent: CustomerEmailMarketingConsentInput!
}

"""Return type for `customerEmailMarketingConsentUpdate` mutation."""
type CustomerEmailMarketingConsentUpdatePayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerEmailMarketingConsentUpdateUserError!]!
}

"""
An error that occurs during the execution of `CustomerEmailMarketingConsentUpdate`.
"""
type CustomerEmailMarketingConsentUpdateUserError implements DisplayableError {
  """The error code."""
  code: CustomerEmailMarketingConsentUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerEmailMarketingConsentUpdateUserError`.
"""
enum CustomerEmailMarketingConsentUpdateUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value isn't included in the list."""
  INCLUSION

  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Missing a required argument."""
  MISSING_ARGUMENT
}

"""The possible email marketing states for a customer."""
enum CustomerEmailMarketingState {
  """The customer isn't subscribed to email marketing."""
  NOT_SUBSCRIBED

  """The customer is in the process of subscribing to email marketing."""
  PENDING

  """The customer is subscribed to email marketing."""
  SUBSCRIBED

  """
  The customer isn't currently subscribed to email marketing but was previously subscribed.
  """
  UNSUBSCRIBED

  """
  The customer's personal data is erased. This value is internally-set and read-only.
  """
  REDACTED

  """The customer’s email address marketing state is invalid."""
  INVALID
}

"""Return type for `customerGenerateAccountActivationUrl` mutation."""
type CustomerGenerateAccountActivationUrlPayload {
  """The generated account activation URL."""
  accountActivationUrl: URL

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields and values to use when creating or updating a customer.
"""
input CustomerInput {
  """The addresses for a customer."""
  addresses: [MailingAddressInput!]

  """The unique email address of the customer."""
  email: String

  """The customer's first name."""
  firstName: String

  """The ID of the customer to update."""
  id: ID

  """The customer's last name."""
  lastName: String

  """The customer's locale."""
  locale: String

  """Additional metafields to associate to the customer."""
  metafields: [MetafieldInput!]

  """A note about the customer."""
  note: String

  """The unique phone number for the customer."""
  phone: String

  """
  A list of tags to associate with the customer. Can be an array or a
  comma-separated list. Example values: `["tag1", "tag2", "tag3"]`, `"tag1, tag2, tag3"`
  
  Updating `tags` overwrites any existing tags that were previously added to the
  customer. To add new tags without overwriting
  existing tags, use the [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsadd)
  mutation.
  """
  tags: [String!]

  """
  Information that describes when the customer consented to receiving marketing
          material by email. The `email` field is required when creating a customer with email marketing
          consent information.
  """
  emailMarketingConsent: CustomerEmailMarketingConsentInput

  """
  The marketing consent information when the customer consented to receiving marketing
          material by SMS. The `phone` field is required when creating a customer with SMS
          marketing consent information.
  """
  smsMarketingConsent: CustomerSmsMarketingConsentInput

  """Whether the customer is exempt from paying taxes on their order."""
  taxExempt: Boolean

  """The list of tax exemptions to apply to the customer."""
  taxExemptions: [TaxExemption!]
}

"""Represents a customer's visiting activities on a shop's online store."""
type CustomerJourney {
  """The position of the current order within the customer's order history."""
  customerOrderIndex: Int!

  """
  The amount of days between first session and order creation date. First
  session represents first session since the last order, or first session within
  the 30 day attribution window, if more than 30 days has passed since the last order.
  """
  daysToConversion: Int!

  """The customer's first session going into the shop."""
  firstVisit: CustomerVisit!

  """The last session before an order is made."""
  lastVisit: CustomerVisit

  """Events preceding a customer order, such as shop sessions."""
  moments: [CustomerMoment!]!
}

"""Represents a customer's visiting activities on a shop's online store."""
type CustomerJourneySummary {
  """
  The position of the current order within the customer's order history. Test orders aren't included.
  """
  customerOrderIndex: Int

  """
  The number of days between the first session and the order creation date. The
  first session represents the first session since the last order, or the first
  session within the 30 day attribution window, if more than 30 days have passed
  since the last order.
  """
  daysToConversion: Int

  """The customer's first session going into the shop."""
  firstVisit: CustomerVisit

  """The last session before an order is made."""
  lastVisit: CustomerVisit

  """The events preceding a customer's order, such as shop sessions."""
  moments(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CustomerMomentConnection

  """
  The total number of customer moments associated with this order. Returns null
  if the order is still in the process of being attributed.
  """
  momentsCount: Int

  """Whether the attributed sessions for the order have been created yet."""
  ready: Boolean!
}

"""
The possible values for the marketing subscription opt-in level enabled at the
time the customer consented to receive marketing information.

The levels are defined by [the M3AAWG best practices guideline
  document](https://www.m3aawg.org/sites/maawg/files/news/M3AAWG_Senders_BCP_Ver3-2015-02.pdf).
"""
enum CustomerMarketingOptInLevel {
  """
  After providing their information, the customer receives marketing information without any
  intermediate steps.
  """
  SINGLE_OPT_IN

  """
  After providing their information, the customer receives a confirmation and is required to
  perform a intermediate step before receiving marketing information.
  """
  CONFIRMED_OPT_IN

  """
  The customer receives marketing information but how they were opted in is unknown.
  """
  UNKNOWN
}

"""
Represents a session preceding an order, often used for building a timeline of events leading to an order.
"""
interface CustomerMoment {
  """The date and time when the customer's session occurred."""
  occurredAt: DateTime!
}

"""
An auto-generated type for paginating through multiple CustomerMoments.
"""
type CustomerMomentConnection {
  """A list of edges."""
  edges: [CustomerMomentEdge!]!

  """A list of the nodes contained in CustomerMomentEdge."""
  nodes: [CustomerMoment!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CustomerMoment and a cursor during pagination.
"""
type CustomerMomentEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CustomerMomentEdge."""
  node: CustomerMoment!
}

"""All possible instruments for CustomerPaymentMethods."""
union CustomerPaymentInstrument = CustomerCreditCard | CustomerPaypalBillingAgreement | CustomerShopPayAgreement

"""The billing address of a payment instrument."""
type CustomerPaymentInstrumentBillingAddress {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  For example, US.
  """
  countryCode: CountryCode

  """The name of the buyer of the address."""
  name: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """
  The two-letter code for the region.
  For example, ON.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""A customer's payment method."""
type CustomerPaymentMethod implements Node {
  """The customer to whom the payment method belongs."""
  customer: Customer

  """The ID of this payment method."""
  id: ID!

  """The instrument for this payment method."""
  instrument: CustomerPaymentInstrument

  """The time that the payment method was revoked."""
  revokedAt: DateTime

  """The revocation reason for this payment method."""
  revokedReason: CustomerPaymentMethodRevocationReason

  """List Subscription Contracts."""
  subscriptionContracts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionContractConnection!
}

"""
An auto-generated type for paginating through multiple CustomerPaymentMethods.
"""
type CustomerPaymentMethodConnection {
  """A list of edges."""
  edges: [CustomerPaymentMethodEdge!]!

  """A list of the nodes contained in CustomerPaymentMethodEdge."""
  nodes: [CustomerPaymentMethod!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `customerPaymentMethodCreditCardCreate` mutation."""
type CustomerPaymentMethodCreditCardCreatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `customerPaymentMethodCreditCardUpdate` mutation."""
type CustomerPaymentMethodCreditCardUpdatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one CustomerPaymentMethod and a cursor during pagination.
"""
type CustomerPaymentMethodEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CustomerPaymentMethodEdge."""
  node: CustomerPaymentMethod!
}

"""Return type for `customerPaymentMethodGetUpdateUrl` mutation."""
type CustomerPaymentMethodGetUpdateUrlPayload {
  """The URL to redirect the customer to update the payment method."""
  updatePaymentMethodUrl: URL

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerPaymentMethodGetUpdateUrlUserError!]!
}

"""
An error that occurs during the execution of `CustomerPaymentMethodGetUpdateUrl`.
"""
type CustomerPaymentMethodGetUpdateUrlUserError implements DisplayableError {
  """The error code."""
  code: CustomerPaymentMethodGetUpdateUrlUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerPaymentMethodGetUpdateUrlUserError`.
"""
enum CustomerPaymentMethodGetUpdateUrlUserErrorCode {
  """Payment method doesn't exist."""
  PAYMENT_METHOD_DOES_NOT_EXIST

  """Invalid payment instrument."""
  INVALID_INSTRUMENT

  """Too many requests."""
  TOO_MANY_REQUESTS

  """Customer doesn't exist."""
  CUSTOMER_DOES_NOT_EXIST
}

"""
Return type for `customerPaymentMethodPaypalBillingAgreementCreate` mutation.
"""
type CustomerPaymentMethodPaypalBillingAgreementCreatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerPaymentMethodUserError!]!
}

"""
Return type for `customerPaymentMethodPaypalBillingAgreementUpdate` mutation.
"""
type CustomerPaymentMethodPaypalBillingAgreementUpdatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerPaymentMethodUserError!]!
}

"""Return type for `customerPaymentMethodRemoteCreate` mutation."""
type CustomerPaymentMethodRemoteCreatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerPaymentMethodRemoteUserError!]!
}

"""
Return type for `customerPaymentMethodRemoteCreditCardCreate` mutation.
"""
type CustomerPaymentMethodRemoteCreditCardCreatePayload {
  """The customer payment method."""
  customerPaymentMethod: CustomerPaymentMethod

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerPaymentMethodUserError!]!
}

"""
The input fields for a remote gateway payment method, only one remote reference permitted.
"""
input CustomerPaymentMethodRemoteInput {
  """Input containing the fields for a remote stripe payment method."""
  stripePaymentMethod: RemoteStripePaymentMethodInput

  """The input fields for a remote authorize net customer profile."""
  authorizeNetCustomerPaymentProfile: RemoteAuthorizeNetCustomerPaymentProfileInput

  """The input fields for a remote Braintree customer profile."""
  braintreePaymentMethod: RemoteBraintreePaymentMethodInput
}

"""Represents an error in the input of a mutation."""
type CustomerPaymentMethodRemoteUserError implements DisplayableError {
  """The error code."""
  code: CustomerPaymentMethodRemoteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerPaymentMethodRemoteUserError`.
"""
enum CustomerPaymentMethodRemoteUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value needs to be blank."""
  PRESENT

  """The input value is already taken."""
  TAKEN

  """Exactly one remote reference is required."""
  EXACTLY_ONE_REMOTE_REFERENCE_REQUIRED

  """Authorize.net is not enabled for subscriptions."""
  AUTHORIZE_NET_NOT_ENABLED_FOR_SUBSCRIPTIONS

  """Braintree is not enabled for subscriptions."""
  BRAINTREE_NOT_ENABLED_FOR_SUBSCRIPTIONS
}

"""The revocation reason types for a customer payment method."""
enum CustomerPaymentMethodRevocationReason {
  """The Authorize.net payment gateway is not enabled."""
  AUTHORIZE_NET_GATEWAY_NOT_ENABLED

  """
  Authorize.net did not return any payment methods. Make sure that the correct Authorize.net account is linked.
  """
  AUTHORIZE_NET_RETURNED_NO_PAYMENT_METHOD

  """The credit card failed to update."""
  FAILED_TO_UPDATE_CREDIT_CARD

  """Failed to contact the Stripe API."""
  STRIPE_API_AUTHENTICATION_ERROR

  """Invalid request. Failed to retrieve payment method from Stripe."""
  STRIPE_API_INVALID_REQUEST_ERROR

  """The Stripe payment gateway is not enabled."""
  STRIPE_GATEWAY_NOT_ENABLED

  """
  Stripe did not return any payment methods. Make sure that the correct Stripe account is linked.
  """
  STRIPE_RETURNED_NO_PAYMENT_METHOD

  """The Stripe payment method type should be card."""
  STRIPE_PAYMENT_METHOD_NOT_CARD

  """Failed to contact Braintree API."""
  BRAINTREE_API_AUTHENTICATION_ERROR

  """The Braintree payment gateway is not enabled."""
  BRAINTREE_GATEWAY_NOT_ENABLED

  """
  Braintree returned no payment methods. Make sure the correct Braintree account is linked.
  """
  BRAINTREE_RETURNED_NO_PAYMENT_METHOD

  """
  The Braintree payment method type should be a credit card or Apple Pay card.
  """
  BRAINTREE_PAYMENT_METHOD_NOT_CARD

  """The payment method was manually revoked."""
  MANUALLY_REVOKED

  """
  The payment method was replaced with an existing payment method. The
  associated contracts have been migrated to the other payment method.
  """
  MERGED
}

"""Return type for `customerPaymentMethodRevoke` mutation."""
type CustomerPaymentMethodRevokePayload {
  """The ID of the revoked customer payment method."""
  revokedCustomerPaymentMethodId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `customerPaymentMethodSendUpdateEmail` mutation."""
type CustomerPaymentMethodSendUpdateEmailPayload {
  """The customer to whom an update payment method email was sent."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Represents an error in the input of a mutation."""
type CustomerPaymentMethodUserError implements DisplayableError {
  """The error code."""
  code: CustomerPaymentMethodUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerPaymentMethodUserError`.
"""
enum CustomerPaymentMethodUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value needs to be blank."""
  PRESENT

  """The input value is already taken."""
  TAKEN
}

"""Represents a PayPal instrument for customer payment method."""
type CustomerPaypalBillingAgreement {
  """The billing address of this payment method."""
  billingAddress: CustomerPaymentInstrumentBillingAddress

  """Whether the PayPal billing agreement is inactive."""
  inactive: Boolean!

  """
  Whether the payment method can be revoked.The payment method can be revoked if there are no active subscription contracts.
  """
  isRevocable: Boolean!

  """The customers's PayPal account email address."""
  paypalAccountEmail: String
}

"""A phone number."""
type CustomerPhoneNumber {
  """Whether the customer has subscribed to SMS marketing material."""
  marketingState: CustomerSmsMarketingState!

  """A customer's phone number."""
  phoneNumber: String!
}

"""The valid tiers for the predicted spend of a customer with a shop."""
enum CustomerPredictedSpendTier {
  """
  The customer's spending is predicted to be in the top spending range for the shop in the following year.
  """
  HIGH

  """
  The customer's spending is predicted to be in the normal spending range for the shop in the following year.
  """
  MEDIUM

  """
  The customer's spending is predicted to be zero, or in the lowest spending range for the shop in the following year.
  """
  LOW
}

"""
The possible product subscription states for a customer, as defined by the customer's subscription contracts.
"""
enum CustomerProductSubscriberStatus {
  """The customer has at least one active subscription contract."""
  ACTIVE

  """
  The customer's last subscription contract was cancelled and there are no other active or paused
  subscription contracts.
  """
  CANCELLED

  """
  The customer's last subscription contract expired and there are no other active or paused
  subscription contracts.
  """
  EXPIRED

  """
  The customer's last subscription contract failed and there are no other active or paused
  subscription contracts.
  """
  FAILED

  """The customer has never had a subscription contract."""
  NEVER_SUBSCRIBED

  """
  The customer has at least one paused subscription contract and there are no other active
  subscription contracts.
  """
  PAUSED
}

"""Return type for `customerRemoveTaxExemptions` mutation."""
type CustomerRemoveTaxExemptionsPayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `customerReplaceTaxExemptions` mutation."""
type CustomerReplaceTaxExemptionsPayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The set of valid sort keys for the CustomerSavedSearch query."""
enum CustomerSavedSearchSortKeys {
  """Sort by the `name` value."""
  NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The member of a segment."""
type CustomerSegmentMember {
  """The total amount of money that the member has spent on orders."""
  amountSpent: MoneyV2

  """The member's default address."""
  defaultAddress: MailingAddress

  """The member's default email address."""
  defaultEmailAddress: CustomerEmailAddress

  """The member's default phone number."""
  defaultPhoneNumber: CustomerPhoneNumber

  """
  The full name of the member, which is based on the values of the `first_name`
  and `last_name` fields. If the member's first name and last name aren't
  available, then the customer's email address is used. If the customer's email
  address isn't available, then the customer's phone number is used.
  """
  displayName: String!

  """The member's first name."""
  firstName: String

  """The member’s ID."""
  id: ID!

  """The member's last name."""
  lastName: String

  """The ID of the member's most recent order."""
  lastOrderId: ID

  """A note about the member."""
  note: String

  """The total number of orders that the member has made."""
  numberOfOrders: UnsignedInt64
}

"""The connection type for the `CustomerSegmentMembers` object."""
type CustomerSegmentMemberConnection {
  """A list of edges."""
  edges: [CustomerSegmentMemberEdge!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!

  """The statistics for a given segment."""
  statistics: SegmentStatistics!
}

"""
An auto-generated type which holds one CustomerSegmentMember and a cursor during pagination.
"""
type CustomerSegmentMemberEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CustomerSegmentMemberEdge."""
  node: CustomerSegmentMember!
}

"""
A job to determine a list of members, such as customers, that are associated with an individual segment.
"""
type CustomerSegmentMembersQuery implements JobResult & Node {
  """The current total number of members in a given segment."""
  currentCount: Int!

  """This indicates if the job is still queued or has been run."""
  done: Boolean!

  """
  A globally-unique ID that's returned when running an asynchronous mutation.
  """
  id: ID!
}

"""Return type for `customerSegmentMembersQueryCreate` mutation."""
type CustomerSegmentMembersQueryCreatePayload {
  """The newly created customer segment members query."""
  customerSegmentMembersQuery: CustomerSegmentMembersQuery

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerSegmentMembersQueryUserError!]!
}

"""
The input fields and values for creating a customer segment members query.
"""
input CustomerSegmentMembersQueryInput {
  """The ID of the segment."""
  segmentId: ID

  """
  The query that's used to filter the members. The query is composed of a
  combination of conditions on facts about customers such as
  `email_subscription_status = 'SUBSCRIBED'` with [this
  syntax](https://shopify.dev/api/shopifyql/segment-query-language-reference).
  """
  query: String

  """
  Reverse the order of the list. The sorting behaviour defaults to ascending order.
  """
  reverse: Boolean = false

  """Sort the list by a given key."""
  sortKey: String
}

"""Represents a customer segment members query custom error."""
type CustomerSegmentMembersQueryUserError implements DisplayableError {
  """The error code."""
  code: CustomerSegmentMembersQueryUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerSegmentMembersQueryUserError`.
"""
enum CustomerSegmentMembersQueryUserErrorCode {
  """The input value is invalid."""
  INVALID
}

"""Represents a Shop Pay card instrument for customer payment method."""
type CustomerShopPayAgreement {
  """Whether the card is about to expire."""
  expiresSoon: Boolean!

  """The expiry month of the card."""
  expiryMonth: Int!

  """The expiry year of the card."""
  expiryYear: Int!

  """Whether the Shop Pay billing agreement is inactive."""
  inactive: Boolean!

  """
  The payment method can be revoked if there are no active subscription contracts.
  """
  isRevocable: Boolean!

  """The last 4 digits of the card."""
  lastDigits: String!

  """The masked card number with only the last 4 digits displayed."""
  maskedNumber: String!

  """The name of the card holder."""
  name: String!
}

"""
An error that occurs during execution of an SMS marketing consent mutation.
"""
type CustomerSmsMarketingConsentError implements DisplayableError {
  """The error code."""
  code: CustomerSmsMarketingConsentErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `CustomerSmsMarketingConsentError`.
"""
enum CustomerSmsMarketingConsentErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value isn't included in the list."""
  INCLUSION

  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Missing a required argument."""
  MISSING_ARGUMENT
}

"""
The marketing consent information when the customer consented to
        receiving marketing material by SMS.
"""
input CustomerSmsMarketingConsentInput {
  """
  The marketing subscription opt-in level that was set when the customer consented to receive marketing information.
  """
  marketingOptInLevel: CustomerMarketingOptInLevel

  """The current SMS marketing state for the customer."""
  marketingState: CustomerSmsMarketingState!

  """
  The date and time when the customer consented to receive marketing material by SMS.
  If no date is provided, then the date and time when the consent information was sent is used.
  """
  consentUpdatedAt: DateTime
}

"""
The record of when a customer consented to receive marketing material by SMS.

The customer's consent state reflects the record with the most recent date when consent was updated.
"""
type CustomerSmsMarketingConsentState {
  """
  The source from which the SMS marketing information for the customer was collected.
  """
  consentCollectedFrom: CustomerConsentCollectedFrom

  """
  The date and time when the customer consented to receive marketing material by SMS.
  If no date is provided, then the date and time when the consent information was sent is used.
  """
  consentUpdatedAt: DateTime

  """
  The marketing subscription opt-in level that was set when the customer consented to receive marketing information.
  """
  marketingOptInLevel: CustomerMarketingOptInLevel!

  """The current SMS marketing state for the customer."""
  marketingState: CustomerSmsMarketingState!
}

"""
The input fields for updating SMS marketing consent information for a given customer ID.
"""
input CustomerSmsMarketingConsentUpdateInput {
  """
  The ID of the customer to update the SMS marketing consent information for.
  The customer must have a unique phone number associated to the record. If not,
  add the phone number using the `customerUpdate` mutation first.
  """
  customerId: ID!

  """
  The marketing consent information when the customer consented to receiving marketing material by SMS.
  """
  smsMarketingConsent: CustomerSmsMarketingConsentInput!
}

"""Return type for `customerSmsMarketingConsentUpdate` mutation."""
type CustomerSmsMarketingConsentUpdatePayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [CustomerSmsMarketingConsentError!]!
}

"""The valid SMS marketing states for a customer’s phone number."""
enum CustomerSmsMarketingState {
  """The customer hasn't subscribed to SMS marketing."""
  NOT_SUBSCRIBED

  """The customer is in the process of subscribing to SMS marketing."""
  PENDING

  """The customer is subscribed to SMS marketing."""
  SUBSCRIBED

  """
  The customer isn't currently subscribed to SMS marketing but was previously subscribed.
  """
  UNSUBSCRIBED

  """
  The customer's personal data is erased. This value is internally-set and read-only.
  """
  REDACTED
}

"""The set of valid sort keys for the Customer query."""
enum CustomerSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `name` value."""
  NAME

  """Sort by the `location` value."""
  LOCATION

  """Sort by the `orders_count` value."""
  ORDERS_COUNT

  """Sort by the `last_order_date` value."""
  LAST_ORDER_DATE

  """Sort by the `total_spent` value."""
  TOTAL_SPENT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The valid values for the state of a customer's account with a shop."""
enum CustomerState {
  """The customer declined the email invite to create an account."""
  DECLINED

  """
  The customer doesn't have an active account. Customer accounts can be disabled from the Shopify admin at any time.
  """
  DISABLED

  """The customer has created an account."""
  ENABLED

  """The customer has received an email invite to create an account."""
  INVITED
}

"""A customer's computed statistics."""
type CustomerStatistics {
  """The predicted spend tier of a customer with a shop."""
  predictedSpendTier: CustomerPredictedSpendTier
}

"""Return type for `customerUpdateDefaultAddress` mutation."""
type CustomerUpdateDefaultAddressPayload {
  """The customer whose address was updated."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `customerUpdate` mutation."""
type CustomerUpdatePayload {
  """The updated customer."""
  customer: Customer

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Represents a customer's session visiting a shop's online store, including
information about the marketing activity attributed to starting the session.
"""
type CustomerVisit implements CustomerMoment & Node {
  """A globally-unique ID."""
  id: ID!

  """URL of the first page the customer landed on for the session."""
  landingPage: URL

  """
  Landing page information with URL linked in HTML. For example, the first page
  the customer visited was store.myshopify.com/products/1.
  """
  landingPageHtml: HTML

  """
  Represent actions taken by an app, on behalf of a merchant,
  to market Shopify resources such as products, collections, and discounts.
  """
  marketingEvent: MarketingEvent

  """The date and time when the customer's session occurred."""
  occurredAt: DateTime!

  """
  Marketing referral code from the link that the customer clicked to visit the store.
  Supports the following URL attributes: _ref_, _source_, or _r_.
  For example, if the URL is myshopifystore.com/products/slide?ref=j2tj1tn2, then this value is j2tj1tn2.
  """
  referralCode: String

  """Referral information with URLs linked in HTML."""
  referralInfoHtml: FormattedString!

  """
  Webpage where the customer clicked a link that sent them to the online store.
  For example, _https://randomblog.com/page1_ or _android-app://com.google.android.gm_.
  """
  referrerUrl: URL

  """
  Source from which the customer visited the store, such as a platform (Facebook, Google), email, direct,
  a website domain, QR code, or unknown.
  """
  source: String!

  """Describes the source explicitly for first or last session."""
  sourceDescription: String

  """Type of marketing tactic."""
  sourceType: MarketingTactic

  """
  A set of UTM parameters gathered from the URL parameters of the referrer.
  """
  utmParameters: UTMParameters
}

"""
This type returns the information about the product and product variant from a customer visit.
"""
type CustomerVisitProductInfo {
  """
  The product information. If `null`, then the product was deleted from the store.
  """
  product: Product

  """The quantity of the product that the customer requested."""
  quantity: Int!

  """The product variant information, if the product variant exists."""
  variant: ProductVariant
}

"""
An auto-generated type for paginating through multiple CustomerVisitProductInfos.
"""
type CustomerVisitProductInfoConnection {
  """A list of edges."""
  edges: [CustomerVisitProductInfoEdge!]!

  """A list of the nodes contained in CustomerVisitProductInfoEdge."""
  nodes: [CustomerVisitProductInfo!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one CustomerVisitProductInfo and a cursor during pagination.
"""
type CustomerVisitProductInfoEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of CustomerVisitProductInfoEdge."""
  node: CustomerVisitProductInfo!
}

"""The input fields for a custom shipping package used to pack shipment."""
input CustomShippingPackageInput {
  """Weight of the empty shipping package."""
  weight: WeightInput

  """Outside dimensions of the empty shipping package."""
  dimensions: ObjectDimensionsInput

  """
  The default package is the one used to calculate shipping costs on checkout.
  """
  default: Boolean = false

  """Descriptive name for the package."""
  name: String

  """Type of package."""
  type: ShippingPackageType
}

"""
Represents an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)-encoded date string.
For example, September 7, 2019 is represented as `"2019-07-16"`.
"""
scalar Date

"""
Represents an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)-encoded date and time string.
For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is
represented as `"2019-09-07T15:50:00Z`".
"""
scalar DateTime

"""Days of the week from Monday to Sunday."""
enum DayOfTheWeek {
  """Monday."""
  MONDAY

  """Tuesday."""
  TUESDAY

  """Wednesday."""
  WEDNESDAY

  """Thursday."""
  THURSDAY

  """Friday."""
  FRIDAY

  """Saturday."""
  SATURDAY

  """Sunday."""
  SUNDAY
}

"""
A signed decimal number, which supports arbitrary precision and is serialized as a string.

Example values: `"29.99"`, `"29.999"`.
"""
scalar Decimal

"""
A token that delegates a set of scopes from the original permission.

To learn more about creating delegate access tokens, refer to
[Delegate OAuth access tokens to subsystems]
(https://shopify.dev/apps/auth/oauth/delegate-access-tokens).
"""
type DelegateAccessToken {
  """The list of permissions associated with the token."""
  accessScopes: [String!]!

  """The issued delegate access token."""
  accessToken: String!

  """The date and time when the delegate access token was created."""
  createdAt: DateTime!
}

"""Return type for `delegateAccessTokenCreate` mutation."""
type DelegateAccessTokenCreatePayload {
  """The delegate access token."""
  delegateAccessToken: DelegateAccessToken

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DelegateAccessTokenCreateUserError!]!
}

"""
An error that occurs during the execution of `DelegateAccessTokenCreate`.
"""
type DelegateAccessTokenCreateUserError implements DisplayableError {
  """The error code."""
  code: DelegateAccessTokenCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `DelegateAccessTokenCreateUserError`.
"""
enum DelegateAccessTokenCreateUserErrorCode {
  """The access scope can't be empty."""
  EMPTY_ACCESS_SCOPE

  """The parent access token can't be a delegate token."""
  DELEGATE_ACCESS_TOKEN

  """The expires_in value must be greater than 0."""
  NEGATIVE_EXPIRES_IN

  """The delegate token can't expire after the parent token."""
  EXPIRES_AFTER_PARENT

  """The parent access token can't have a refresh token."""
  REFRESH_TOKEN

  """Persistence failed."""
  PERSISTENCE_FAILED

  """Unknown scopes."""
  UNKNOWN_SCOPES
}

"""The input fields for a delegate access token."""
input DelegateAccessTokenInput {
  """The list of scopes that will be delegated to the new access token."""
  delegateAccessScope: [String!]!

  """
  The amount of time, in seconds, after which the delegate access token is no longer valid.
  """
  expiresIn: Int
}

"""
Deletion events chronicle the destruction of resources (e.g. products and collections).
Once deleted, the deletion event is the only trace of the original's existence,
as the resource itself has been removed and can no longer be accessed.
"""
type DeletionEvent {
  """
  The date and time when the deletion event for the related resource was generated.
  """
  occurredAt: DateTime!

  """The ID of the resource that was deleted."""
  subjectId: ID!

  """The type of resource that was deleted."""
  subjectType: DeletionEventSubjectType!
}

"""An auto-generated type for paginating through multiple DeletionEvents."""
type DeletionEventConnection {
  """A list of edges."""
  edges: [DeletionEventEdge!]!

  """A list of the nodes contained in DeletionEventEdge."""
  nodes: [DeletionEvent!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DeletionEvent and a cursor during pagination.
"""
type DeletionEventEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DeletionEventEdge."""
  node: DeletionEvent!
}

"""The set of valid sort keys for the DeletionEvent query."""
enum DeletionEventSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The supported subject types of deletion events."""
enum DeletionEventSubjectType {
  COLLECTION
  PRODUCT
}

"""
A shipping service and a list of countries that the service is available for.
"""
type DeliveryAvailableService {
  """The countries the service provider ships to."""
  countries: DeliveryCountryCodesOrRestOfWorld!

  """The name of the service."""
  name: String!
}

"""A shipping service provider or a carrier account."""
type DeliveryCarrierService implements Node {
  """The list of services offered for given destinations."""
  availableServicesForCountries(
    """The locations of the possible origins."""
    origins: [ID!]

    """The country codes of the destinations."""
    countryCodes: [CountryCode!]

    """Whether to use 'Rest of World' as the destination."""
    restOfWorld: Boolean!
  ): [DeliveryAvailableService!]!

  """
  The properly formatted name of the shipping service provider, ready to display.
  """
  formattedName: String

  """The logo of the service provider."""
  icon: Image!

  """A globally-unique ID."""
  id: ID!

  """The name of the shipping service provider."""
  name: String
}

"""A carrier service and the associated list of shop locations."""
type DeliveryCarrierServiceAndLocations {
  """The carrier service."""
  carrierService: DeliveryCarrierService!

  """The list of locations that support this carrier service."""
  locations: [Location!]!
}

"""
A condition that must pass for a delivery method definition to be applied to an order.
"""
type DeliveryCondition implements Node {
  """The value (weight or price) that the condition field is compared to."""
  conditionCriteria: DeliveryConditionCriteria!

  """The field to compare the criterion value against, using the operator."""
  field: DeliveryConditionField!

  """A globally-unique ID."""
  id: ID!

  """The operator to compare the field and criterion value."""
  operator: DeliveryConditionOperator!
}

"""The value (weight or price) that the condition field is compared to."""
union DeliveryConditionCriteria = MoneyV2 | Weight

"""The field type that the condition will be applied to."""
enum DeliveryConditionField {
  """The condition will check against the total weight of the order."""
  TOTAL_WEIGHT

  """The condition will check against the total price of the order."""
  TOTAL_PRICE
}

"""The operator to use to determine if the condition passes."""
enum DeliveryConditionOperator {
  """
  The condition will check whether the field is greater than or equal to the criterion.
  """
  GREATER_THAN_OR_EQUAL_TO

  """
  The condition will check if the field is less than or equal to the criterion.
  """
  LESS_THAN_OR_EQUAL_TO
}

"""A country that is used to define a shipping zone."""
type DeliveryCountry implements Node {
  """
  A two-letter country code in ISO 3166-1 alpha-2 standard.
  It also includes a flag indicating whether the country should be
  a part of the 'Rest Of World' shipping zone.
  """
  code: DeliveryCountryCodeOrRestOfWorld!

  """A globally-unique ID."""
  id: ID!

  """The full name of the country."""
  name: String!

  """The list of regions associated with this country."""
  provinces: [DeliveryProvince!]!

  """
  The translated name of the country. The translation returned is based on the system's locale.
  """
  translatedName: String!
}

"""The country details and the associated shipping zone."""
type DeliveryCountryAndZone {
  """The country details."""
  country: DeliveryCountry!

  """The name of the shipping zone."""
  zone: String!
}

"""
The country code and whether the country is a part of the 'Rest Of World' shipping zone.
"""
type DeliveryCountryCodeOrRestOfWorld {
  """The country code in the ISO 3166-1 alpha-2 format."""
  countryCode: CountryCode

  """Whether the country is a part of the 'Rest of World' shipping zone."""
  restOfWorld: Boolean!
}

"""
The list of country codes and information whether the countries
are a part of the 'Rest Of World' shipping zone.
"""
type DeliveryCountryCodesOrRestOfWorld {
  """List of applicable country codes in the ISO 3166-1 alpha-2 format."""
  countryCodes: [CountryCode!]!

  """Whether the countries are a part of the 'Rest of World' shipping zone."""
  restOfWorld: Boolean!
}

"""The input fields to specify a country."""
input DeliveryCountryInput {
  """The country code of the country in the ISO 3166-1 alpha-2 format."""
  code: CountryCode

  """Whether the country is a part of the 'Rest of World' shipping zone."""
  restOfWorld: Boolean

  """The regions associated with this country."""
  provinces: [DeliveryProvinceInput!]

  """Associate all available provinces with this country."""
  includeAllProvinces: Boolean
}

"""
Whether the shop is blocked from converting to full multi-location delivery
profiles mode. If the shop is blocked, then the blocking reasons are also returned.
"""
type DeliveryLegacyModeBlocked {
  """
  Whether the shop can convert to full multi-location delivery profiles mode.
  """
  blocked: Boolean!

  """
  The reasons why the shop is blocked from converting to full multi-location delivery profiles mode.
  """
  reasons: [DeliveryLegacyModeBlockedReason!]
}

"""
Reasons the shop is blocked from converting to full multi-location delivery profiles mode.
"""
enum DeliveryLegacyModeBlockedReason {
  """
  Multi-Location mode is disabled. The shop can't convert to full multi-location delivery profiles mode.
  """
  MULTI_LOCATION_DISABLED @deprecated(reason: "All shops are now using multi-location mode.")

  """There are no locations for this store that can fulfill online orders."""
  NO_LOCATIONS_FULFILLING_ONLINE_ORDERS
}

"""Local pickup settings associated with a location."""
type DeliveryLocalPickupSettings {
  """Additional instructions or information related to the local pickup."""
  instructions: String!

  """The estimated pickup time to show customers at checkout."""
  pickupTime: DeliveryLocalPickupTime!
}

"""
Possible pickup time values that a location enabled for local pickup can have.
"""
enum DeliveryLocalPickupTime {
  """Usually ready in 1 hour."""
  ONE_HOUR

  """Usually ready in 2 hours."""
  TWO_HOURS

  """Usually ready in 4 hours."""
  FOUR_HOURS

  """Usually ready in 24 hours."""
  TWENTY_FOUR_HOURS

  """Usually ready in 2-4 days."""
  TWO_TO_FOUR_DAYS

  """Usually ready in 5+ days."""
  FIVE_OR_MORE_DAYS
}

"""
A location group is a collection of locations. They share zones and delivery methods across delivery
profiles.
"""
type DeliveryLocationGroup implements Node {
  """A globally-unique ID."""
  id: ID!

  """A list of all locations that are part of this location group."""
  locations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: LocationSortKeys = NAME

    """
    Supported filter parameters:
     - `active`
     - `address1`
     - `address2`
     - `city`
     - `country`
     - `legacy`
     - `name`
     - `province`
     - `zip`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """If true, also include the legacy locations of fulfillment services."""
    includeLegacy: Boolean = false

    """If true, also include the locations that are deactivated."""
    includeInactive: Boolean = false
  ): LocationConnection!

  """A count of all locations that are part of this location group."""
  locationsCount: Int!
}

"""
Links a location group with a zone and the associated method definitions.
"""
type DeliveryLocationGroupZone {
  """The number of method definitions for the zone."""
  methodDefinitionCounts: DeliveryMethodDefinitionCounts!

  """The method definitions associated to a zone and location group."""
  methodDefinitions(
    """Return only eligible or ineligible method definitions."""
    eligible: Boolean

    """Return only merchant or participant method definitions."""
    type: DeliveryMethodDefinitionType

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MethodDefinitionSortKeys = ID
  ): DeliveryMethodDefinitionConnection!

  """The zone associated to a location group."""
  zone: DeliveryZone!
}

"""
An auto-generated type for paginating through multiple DeliveryLocationGroupZones.
"""
type DeliveryLocationGroupZoneConnection {
  """A list of edges."""
  edges: [DeliveryLocationGroupZoneEdge!]!

  """A list of the nodes contained in DeliveryLocationGroupZoneEdge."""
  nodes: [DeliveryLocationGroupZone!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DeliveryLocationGroupZone and a cursor during pagination.
"""
type DeliveryLocationGroupZoneEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DeliveryLocationGroupZoneEdge."""
  node: DeliveryLocationGroupZone!
}

"""
The input fields for a delivery zone associated to a location group and profile.
"""
input DeliveryLocationGroupZoneInput {
  """A globally-unique ID of the zone."""
  id: ID

  """The name of the zone."""
  name: String

  """A list of countries to associate with the zone."""
  countries: [DeliveryCountryInput!]

  """A list of method definitions to create."""
  methodDefinitionsToCreate: [DeliveryMethodDefinitionInput!]

  """A list of method definitions to update."""
  methodDefinitionsToUpdate: [DeliveryMethodDefinitionInput!]
}

"""
The input fields for a local pickup setting associated with a location.
"""
input DeliveryLocationLocalPickupEnableInput {
  """The ID of the location associated with the location setting."""
  locationId: ID!

  """The time of the local pickup."""
  pickupTime: DeliveryLocalPickupTime!

  """The instructions for the local pickup."""
  instructions: String
}

"""
Represents an error that happened when changing local pickup settings for a location.
"""
type DeliveryLocationLocalPickupSettingsError implements DisplayableError {
  """The error code."""
  code: DeliveryLocationLocalPickupSettingsErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `DeliveryLocationLocalPickupSettingsError`.
"""
enum DeliveryLocationLocalPickupSettingsErrorCode {
  """
  Provided locationId is not for an active location belonging to this store.
  """
  ACTIVE_LOCATION_NOT_FOUND

  """An error occurred while changing the local pickup settings."""
  GENERIC_ERROR
}

"""The delivery method used by a fulfillment order."""
type DeliveryMethod implements Node {
  """A globally-unique ID."""
  id: ID!

  """
  The latest delivery date and time when the fulfillment is expected to arrive at the buyer's location.
  """
  maxDeliveryDateTime: DateTime

  """The type of the delivery method."""
  methodType: DeliveryMethodType!

  """
  The earliest delivery date and time when the fulfillment is expected to arrive at the buyer's location.
  """
  minDeliveryDateTime: DateTime
}

"""
A method definition contains the delivery rate and the conditions that must be met for the method to be
applied.
"""
type DeliveryMethodDefinition implements Node {
  """Whether this method definition is active."""
  active: Boolean!

  """The description of the method definition."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """
  The method conditions that must pass for this method definition to be applied to an order.
  """
  methodConditions: [DeliveryCondition!]!

  """The name of the method definition."""
  name: String!

  """
  The provided rate for this method definition, from a rate definition or participant.
  """
  rateProvider: DeliveryRateProvider!
}

"""
An auto-generated type for paginating through multiple DeliveryMethodDefinitions.
"""
type DeliveryMethodDefinitionConnection {
  """A list of edges."""
  edges: [DeliveryMethodDefinitionEdge!]!

  """A list of the nodes contained in DeliveryMethodDefinitionEdge."""
  nodes: [DeliveryMethodDefinition!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The number of method definitions for a zone, separated into merchant-owned and participant definitions.
"""
type DeliveryMethodDefinitionCounts {
  """The number of participant method definitions for the specified zone."""
  participantDefinitionsCount: Int!

  """
  The number of merchant-defined method definitions for the specified zone.
  """
  rateDefinitionsCount: Int!
}

"""
An auto-generated type which holds one DeliveryMethodDefinition and a cursor during pagination.
"""
type DeliveryMethodDefinitionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DeliveryMethodDefinitionEdge."""
  node: DeliveryMethodDefinition!
}

"""The input fields for a method definition."""
input DeliveryMethodDefinitionInput {
  """
  A globally-unique ID of the method definition. Use only when updating a method definiton.
  """
  id: ID

  """The name of the method definition."""
  name: String

  """The description of the method definition."""
  description: String

  """Whether to use this method definition during rate calculation."""
  active: Boolean

  """A rate definition to apply to the method definition."""
  rateDefinition: DeliveryRateDefinitionInput

  """A participant to apply to the method definition."""
  participant: DeliveryParticipantInput

  """A list of weight conditions on the method definition."""
  weightConditionsToCreate: [DeliveryWeightConditionInput!]

  """A list of price conditions on the method definition."""
  priceConditionsToCreate: [DeliveryPriceConditionInput!]

  """A list of conditions to update on the method definition."""
  conditionsToUpdate: [DeliveryUpdateConditionInput!]
}

"""The different types of method definitions to filter by."""
enum DeliveryMethodDefinitionType {
  """A static merchant-defined rate."""
  MERCHANT

  """A dynamic participant rate."""
  PARTICIPANT
}

"""Possible method types that a delivery method can have."""
enum DeliveryMethodType {
  """The order is shipped."""
  SHIPPING

  """The order is picked up by the customer."""
  PICK_UP

  """No delivery is needed."""
  NONE

  """The order is delivered to a retail store."""
  RETAIL

  """The order is delivered using a local delivery service."""
  LOCAL
}

"""
A participant defines carrier-calculated rates for shipping services
with a possible merchant-defined fixed fee or a percentage-of-rate fee.
"""
type DeliveryParticipant implements Node {
  """
  Whether to display new shipping services automatically to the customer when the service becomes available.
  """
  adaptToNewServicesFlag: Boolean!

  """The carrier used for this participant."""
  carrierService: DeliveryCarrierService!

  """The merchant-defined fixed fee for this participant."""
  fixedFee: MoneyV2

  """A globally-unique ID."""
  id: ID!

  """
  The carrier-specific services offered by the participant, and whether each service is active.
  """
  participantServices: [DeliveryParticipantService!]!

  """The merchant-defined percentage-of-rate fee for this participant."""
  percentageOfRateFee: Float!
}

"""The input fields for a participant."""
input DeliveryParticipantInput {
  """The ID of the participant."""
  id: ID

  """The ID of the carrier service for this participant."""
  carrierServiceId: ID

  """The fixed feed that's defined by the merchant for this participant."""
  fixedFee: MoneyInput

  """The merchant-defined percentage-of-rate fee for this participant."""
  percentageOfRateFee: Float

  """The list of shipping services offered by the participant."""
  participantServices: [DeliveryParticipantServiceInput!]

  """
  Whether to automatically display new shipping services to the customer when a service becomes available.
  """
  adaptToNewServices: Boolean
}

"""A mail service provided by the participant."""
type DeliveryParticipantService {
  """Whether the service is active."""
  active: Boolean!

  """The name of the service."""
  name: String!
}

"""The input fields for a shipping service provided by a participant."""
input DeliveryParticipantServiceInput {
  """The name of the service."""
  name: String!

  """Whether the service is active."""
  active: Boolean!
}

"""
The input fields for a price-based condition of a delivery method definition.
"""
input DeliveryPriceConditionInput {
  """The monetary value to compare the price of an order to."""
  criteria: MoneyInput

  """The operator to use for comparison."""
  operator: DeliveryConditionOperator
}

"""
How many product variants are in a profile. This count is capped at 500.
"""
type DeliveryProductVariantsCount {
  """Whether the count has reached the cap of 500."""
  capped: Boolean!

  """The product variant count."""
  count: Int!
}

"""
A shipping profile. In Shopify, a shipping profile is a set of shipping rates
scoped to a set of products or variants that can be shipped from selected
locations to zones.
"""
type DeliveryProfile implements Node {
  """The number of active shipping rates for the profile."""
  activeMethodDefinitionsCount: Int!

  """Whether this is the default profile."""
  default: Boolean!

  """A globally-unique ID."""
  id: ID!

  """
  Whether this shop has enabled legacy compatibility mode for delivery profiles.
  """
  legacyMode: Boolean!

  """The number of locations without rates defined."""
  locationsWithoutRatesCount: Int!

  """The name of the delivery profile."""
  name: String!

  """The number of active origin locations for the profile."""
  originLocationCount: Int!

  """
  The number of product variants for this profile. The count for the default profile isn't supported and will return -1.
  """
  productVariantsCount: Int! @deprecated(reason: "Use `productVariantsCountV2` instead.")

  """How many product variants are in this profile."""
  productVariantsCountV2: DeliveryProductVariantsCount!

  """The products and variants associated with this profile."""
  profileItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DeliveryProfileItemConnection!

  """The location groups and associated zones using this profile."""
  profileLocationGroups(
    """Filter the location groups of the profile by location group ID."""
    locationGroupId: ID
  ): [DeliveryProfileLocationGroup!]!

  """Selling plan groups associated with the specified delivery profile."""
  sellingPlanGroups(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SellingPlanGroupConnection!

  """
  List of locations that haven't been assigned to a location group for this profile.
  """
  unassignedLocations: [Location!]!

  """
  List of locations that have not been assigned to a location group for this profile.
  """
  unassignedLocationsPaginated(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LocationConnection!

  """The number of countries with active rates to deliver to."""
  zoneCountryCount: Int!
}

"""
An auto-generated type for paginating through multiple DeliveryProfiles.
"""
type DeliveryProfileConnection {
  """A list of edges."""
  edges: [DeliveryProfileEdge!]!

  """A list of the nodes contained in DeliveryProfileEdge."""
  nodes: [DeliveryProfile!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `deliveryProfileCreate` mutation."""
type deliveryProfileCreatePayload {
  """The delivery profile that was created."""
  profile: DeliveryProfile

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one DeliveryProfile and a cursor during pagination.
"""
type DeliveryProfileEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DeliveryProfileEdge."""
  node: DeliveryProfile!
}

"""The input fields for a delivery profile."""
input DeliveryProfileInput {
  """The name of the delivery profile."""
  name: String

  """The list of location groups associated with the delivery profile."""
  profileLocationGroups: [DeliveryProfileLocationGroupInput!]

  """
  The list of location groups to be created in the delivery profile.
  
  **Note:** due to the potential complexity of the nested data, it is
  recommended to send no more than 5 location groups per each request.
  """
  locationGroupsToCreate: [DeliveryProfileLocationGroupInput!]

  """
  The list of location groups to be updated in the delivery profile.
  
  **Note:** due to the potential complexity of the nested data, it is
  recommended to send no more than 5 location groups per each request.
  """
  locationGroupsToUpdate: [DeliveryProfileLocationGroupInput!]

  """The list of location groups to be deleted from the delivery profile."""
  locationGroupsToDelete: [ID!]

  """
  The list of product variant IDs to be associated with the delivery profile.
  """
  variantsToAssociate: [ID!]

  """
  The list of product variant IDs to be dissociated from the delivery profile.
  The dissociated product variants are moved back to the default delivery profile.
  """
  variantsToDissociate: [ID!]

  """The list of zone IDs to delete."""
  zonesToDelete: [ID!]

  """The list of method definition IDs to delete."""
  methodDefinitionsToDelete: [ID!]

  """The list of condition IDs to delete."""
  conditionsToDelete: [ID!]

  """
  The list of selling plan groups to be associated with the delivery profile.
  """
  sellingPlanGroupsToAssociate: [ID!]

  """
  The list of selling plan groups to be dissociated with the delivery profile.
  """
  sellingPlanGroupsToDissociate: [ID!]
}

"""
A product and the subset of associated variants that are part of this delivery profile.
"""
type DeliveryProfileItem implements Node {
  """A globally-unique ID."""
  id: ID!

  """A product associated with this profile."""
  product: Product!

  """The product variants associated with this delivery profile."""
  variants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantConnection!
}

"""
An auto-generated type for paginating through multiple DeliveryProfileItems.
"""
type DeliveryProfileItemConnection {
  """A list of edges."""
  edges: [DeliveryProfileItemEdge!]!

  """A list of the nodes contained in DeliveryProfileItemEdge."""
  nodes: [DeliveryProfileItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DeliveryProfileItem and a cursor during pagination.
"""
type DeliveryProfileItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DeliveryProfileItemEdge."""
  node: DeliveryProfileItem!
}

"""
Links a location group with zones. Both are associated to a delivery profile.
"""
type DeliveryProfileLocationGroup {
  """
  The countries already selected in any zone for the specified location group.
  """
  countriesInAnyZone: [DeliveryCountryAndZone!]!

  """The collection of locations that make up the specified location group."""
  locationGroup: DeliveryLocationGroup!

  """The applicable zones associated to the specified location group."""
  locationGroupZones(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DeliveryLocationGroupZoneConnection!
}

"""
The input fields for a location group associated to a delivery profile.
"""
input DeliveryProfileLocationGroupInput {
  """The globally-unique ID of the delivery profile location group."""
  id: ID

  """The list of location IDs to be moved to this location group."""
  locations: [ID!]

  """
  The list of location IDs to be added to this location group.
  
  **Note:** due to API input array limits, a maximum of 250 items can be sent per each request.
  """
  locationsToAdd: [ID!]

  """
  The list of location IDs to be removed from this location group.
  
  **Note:** due to API input array limits, a maximum of 250 items can be sent per each request.
  """
  locationsToRemove: [ID!]

  """
  The list of location group zones to create.
  
  **Note:** due to the potential complexity of the nested data, it is
  recommended to send no more than 5 zones per each request.
  """
  zonesToCreate: [DeliveryLocationGroupZoneInput!]

  """
  The list of location group zones to update.
  
  **Note:** due to the potential complexity of the nested data, it is
  recommended to send no more than 5 zones per each request.
  """
  zonesToUpdate: [DeliveryLocationGroupZoneInput!]
}

"""Return type for `deliveryProfileRemove` mutation."""
type deliveryProfileRemovePayload {
  """The delivery profile deletion job triggered by the mutation."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `deliveryProfileUpdate` mutation."""
type deliveryProfileUpdatePayload {
  """The delivery profile that was updated."""
  profile: DeliveryProfile

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""A region that is used to define a shipping zone."""
type DeliveryProvince implements Node {
  """The code of the region."""
  code: String!

  """A globally-unique ID."""
  id: ID!

  """The full name of the region."""
  name: String!

  """
  The translated name of the region. The translation returned is based on the system's locale.
  """
  translatedName: String!
}

"""The input fields to specify a region."""
input DeliveryProvinceInput {
  """The code of the region."""
  code: String!
}

"""
The merchant-defined rate of the [DeliveryMethodDefinition](https://shopify.dev/api/admin-graphql/latest/objects/DeliveryMethodDefinition).
"""
type DeliveryRateDefinition implements Node {
  """A globally-unique ID."""
  id: ID!

  """The price of this rate."""
  price: MoneyV2!
}

"""The input fields for a rate definition."""
input DeliveryRateDefinitionInput {
  """A globally-unique ID of the rate definition."""
  id: ID

  """The price of the rate definition."""
  price: MoneyInput!
}

"""A rate provided by a merchant-defined rate or a participant."""
union DeliveryRateProvider = DeliveryParticipant | DeliveryRateDefinition

"""
The `DeliverySetting` object enables you to manage shop-wide shipping settings.
You can enable legacy compatibility mode for the multi-location delivery profiles feature
if the legacy mode isn't blocked.
"""
type DeliverySetting {
  """
  Whether the shop is blocked from converting to full multi-location delivery
  profiles mode. If the shop is blocked, then the blocking reasons are also returned.
  """
  legacyModeBlocked: DeliveryLegacyModeBlocked!

  """
  Enables legacy compatability mode for the multi-location delivery profiles feature.
  """
  legacyModeProfiles: Boolean!
}

"""The input fields for shop-level delivery settings."""
input DeliverySettingInput {
  """
  Whether legacy compatability mode is enabled for the multi-location delivery profiles feature.
  """
  legacyModeProfiles: Boolean
}

"""Return type for `deliverySettingUpdate` mutation."""
type DeliverySettingUpdatePayload {
  """The updated delivery shop level settings."""
  setting: DeliverySetting

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `deliveryShippingOriginAssign` mutation."""
type DeliveryShippingOriginAssignPayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields for updating the condition of a delivery method definition.
"""
input DeliveryUpdateConditionInput {
  """A globally-unique ID of the condition."""
  id: ID!

  """The value that will be used in comparison."""
  criteria: Float

  """The unit associated with the value that will be used in comparison."""
  criteriaUnit: String

  """The property of an order that will be used in comparison."""
  field: DeliveryConditionField

  """The operator to use for comparison."""
  operator: DeliveryConditionOperator
}

"""
The input fields for a weight-based condition of a delivery method definition.
"""
input DeliveryWeightConditionInput {
  """The weight value to compare the weight of an order to."""
  criteria: WeightInput

  """The operator to use for comparison."""
  operator: DeliveryConditionOperator
}

"""
A zone is a group of countries that have the same shipping rates. Customers can
order products from a store only if they choose a shipping destination that's
included in one of the store's zones.
"""
type DeliveryZone implements Node {
  """The list of countries within the zone."""
  countries: [DeliveryCountry!]!

  """A globally-unique ID."""
  id: ID!

  """The name of the zone."""
  name: String!
}

"""
Digital wallet, such as Apple Pay, which can be used for accelerated checkouts.
"""
enum DigitalWallet {
  """Apple Pay."""
  APPLE_PAY

  """Android Pay."""
  ANDROID_PAY

  """Google Pay."""
  GOOGLE_PAY

  """Shopify Pay."""
  SHOPIFY_PAY
}

"""A discount."""
union Discount = DiscountAutomaticApp | DiscountAutomaticBasic | DiscountAutomaticBxgy | DiscountCodeApp | DiscountCodeBasic | DiscountCodeBxgy | DiscountCodeFreeShipping

"""
An amount that's allocated to a line based on an associated discount application.
"""
type DiscountAllocation {
  """
  The money amount that's allocated to a line based on the associated discount application.
  """
  allocatedAmount: MoneyV2! @deprecated(reason: "Use `allocatedAmountSet` instead.")

  """
  The money amount that's allocated to a line based on the associated discount
  application in shop and presentment currencies.
  """
  allocatedAmountSet: MoneyBag!

  """The discount application that the allocated amount originated from."""
  discountApplication: DiscountApplication!
}

"""
The fixed amount value of a discount, and whether the amount is applied to each
entitled item or spread evenly across the entitled items.
"""
type DiscountAmount {
  """The value of the discount."""
  amount: MoneyV2!

  """
  If true, then the discount is applied to each of the entitled items. If false,
  then the amount is split across all of the entitled items.
  """
  appliesOnEachItem: Boolean!
}

"""The input fields for the value of the discount and how it is applied."""
input DiscountAmountInput {
  """The value of the discount."""
  amount: Decimal

  """
  If true, then the discount is applied to each of the entitled items. If false,
  then the amount is split across all of the entitled items.
  """
  appliesOnEachItem: Boolean
}

"""
Discount applications capture the intentions of a discount source at
the time of application on an order's line items or shipping lines.

Discount applications don't represent the actual final amount discounted on a
line (line item or shipping line). The actual amount discounted on a line is
represented by the [DiscountAllocation](https://shopify.dev/api/admin-graphql/latest/objects/discountallocation) object.
"""
interface DiscountApplication {
  """
  The method by which the discount's value is applied to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """
  An ordered index that can be used to identify the discount application and indicate the precedence
  of the discount application for calculations.
  """
  index: Int!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""
The method by which the discount's value is allocated onto its entitled lines.
"""
enum DiscountApplicationAllocationMethod {
  """The value is spread across all entitled lines."""
  ACROSS

  """The value is applied onto every entitled line."""
  EACH

  """The value is specifically applied onto a particular line."""
  ONE @deprecated(reason: "Use ACROSS instead.")
}

"""
An auto-generated type for paginating through multiple DiscountApplications.
"""
type DiscountApplicationConnection {
  """A list of edges."""
  edges: [DiscountApplicationEdge!]!

  """A list of the nodes contained in DiscountApplicationEdge."""
  nodes: [DiscountApplication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountApplication and a cursor during pagination.
"""
type DiscountApplicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountApplicationEdge."""
  node: DiscountApplication!
}

"""The level at which the discount's value is applied."""
enum DiscountApplicationLevel {
  """
  The discount is applied at the order level.
  Order level discounts are not factored into the discountedUnitPriceSet on line items.
  """
  ORDER

  """
  The discount is applied at the line level.
  Line level discounts are factored into the discountedUnitPriceSet on line items.
  """
  LINE
}

"""
The lines on the order to which the discount is applied, of the type defined by
the discount application's `targetType`. For example, the value `ENTITLED`, combined with a `targetType` of
`LINE_ITEM`, applies the discount on all line items that are entitled to the discount.
The value `ALL`, combined with a `targetType` of `SHIPPING_LINE`, applies the discount on all shipping lines.
"""
enum DiscountApplicationTargetSelection {
  """The discount is allocated onto all the lines."""
  ALL

  """The discount is allocated onto only the lines that it's entitled for."""
  ENTITLED

  """The discount is allocated onto explicitly chosen lines."""
  EXPLICIT
}

"""
The type of line (i.e. line item or shipping line) on an order that the discount is applicable towards.
"""
enum DiscountApplicationTargetType {
  """The discount applies onto line items."""
  LINE_ITEM

  """The discount applies onto shipping lines."""
  SHIPPING_LINE
}

"""
The type of discount associated to the automatic discount. For example, the
automatic discount might offer a basic discount using a fixed percentage, or a
fixed amount, on specific products from the order. The automatic discount may
also be a BXGY discount, which offers customer discounts on select products if
they add a specific product to their order.
"""
union DiscountAutomatic = DiscountAutomaticApp | DiscountAutomaticBasic | DiscountAutomaticBxgy

"""Return type for `discountAutomaticActivate` mutation."""
type DiscountAutomaticActivatePayload {
  """The activated automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""An automatic app discount."""
type DiscountAutomaticApp {
  """The app discount type providing the discount type."""
  appDiscountType: AppDiscountType!

  """
  The number of times the discount has been used. This value is updated
  asynchronously and can be different than the actual usage count.
  """
  asyncUsageCount: Int!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """The class of the discount for combining purposes."""
  discountClass: DiscountClass!

  """The ID for the discount."""
  discountId: ID!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """The error history on the most recent version of the app discount."""
  errorHistory: FunctionsErrorHistory

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """The title of the discount."""
  title: String!

  """The date and time when the discount was updated."""
  updatedAt: DateTime!
}

"""Return type for `discountAutomaticAppCreate` mutation."""
type DiscountAutomaticAppCreatePayload {
  """The created app discount."""
  automaticAppDiscount: DiscountAutomaticApp

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create an app discount."""
input DiscountAutomaticAppInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The ID of the function providing the app discount type."""
  functionId: String

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """Additional metafields to associate to the discount."""
  metafields: [MetafieldInput!] = []
}

"""Return type for `discountAutomaticAppUpdate` mutation."""
type DiscountAutomaticAppUpdatePayload {
  """The updated automatic app discount."""
  automaticAppDiscount: DiscountAutomaticApp

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
An automatic discount that offers customers a percentage discount, or fixed
amount discount, on specific products, collections, or the entire order.
"""
type DiscountAutomaticBasic {
  """
  The number of times the discount has been used. This value is updated
  asynchronously and can be different than the actual usage count.
  """
  asyncUsageCount: Int!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGets!

  """The class of the discount for combining purposes."""
  discountClass: MerchandiseDiscountClass!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirement!

  """A short summary of the discount."""
  shortSummary: String!

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """A detailed summary of the discount."""
  summary: String!

  """The title of the discount."""
  title: String!

  """The number of times that the discount has been used."""
  usageCount: Int! @deprecated(reason: "Use `asyncUsageCount` instead.")
}

"""Return type for `discountAutomaticBasicCreate` mutation."""
type DiscountAutomaticBasicCreatePayload {
  """The created automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create or update an automatic basic discount."""
input DiscountAutomaticBasicInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirementInput

  """Information about the qualifying items and their discount."""
  customerGets: DiscountCustomerGetsInput
}

"""Return type for `discountAutomaticBasicUpdate` mutation."""
type DiscountAutomaticBasicUpdatePayload {
  """The updated automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountAutomaticBulkDelete` mutation."""
type DiscountAutomaticBulkDeletePayload {
  """The asynchronous job removing the automatic discounts."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
An automatic discount that offers customers a Buy X, Get Y (BXGY) discount.
"""
type DiscountAutomaticBxgy implements HasEvents & Node {
  """
  The number of times the discount has been used. This value is updated
  asynchronously and can be different than the actual usage count.
  """
  asyncUsageCount: Int!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """
  The qualifying items and the quantity of each one that the customer has to buy to be eligible for the discount.
  """
  customerBuys: DiscountCustomerBuys!

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGets!

  """The class of the discount for combining purposes."""
  discountClass: MerchandiseDiscountClass!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A legacy unique ID for the discount."""
  id: ID! @deprecated(reason: "Use DiscountAutomaticNode.id instead.")

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """A detailed summary of the discount."""
  summary: String!

  """The title of the discount."""
  title: String!

  """The number of times that the discount has been used."""
  usageCount: Int! @deprecated(reason: "Use `asyncUsageCount` instead.")

  """
  The maximum number of times that the discount can be applied to an order.
  """
  usesPerOrderLimit: Int
}

"""Return type for `discountAutomaticBxgyCreate` mutation."""
type DiscountAutomaticBxgyCreatePayload {
  """The created automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
The input fields to create or update an automatic Buy X, Get Y (BXGY) discount.
"""
input DiscountAutomaticBxgyInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """The title of the discount."""
  title: String

  """
  The maximum number of times that the discount can be applied to an order.
  """
  usesPerOrderLimit: UnsignedInt64

  """
  The qualifying items and the quantity of each one that the customer has to buy to be eligible for the discount.
  """
  customerBuys: DiscountCustomerBuysInput

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGetsInput
}

"""Return type for `discountAutomaticBxgyUpdate` mutation."""
type DiscountAutomaticBxgyUpdatePayload {
  """The updated automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
An auto-generated type for paginating through multiple DiscountAutomatics.
"""
type DiscountAutomaticConnection {
  """A list of edges."""
  edges: [DiscountAutomaticEdge!]!

  """A list of the nodes contained in DiscountAutomaticEdge."""
  nodes: [DiscountAutomatic!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `discountAutomaticDeactivate` mutation."""
type DiscountAutomaticDeactivatePayload {
  """The deactivated automatic discount."""
  automaticDiscountNode: DiscountAutomaticNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountAutomaticDelete` mutation."""
type DiscountAutomaticDeletePayload {
  """The deleted automatic discount ID."""
  deletedAutomaticDiscountId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
An auto-generated type which holds one DiscountAutomatic and a cursor during pagination.
"""
type DiscountAutomaticEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountAutomaticEdge."""
  node: DiscountAutomatic!
}

"""A node containing an automatic discount and its related events."""
type DiscountAutomaticNode implements HasEvents & HasMetafieldDefinitions & HasMetafields & Node {
  """The automatic discount object."""
  automaticDiscount: DiscountAutomatic!

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A globally-unique ID."""
  id: ID!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")
}

"""
An auto-generated type for paginating through multiple DiscountAutomaticNodes.
"""
type DiscountAutomaticNodeConnection {
  """A list of edges."""
  edges: [DiscountAutomaticNodeEdge!]!

  """A list of the nodes contained in DiscountAutomaticNodeEdge."""
  nodes: [DiscountAutomaticNode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountAutomaticNode and a cursor during pagination.
"""
type DiscountAutomaticNodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountAutomaticNodeEdge."""
  node: DiscountAutomaticNode!
}

"""The class of the discount for combining purposes."""
enum DiscountClass {
  """Combined as a product discount."""
  PRODUCT

  """Combined as an order discount."""
  ORDER

  """Combined as a shipping discount."""
  SHIPPING
}

"""
The type of discount associated with the discount code. For example, the
discount code might offer a basic discount of a fixed percentage, or a fixed
amount, on specific products or the order. Alternatively, the discount might
offer the customer free shipping on their order. A third option is a Buy X, Get
Y (BXGY) discount, which offers a customer discounts on select products if they
add a specific product to their order.
"""
union DiscountCode = DiscountCodeApp | DiscountCodeBasic | DiscountCodeBxgy | DiscountCodeFreeShipping

"""Return type for `discountCodeActivate` mutation."""
type DiscountCodeActivatePayload {
  """The activated code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""A code app discount."""
type DiscountCodeApp {
  """The app discount type providing the discount type."""
  appDiscountType: AppDiscountType!

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean!

  """The number of times that the discount has been used."""
  asyncUsageCount: Int!

  """The number of redeem codes for the discount."""
  codeCount: Int!

  """A list of redeem codes for the discount."""
  codes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountRedeemCodeConnection!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelection!

  """The class of the discount for combining purposes."""
  discountClass: DiscountClass!

  """The ID for the discount."""
  discountId: ID!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """The error history on the most recent version of the discount."""
  errorHistory: FunctionsErrorHistory

  """Indicates whether there are any timeline comments on the discount."""
  hasTimelineComment: Boolean!

  """
  The number of times a discount applies on recurring purchases (subscriptions).
  """
  recurringCycleLimit: Int

  """URLs that can be used to share the discount."""
  shareableUrls: [DiscountShareableUrl!]!

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """The title of the discount."""
  title: String!

  """The total sales from orders where the discount was used."""
  totalSales: MoneyV2

  """The maximum number of times that the discount can be used."""
  usageLimit: Int
}

"""Return type for `discountCodeAppCreate` mutation."""
type DiscountCodeAppCreatePayload {
  """The created code app discount."""
  codeAppDiscount: DiscountCodeApp

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create a code app discount."""
input DiscountCodeAppInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The ID of the function providing the app discount type."""
  functionId: String

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """
  The maximum number of times that the discount can be used. For open-ended discounts, use `null`.
  """
  usageLimit: Int

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelectionInput

  """The code to use the discount."""
  code: String

  """Additional metafields to associate to the discount."""
  metafields: [MetafieldInput!] = []
}

"""
Discount code applications capture the intentions of a discount code at
the time that it is applied onto an order.

Discount applications don't represent the actual final amount discounted on a
line (line item or shipping line). The actual amount discounted on a line is
represented by the [DiscountAllocation](https://shopify.dev/api/admin-graphql/latest/objects/discountallocation) object.
"""
type DiscountCodeApplication implements DiscountApplication {
  """
  The method by which the discount's value is applied to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """
  The string identifying the discount code that was used at the time of application.
  """
  code: String!

  """
  An ordered index that can be used to identify the discount application and indicate the precedence
  of the discount application for calculations.
  """
  index: Int!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The value of the discount application."""
  value: PricingValue!
}

"""Return type for `discountCodeAppUpdate` mutation."""
type DiscountCodeAppUpdatePayload {
  """The updated code app discount."""
  codeAppDiscount: DiscountCodeApp

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
A code discount that offers customers a percentage or fixed amount discount on
specific products, collections, or the entire order.
"""
type DiscountCodeBasic {
  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean!

  """The number of times that the discount has been used."""
  asyncUsageCount: Int!

  """The number of redeem codes for the discount."""
  codeCount: Int!

  """A list of redeem codes for the discount."""
  codes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountRedeemCodeConnection!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGets!

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelection!

  """The class of the discount for combining purposes."""
  discountClass: MerchandiseDiscountClass!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """Indicates whether there are any timeline comments on the discount."""
  hasTimelineComment: Boolean!

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirement

  """
  The number of times a discount applies on recurring purchases (subscriptions).
  """
  recurringCycleLimit: Int

  """URLs that can be used to share the discount."""
  shareableUrls: [DiscountShareableUrl!]!

  """A short summary of the discount."""
  shortSummary: String!

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """A detailed summary of the discount."""
  summary: String!

  """The title of the discount."""
  title: String!

  """The total sales from orders where the discount was used."""
  totalSales: MoneyV2

  """The maximum number of times that the discount can be used."""
  usageLimit: Int
}

"""Return type for `discountCodeBasicCreate` mutation."""
type DiscountCodeBasicCreatePayload {
  """The created code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create or update a basic code discount."""
input DiscountCodeBasicInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """
  The maximum number of times that the discount can be used. For open-ended discounts, use `null`.
  """
  usageLimit: Int

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirementInput

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGetsInput

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelectionInput

  """The code to use the discount."""
  code: String

  """
  The number of times a discount applies on recurring purchases (subscriptions).
  """
  recurringCycleLimit: Int
}

"""Return type for `discountCodeBasicUpdate` mutation."""
type DiscountCodeBasicUpdatePayload {
  """The updated code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountCodeBulkActivate` mutation."""
type DiscountCodeBulkActivatePayload {
  """The asynchronous job that activates the code discounts."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountCodeBulkDeactivate` mutation."""
type DiscountCodeBulkDeactivatePayload {
  """The asynchronous job that deactivates the code discounts."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountCodeBulkDelete` mutation."""
type DiscountCodeBulkDeletePayload {
  """The asynchronous job that deletes the code discounts."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""A code discount that offers customers a Buy X, Get Y (BXGY) discount."""
type DiscountCodeBxgy {
  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean!

  """The number of times that the discount has been used."""
  asyncUsageCount: Int!

  """The number of redeem codes for the discount."""
  codeCount: Int!

  """A list of redeem codes for the discount."""
  codes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountRedeemCodeConnection!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """
  The qualifying items and the quantity of each one that the customer has to buy to be eligible for the discount.
  """
  customerBuys: DiscountCustomerBuys!

  """
  The qualifying items in an order, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGets!

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelection!

  """The class of the discount for combining purposes."""
  discountClass: MerchandiseDiscountClass!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """Indicates whether there are any timeline comments on the discount."""
  hasTimelineComment: Boolean!

  """URLs that can be used to share the discount."""
  shareableUrls: [DiscountShareableUrl!]!

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """A detailed summary of the discount."""
  summary: String!

  """The title of the discount."""
  title: String!

  """The total sales from orders where the discount was used."""
  totalSales: MoneyV2

  """The maximum number of times that the discount can be used."""
  usageLimit: Int

  """
  The maximum number of times that the discount can be applied to an order.
  """
  usesPerOrderLimit: Int
}

"""Return type for `discountCodeBxgyCreate` mutation."""
type DiscountCodeBxgyCreatePayload {
  """The created code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create or update a BXGY code discount."""
input DiscountCodeBxgyInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """
  The qualifying items and the quantity of each one that the customer has to buy to be eligible for the discount.
  """
  customerBuys: DiscountCustomerBuysInput

  """
  The qualifying items that will be discounted, the quantity of each one, and the total value of the discount.
  """
  customerGets: DiscountCustomerGetsInput

  """The customers that are eligible to use the discount."""
  customerSelection: DiscountCustomerSelectionInput

  """The code to use the discount."""
  code: String

  """
  The maximum number of times that the discount can be used. For open-ended discounts, use `null`.
  """
  usageLimit: Int

  """
  The maximum number of times that the discount can be applied to an order.
  """
  usesPerOrderLimit: Int

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean
}

"""Return type for `discountCodeBxgyUpdate` mutation."""
type DiscountCodeBxgyUpdatePayload {
  """The updated code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountCodeDeactivate` mutation."""
type DiscountCodeDeactivatePayload {
  """The deactivated code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""Return type for `discountCodeDelete` mutation."""
type DiscountCodeDeletePayload {
  """The deleted code discount ID."""
  deletedCodeDiscountId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""A code discount that offers customers free shipping on their order."""
type DiscountCodeFreeShipping {
  """
  Whether the discount applies on regular one-time-purchase shipping lines.
  """
  appliesOnOneTimePurchase: Boolean!

  """Whether the discount applies on subscription shipping lines."""
  appliesOnSubscription: Boolean!

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean!

  """The number of times that the discount has been used."""
  asyncUsageCount: Int!

  """The number of redeem codes for the discount."""
  codeCount: Int!

  """A list of redeem codes for the discount."""
  codes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountRedeemCodeConnection!

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the discount was created."""
  createdAt: DateTime!

  """The customers that can use the discount."""
  customerSelection: DiscountCustomerSelection!

  """A shipping destination that qualifies for the discount."""
  destinationSelection: DiscountShippingDestinationSelection!

  """The class of the discount for combining purposes."""
  discountClass: ShippingDiscountClass!

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """Indicates whether there are any timeline comments on the discount."""
  hasTimelineComment: Boolean!

  """
  The maximum shipping price amount accepted to qualify for the discount.
  """
  maximumShippingPrice: MoneyV2

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirement

  """
  The number of times a discount applies on recurring purchases (subscriptions).
  """
  recurringCycleLimit: Int

  """URLs that can be used to share the discount."""
  shareableUrls: [DiscountShareableUrl!]!

  """A short summary of the discount."""
  shortSummary: String!

  """The date and time when the discount starts."""
  startsAt: DateTime!

  """The status of the discount."""
  status: DiscountStatus!

  """A detailed summary of the discount."""
  summary: String!

  """The title of the discount."""
  title: String!

  """The total sales from orders where the discount was used."""
  totalSales: MoneyV2

  """The maximum number of times that the discount can be used."""
  usageLimit: Int
}

"""Return type for `discountCodeFreeShippingCreate` mutation."""
type DiscountCodeFreeShippingCreatePayload {
  """The created code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The input fields to create or update a free shipping code discount."""
input DiscountCodeFreeShippingInput {
  """
  Determines which discount classes the shipping discount can combine with.
  """
  combinesWith: DiscountCombinesWithInput

  """The title of the discount."""
  title: String

  """The date and time when the discount starts."""
  startsAt: DateTime

  """
  The date and time when the discount ends. For open-ended discounts, use `null`.
  """
  endsAt: DateTime

  """The code to use the discount."""
  code: String

  """
  The maximum number of times that the discount can be used. For open-ended discounts, use `null`.
  """
  usageLimit: Int

  """Whether the discount can be applied only once per customer."""
  appliesOncePerCustomer: Boolean

  """
  The minimum subtotal or quantity that's required for the discount to be applied.
  """
  minimumRequirement: DiscountMinimumRequirementInput

  """The customers that are eligible to use the discount."""
  customerSelection: DiscountCustomerSelectionInput

  """A list of destinations where the discount will apply."""
  destination: DiscountShippingDestinationSelectionInput

  """The maximum shipping price that qualifies for the discount."""
  maximumShippingPrice: Decimal

  """
  The number of times a discount applies on recurring purchases (subscriptions).
  """
  recurringCycleLimit: Int

  """Whether the discount applies on regular one-time-purchase items."""
  appliesOnOneTimePurchase: Boolean

  """Whether the discount applies on subscription items."""
  appliesOnSubscription: Boolean
}

"""Return type for `discountCodeFreeShippingUpdate` mutation."""
type DiscountCodeFreeShippingUpdatePayload {
  """The updated code discount."""
  codeDiscountNode: DiscountCodeNode

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""A node containing a code discount and its related events."""
type DiscountCodeNode implements HasEvents & HasMetafieldDefinitions & HasMetafields & Node {
  """The underlying code discount object."""
  codeDiscount: DiscountCode!

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A globally-unique ID."""
  id: ID!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")
}

"""
An auto-generated type for paginating through multiple DiscountCodeNodes.
"""
type DiscountCodeNodeConnection {
  """A list of edges."""
  edges: [DiscountCodeNodeEdge!]!

  """A list of the nodes contained in DiscountCodeNodeEdge."""
  nodes: [DiscountCodeNode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountCodeNode and a cursor during pagination.
"""
type DiscountCodeNodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountCodeNodeEdge."""
  node: DiscountCodeNode!
}

"""Return type for `discountCodeRedeemCodeBulkDelete` mutation."""
type DiscountCodeRedeemCodeBulkDeletePayload {
  """The asynchronous job that deletes the discount redeem codes."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""The set of valid sort keys for the DiscountCode query."""
enum DiscountCodeSortKeys {
  """Sort by the `code` value."""
  CODE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
A list of collections that the discount can have as a prerequisite or a list of
collections to which the discount can be applied.
"""
type DiscountCollections {
  """
  The list of collections that the discount can have as a prerequisite or the
  list of collections to which the discount can be applied.
  """
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionConnection!
}

"""The input fields for collections attached to a discount."""
input DiscountCollectionsInput {
  """Specifies list of collection ids to add."""
  add: [ID!]

  """Specifies list of collection ids to remove."""
  remove: [ID!]
}

"""Determines which discount classes the discount can combine with."""
type DiscountCombinesWith {
  """Combines with order discounts."""
  orderDiscounts: Boolean!

  """Combines with product discounts."""
  productDiscounts: Boolean!

  """Combines with shipping discounts."""
  shippingDiscounts: Boolean!
}

"""
The input fields to determine which discount classes the discount can combine with.
"""
input DiscountCombinesWithInput {
  """Combines with product discounts."""
  productDiscounts: Boolean = false

  """Combines with order discounts."""
  orderDiscounts: Boolean = false

  """Combines with shipping discounts."""
  shippingDiscounts: Boolean = false
}

"""The shipping destinations where the discount can be applied."""
type DiscountCountries {
  """The codes for the countries where the discount can be applied."""
  countries: [CountryCode!]!

  """
  Whether the discount is applicable to countries that haven't been defined in the shop's shipping zones.
  """
  includeRestOfWorld: Boolean!
}

"""
The input fields for a list of countries to add or remove from the free shipping discount.
"""
input DiscountCountriesInput {
  """
  The country codes to add to the list of countries where the discount applies.
  """
  add: [CountryCode!]

  """
  The country codes to remove from the list of countries where the discount applies.
  """
  remove: [CountryCode!]

  """
  Whether the discount code is applicable to countries that haven't been defined in the shop's shipping zones.
  """
  includeRestOfWorld: Boolean = false
}

"""
The `DiscountCountryAll` object lets you target all countries as shipping destination for discount eligibility.
"""
type DiscountCountryAll {
  """
  Whether the discount can be applied to all countries as shipping destination. This value is always `true`.
  """
  allCountries: Boolean!
}

"""
The `DiscountCustomerAll` object lets you target all customers for discount eligibility.
"""
type DiscountCustomerAll {
  """
  Whether the discount can be applied by all customers. This value is always `true`.
  """
  allCustomers: Boolean!
}

"""
The prerequisite items and prerequisite value that a customer must have on the order for the discount to be applicable.
"""
type DiscountCustomerBuys {
  """The items required for the discount to be applicable."""
  items: DiscountItems!

  """The prerequisite value."""
  value: DiscountCustomerBuysValue!
}

"""The input fields for prerequisite items and quantity for the discount."""
input DiscountCustomerBuysInput {
  """The quantity of prerequisite items."""
  value: DiscountCustomerBuysValueInput

  """
  The IDs of items that the customer buys. The items can be either collections or products.
  """
  items: DiscountItemsInput
}

"""
The prerequisite for the discount to be applicable. For example, the discount
might require a customer to buy a minimum quantity of select items.
Alternatively, the discount might require a customer to spend a minimum amount
on select items.
"""
union DiscountCustomerBuysValue = DiscountPurchaseAmount | DiscountQuantity

"""
The input fields for prerequisite quantity or minimum purchase amount required for the discount.
"""
input DiscountCustomerBuysValueInput {
  """The quantity of prerequisite items."""
  quantity: UnsignedInt64

  """
  The prerequisite minimum purchase amount required for the discount to be applicable.
  """
  amount: Decimal
}

"""
The qualifying items in an order, the quantity of each one, and the total value of the discount.
"""
type DiscountCustomerGets {
  """Whether the discount applies on regular one-time-purchase items."""
  appliesOnOneTimePurchase: Boolean!

  """Whether the discount applies on subscription items."""
  appliesOnSubscription: Boolean!

  """The items to which the discount applies."""
  items: DiscountItems!

  """Entitled quantity and the discount value."""
  value: DiscountCustomerGetsValue!
}

"""
Specifies the items that will be discounted, the quantity of items that will be discounted, and the value of discount.
"""
input DiscountCustomerGetsInput {
  """The quantity of items discounted and the discount value."""
  value: DiscountCustomerGetsValueInput

  """
  The IDs of the items that the customer gets. The items can be either collections or products.
  """
  items: DiscountItemsInput

  """Whether the discount applies on regular one-time-purchase items."""
  appliesOnOneTimePurchase: Boolean

  """Whether the discount applies on subscription items."""
  appliesOnSubscription: Boolean
}

"""
The type of the discount value and how it will be applied. For example, it might
be a percentage discount on a fixed number of items. Alternatively, it might be
a fixed amount evenly distributed across all items or on each individual item. A
third example is a percentage discount on all items.
"""
union DiscountCustomerGetsValue = DiscountAmount | DiscountOnQuantity | DiscountPercentage

"""
The input fields for the quantity of items discounted and the discount value.
"""
input DiscountCustomerGetsValueInput {
  """The quantity of the items that are discounted and the discount value."""
  discountOnQuantity: DiscountOnQuantityInput

  """
  The percentage value of the discount. Value must be between 0.00 - 1.00.
  """
  percentage: Float

  """The value of the discount."""
  discountAmount: DiscountAmountInput
}

"""A list of customers eligible for the discount."""
type DiscountCustomers {
  """The list of customers eligible for the discount."""
  customers: [Customer!]!
}

"""
A list of customer segments that contain the customers that the discount applies to.
"""
type DiscountCustomerSegments {
  """
  A list of customer segments that contain the customers who can use the discount.
  """
  segments: [Segment!]!
}

"""
The input fields for which customer segments to add to or remove from the discount.
"""
input DiscountCustomerSegmentsInput {
  """
  A list of customer segments to add to the current list of customer segments.
  """
  add: [ID!]

  """
  A list of customer segments to remove from the current list of customer segments.
  """
  remove: [ID!]
}

"""
The type used for targeting a set of customers who are eligible for the
discount. For example, the discount might be available to all customers or it
might only be available to a specific set of customers. You can define the set
of customers by targeting a list of customer segments, or by targeting a list of
specific customers.
"""
union DiscountCustomerSelection = DiscountCustomerAll | DiscountCustomerSegments | DiscountCustomers

"""The input fields for the customers who can use this discount."""
input DiscountCustomerSelectionInput {
  """Whether all customers can use this discount."""
  all: Boolean

  """The list of customer IDs to add or remove from the list of customers."""
  customers: DiscountCustomersInput

  """
  The list of customer segment IDs to add or remove from the list of customer segments.
  """
  customerSegments: DiscountCustomerSegmentsInput
}

"""
The input fields for which customers to add to or remove from the discount.
"""
input DiscountCustomersInput {
  """
  A list of customers to add to the current list of customers who can use the discount.
  """
  add: [ID!]

  """
  A list of customers to remove from the current list of customers who can use the discount.
  """
  remove: [ID!]
}

"""
The type of discount that will be applied. Currently, only a percentage discount is supported.
"""
union DiscountEffect = DiscountPercentage

"""
The input fields for how the discount will be applied. Currently, only percentage off is supported.
"""
input DiscountEffectInput {
  """
  The percentage value of the discount. Value must be between 0.00 - 1.00.
  """
  percentage: Float
}

"""Possible error codes that can be returned by `DiscountUserError`."""
enum DiscountErrorCode {
  """The input value is blank."""
  BLANK

  """The input value needs to be blank."""
  PRESENT

  """The input value should be equal to the value allowed."""
  EQUAL_TO

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN

  """
  The input value should be greater than or equal to the minimum value allowed.
  """
  GREATER_THAN_OR_EQUAL_TO

  """The input value is invalid."""
  INVALID

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value should be less than the maximum value allowed."""
  LESS_THAN

  """The input value is already taken."""
  TAKEN

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Too many arguments provided."""
  TOO_MANY_ARGUMENTS

  """Missing a required argument."""
  MISSING_ARGUMENT

  """
  The active period overlaps with other automatic discounts. At any given time, only one automatic discount can be active.
  """
  ACTIVE_PERIOD_OVERLAP

  """The value exceeded the maximum allowed value."""
  EXCEEDED_MAX

  """Specify a minimum subtotal or a quantity, but not both."""
  MINIMUM_SUBTOTAL_AND_QUANTITY_RANGE_BOTH_PRESENT

  """The value is outside of the allowed range."""
  VALUE_OUTSIDE_RANGE

  """The attribute selection contains conflicting settings."""
  CONFLICT

  """The value is already present through another selection."""
  IMPLICIT_DUPLICATE

  """The input value is already present."""
  DUPLICATE

  """The input value isn't included in the list."""
  INCLUSION

  """The `combinesWith` settings are invalid for the discount class."""
  INVALID_COMBINES_WITH_FOR_DISCOUNT_CLASS

  """The discountClass is invalid for the price rule."""
  INVALID_DISCOUNT_CLASS_FOR_PRICE_RULE

  """
  The active period overlaps with too many other app-provided discounts. There's
  a limit on the number of app discounts that can be active at any given time.
  """
  MAX_APP_DISCOUNTS
}

"""
The type used to target the items required for discount eligibility, or the
items to which the application of a discount might apply. For example, for a
customer to be eligible for a discount, they're required to add an item from a
specified collection to their order. Alternatively, a customer might be required
to add a specific product or product variant. When using this type to target
which items the discount will apply to, the discount might apply to all items on
the order, or to specific products and product variants, or items in a given collection.
"""
union DiscountItems = AllDiscountItems | DiscountCollections | DiscountProducts

"""
The input fields for the items attached to a discount. You can specify the discount items by product ID or collection ID.
"""
input DiscountItemsInput {
  """The products and product variants that are attached to a discount."""
  products: DiscountProductsInput

  """The collections that are attached to a discount."""
  collections: DiscountCollectionsInput

  """Whether all items should be selected."""
  all: Boolean
}

"""The minimum quantity of items required for the discount to apply."""
type DiscountMinimumQuantity {
  """
  The minimum quantity of items that's required for the discount to be applied.
  """
  greaterThanOrEqualToQuantity: UnsignedInt64!
}

"""The input fields for the minimum quantity required for the discount."""
input DiscountMinimumQuantityInput {
  """
  The minimum quantity of items that's required for the discount to be applied.
  """
  greaterThanOrEqualToQuantity: UnsignedInt64
}

"""
The type of minimum requirement that must be met for the discount to be applied.
For example, a customer must spend a minimum subtotal to be eligible for the
discount. Alternatively, a customer must purchase a minimum quantity of items to
be eligible for the discount.
"""
union DiscountMinimumRequirement = DiscountMinimumQuantity | DiscountMinimumSubtotal

"""
The input fields for the minimum quantity or subtotal required for a discount.
"""
input DiscountMinimumRequirementInput {
  """The minimum required quantity."""
  quantity: DiscountMinimumQuantityInput

  """The minimum required subtotal."""
  subtotal: DiscountMinimumSubtotalInput
}

"""The minimum subtotal required for the discount to apply."""
type DiscountMinimumSubtotal {
  """The minimum subtotal that's required for the discount to be applied."""
  greaterThanOrEqualToSubtotal: MoneyV2!
}

"""The input fields for the minimum subtotal required for a discount."""
input DiscountMinimumSubtotalInput {
  """The minimum subtotal that's required for the discount to be applied."""
  greaterThanOrEqualToSubtotal: Decimal
}

"""A discount wrapper node."""
type DiscountNode implements HasEvents & HasMetafieldDefinitions & HasMetafields & Node {
  """A discount."""
  discount: Discount!

  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A globally-unique ID."""
  id: ID!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")
}

"""An auto-generated type for paginating through multiple DiscountNodes."""
type DiscountNodeConnection {
  """A list of edges."""
  edges: [DiscountNodeEdge!]!

  """A list of the nodes contained in DiscountNodeEdge."""
  nodes: [DiscountNode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountNode and a cursor during pagination.
"""
type DiscountNodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountNodeEdge."""
  node: DiscountNode!
}

"""
The quantity of items discounted, the discount value, and how the discount will be applied.
"""
type DiscountOnQuantity {
  """The discount's effect on qualifying items."""
  effect: DiscountEffect!

  """
  The number of items being discounted. The customer must have at least this
  many items of specified products or product variants in their order to be
  eligible for the discount.
  """
  quantity: DiscountQuantity!
}

"""
The input fields for the quantity of items discounted and the discount value.
"""
input DiscountOnQuantityInput {
  """The quantity of items that are discounted."""
  quantity: UnsignedInt64

  """The percentage value of the discount."""
  effect: DiscountEffectInput
}

"""
A discount effect that gives customers a percentage off of specified items on their order.
"""
type DiscountPercentage {
  """The percentage value of the discount."""
  percentage: Float!
}

"""
A list of products and product variants that the discount can have as a
prerequisite or a list of products and product variants to which the discount
can be applied.
"""
type DiscountProducts {
  """
  The list of product variants that the discount can have as a prerequisite or
  the list of product variants to which the discount can be applied.
  """
  productVariants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantConnection!

  """
  The list of products that the discount can have as a prerequisite or the list
  of products to which the discount can be applied.
  """
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!
}

"""
The input fields for the products and product variants attached to a discount.
"""
input DiscountProductsInput {
  """Specifies list of product ids to add."""
  productsToAdd: [ID!]

  """Specifies list of product ids to remove."""
  productsToRemove: [ID!]

  """Specifies list of product variant ids to add."""
  productVariantsToAdd: [ID!]

  """Specifies list of product variant ids to remove."""
  productVariantsToRemove: [ID!]
}

"""
A purchase amount in the context of a discount. This object can be used to
define the minimum purchase amount required for a discount to be applicable.
"""
type DiscountPurchaseAmount {
  """The purchase amount in decimal format."""
  amount: Decimal!
}

"""
A quantity of items in the context of a discount. This object can be used to
define the minimum quantity of items required to apply a discount.
Alternatively, it can be used to define the quantity of items that can be discounted.
"""
type DiscountQuantity {
  """The quantity of items."""
  quantity: UnsignedInt64!
}

"""
A code that a customer can use at checkout to receive a discount. For example, a
customer can use the redeem code 'SUMMER20' at checkout to receive a 20%
discount on their entire order.
"""
type DiscountRedeemCode {
  """
  The number of times that the discount redeem code has been used. This value is
  updated asynchronously and can be different than the actual usage count.
  """
  asyncUsageCount: Int!

  """The code that a customer can use at checkout to receive a discount."""
  code: String!

  """The application that created the discount redeem code."""
  createdBy: App

  """A globally-unique ID of the discount redeem code."""
  id: ID!
}

"""Return type for `discountRedeemCodeBulkAdd` mutation."""
type DiscountRedeemCodeBulkAddPayload {
  """
  The ID of the discount redeem code bulk creation operation. The properties and
  status of the operation can be tracked using the
  [`DiscountRedeemCodeBulkCreation` query](https://shopify.dev/api/admin-graphql/2022-04/queries/discountRedeemCodeBulkCreation).
  """
  bulkCreation: DiscountRedeemCodeBulkCreation

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DiscountUserError!]!
}

"""
The properties and status of a bulk discount redeem code creation operation.
"""
type DiscountRedeemCodeBulkCreation implements Node {
  """
  The result of each code creation operation associated with the bulk creation
  operation including any errors that might have occurred during the operation.
  """
  codes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DiscountRedeemCodeBulkCreationCodeConnection!

  """The number of codes to create."""
  codesCount: Int!

  """The date and time when the bulk creation was created."""
  createdAt: DateTime!

  """The code discount associated with the created codes."""
  discountCode: DiscountCodeNode

  """
  Whether the bulk creation is still queued (`false`) or has been run (`true`).
  """
  done: Boolean!

  """The number of codes that weren't created successfully."""
  failedCount: Int!

  """A globally-unique ID."""
  id: ID!

  """The number of codes created successfully."""
  importedCount: Int!
}

"""
A result of a discount redeem code creation operation created by a bulk creation.
"""
type DiscountRedeemCodeBulkCreationCode {
  """The code to use in the discount redeem code creation operation."""
  code: String!

  """
  The successfully created discount redeem code.
  
  If the discount redeem code couldn't be created, then this field is `null``.
  """
  discountRedeemCode: DiscountRedeemCode

  """
  A list of errors that occurred during the creation operation of the discount redeem code.
  """
  errors: [DiscountUserError!]!
}

"""
An auto-generated type for paginating through multiple DiscountRedeemCodeBulkCreationCodes.
"""
type DiscountRedeemCodeBulkCreationCodeConnection {
  """A list of edges."""
  edges: [DiscountRedeemCodeBulkCreationCodeEdge!]!

  """
  A list of the nodes contained in DiscountRedeemCodeBulkCreationCodeEdge.
  """
  nodes: [DiscountRedeemCodeBulkCreationCode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountRedeemCodeBulkCreationCode and a cursor during pagination.
"""
type DiscountRedeemCodeBulkCreationCodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountRedeemCodeBulkCreationCodeEdge."""
  node: DiscountRedeemCodeBulkCreationCode!
}

"""
An auto-generated type for paginating through multiple DiscountRedeemCodes.
"""
type DiscountRedeemCodeConnection {
  """A list of edges."""
  edges: [DiscountRedeemCodeEdge!]!

  """A list of the nodes contained in DiscountRedeemCodeEdge."""
  nodes: [DiscountRedeemCode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DiscountRedeemCode and a cursor during pagination.
"""
type DiscountRedeemCodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DiscountRedeemCodeEdge."""
  node: DiscountRedeemCode!
}

"""The input fields for the redeem code to attach to a discount."""
input DiscountRedeemCodeInput {
  """
  The code that a customer can use at checkout to receive the associated discount.
  """
  code: String!
}

"""A shareable URL for a discount code."""
type DiscountShareableUrl {
  """
  The image URL of the item (product or collection) to which the discount applies.
  """
  targetItemImage: Image

  """The type of page that's associated with the URL."""
  targetType: DiscountShareableUrlTargetType!

  """The title of the page that's associated with the URL."""
  title: String!

  """The URL for the discount code."""
  url: URL!
}

"""The type of page where a shareable discount URL lands."""
enum DiscountShareableUrlTargetType {
  """The URL lands on a home page."""
  HOME

  """The URL lands on a product page."""
  PRODUCT

  """The URL lands on a collection page."""
  COLLECTION
}

"""
The type used to target the eligible countries of an order's shipping
destination for which the discount applies. For example, the discount might be
applicable when shipping to all countries, or only to a set of countries.
"""
union DiscountShippingDestinationSelection = DiscountCountries | DiscountCountryAll

"""
The input fields for the destinations where the free shipping discount will be applied.
"""
input DiscountShippingDestinationSelectionInput {
  """Whether the discount code applies to all countries."""
  all: Boolean = false

  """A list of countries where the discount code will apply."""
  countries: DiscountCountriesInput
}

"""The set of valid sort keys for the Discount query."""
enum DiscountSortKeys {
  """Sort by the `starts_at` value."""
  STARTS_AT

  """Sort by the `ends_at` value."""
  ENDS_AT

  """Sort by the `title` value."""
  TITLE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The status of the discount."""
enum DiscountStatus {
  """The discount is active."""
  ACTIVE

  """The discount is expired."""
  EXPIRED

  """The discount is scheduled."""
  SCHEDULED
}

"""
The type of line (line item or shipping line) on an order that the subscription discount is applicable towards.
"""
enum DiscountTargetType {
  """The discount applies onto line items."""
  LINE_ITEM

  """The discount applies onto shipping lines."""
  SHIPPING_LINE
}

"""The type of the subscription discount."""
enum DiscountType {
  """Manual discount type."""
  MANUAL

  """Code discount type."""
  CODE_DISCOUNT
}

"""An error that occurs during the execution of a discount mutation."""
type DiscountUserError implements DisplayableError {
  """The error code."""
  code: DiscountErrorCode

  """Extra information about this error."""
  extraInfo: String

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents an error in the input of a mutation."""
interface DisplayableError {
  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Return type for `disputeEvidenceUpdate` mutation."""
type DisputeEvidenceUpdatePayload {
  """The updated dispute evidence."""
  disputeEvidence: ShopifyPaymentsDisputeEvidence

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DisputeEvidenceUpdateUserError!]!
}

"""An error that occurs during the execution of `DisputeEvidenceUpdate`."""
type DisputeEvidenceUpdateUserError implements DisplayableError {
  """The error code."""
  code: DisputeEvidenceUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `DisputeEvidenceUpdateUserError`.
"""
enum DisputeEvidenceUpdateUserErrorCode {
  """Dispute evidence could not be found."""
  DISPUTE_EVIDENCE_NOT_FOUND

  """Evidence already accepted."""
  EVIDENCE_ALREADY_ACCEPTED

  """Evidence past due date."""
  EVIDENCE_PAST_DUE_DATE

  """Combined files size is too large."""
  FILES_SIZE_EXCEEDED_LIMIT

  """Individual file size is too large."""
  TOO_LARGE

  """The input value is invalid."""
  INVALID
}

"""The possible statuses of a dispute."""
enum DisputeStatus {
  NEEDS_RESPONSE
  UNDER_REVIEW
  CHARGE_REFUNDED
  ACCEPTED
  WON
  LOST
}

"""The possible types for a dispute."""
enum DisputeType {
  """The dispute has turned into a chargeback."""
  CHARGEBACK

  """The dispute is in the inquiry phase."""
  INQUIRY
}

"""
A unique string that represents the address of a Shopify store on the Internet.
"""
type Domain implements Node {
  """The host name of the domain. For example, `example.com`."""
  host: String!

  """A globally-unique ID."""
  id: ID!

  """The localization of the domain, if the domain doesn't redirect."""
  localization: DomainLocalization

  """The web presence of the domain."""
  marketWebPresence: MarketWebPresence

  """Whether SSL is enabled."""
  sslEnabled: Boolean!

  """The URL of the domain (for example, `https://example.com`)."""
  url: URL!
}

"""The country and language settings assigned to a domain."""
type DomainLocalization {
  """
  The ISO codes for the domain’s alternate locales. For example, `["en"]`.
  """
  alternateLocales: [String!]!

  """
  The ISO code for the country assigned to the domain. For example, `"CA"` or "*" for a domain set to "Rest of world".
  """
  country: String

  """The ISO code for the domain’s default locale. For example, `"en"`."""
  defaultLocale: String!
}

"""
An order that a merchant creates on behalf of a customer. Draft orders are
useful for merchants that need to do the following tasks:

- Create new orders for sales made by phone, in person, by chat, or elsewhere.
When a merchant accepts payment for a draft order, an order is created.
- Send invoices to customers to pay with a secure checkout link.
- Use custom items to represent additional costs or products that aren't displayed in a shop's inventory.
- Re-create orders manually from active sales channels.
- Sell products at discount or wholesale rates.
- Take pre-orders.
- Save an order as a draft and resume working on it later.

For Draft orders in multiple currencies `presentment_money` is the source of
truth for what a customer is going to be charged and `shop_money` is an estimate
of what the merchant might receive in their local currency.

**Caution:** Only use this data if it's required for your app's functionality.
Shopify will restrict [access to
scopes](https://shopify.dev/api/usage/access-scopes) for apps that don't have a
legitimate use for the associated data.
"""
type DraftOrder implements CommentEventSubject & HasEvents & HasLocalizationExtensions & HasMetafields & LegacyInteroperability & Navigable & Node {
  """The order-level discount applied to the draft order."""
  appliedDiscount: DraftOrderAppliedDiscount

  """The billing address of the customer."""
  billingAddress: MailingAddress

  """Whether the billing address matches the shipping address."""
  billingAddressMatchesShippingAddress: Boolean!

  """
  The date and time when the draft order converted to a new order,
  and the draft order's status changed to **Completed**.
  """
  completedAt: DateTime

  """The date and time when the draft order was created in Shopify."""
  createdAt: DateTime!

  """
  The three letter code for the currency of the store at the time of the most recent update to the draft order.
  """
  currencyCode: CurrencyCode!

  """
  The custom information added to the draft order on behalf of the customer.
  """
  customAttributes: [Attribute!]!

  """
  The customer who will be sent an invoice for the draft order, if there is one.
  """
  customer: Customer

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """
  The email address of the customer, which is used to send notifications.
  """
  email: String

  """The list of events associated with the draft order."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """Whether the merchant has added timeline comments to the draft order."""
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The subject defined for the draft invoice email template."""
  invoiceEmailTemplateSubject: String!

  """The date and time when the invoice was last emailed to the customer."""
  invoiceSentAt: DateTime

  """
  The link to the checkout, which is sent to the customer in the invoice email.
  """
  invoiceUrl: URL

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The list of the line items in the draft order."""
  lineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DraftOrderLineItemConnection!

  """
  The subtotal of the line items and corresponding discounts. The subtotal
  doesn't include shipping charges, shipping discounts, taxes, or order discounts.
  """
  lineItemsSubtotalPrice: MoneyBag!

  """List of localization extensions for the resource."""
  localizationExtensions(
    """The country codes of the extensions."""
    countryCodes: [CountryCode!]

    """The purpose of the extensions."""
    purposes: [LocalizationExtensionPurpose!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LocalizationExtensionConnection!

  """The name of the selected market."""
  marketName: String!

  """The selected market region country code for the draft order."""
  marketRegionCountryCode: CountryCode!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  The identifier for the draft order, which is unique within the store. For example, _#D1223_.
  """
  name: String!

  """The text from an optional note attached to the draft order."""
  note2: String

  """The order that was created from this draft order."""
  order: Order

  """The associated payment terms for this draft order."""
  paymentTerms: PaymentTerms

  """The phone number assigned to the draft order."""
  phone: String

  """The payment currency of the customer for this draft order."""
  presentmentCurrencyCode: CurrencyCode!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The purchasing entity for the draft order."""
  purchasingEntity: PurchasingEntity

  """
  Whether the Draft Order is ready and can be completed. Draft Orders
          might have asynchronous operations that can take time to finish.
  """
  ready: Boolean!

  """The time after which inventory will automatically be restocked."""
  reserveInventoryUntil: DateTime

  """The shipping address of the customer."""
  shippingAddress: MailingAddress

  """The line item that contains the shipping costs."""
  shippingLine: ShippingLine

  """Status of the draft order."""
  status: DraftOrderStatus!

  """
  The subtotal of the line items and their discounts. The subtotal doesn't
  include shipping charges, shipping discounts, or taxes.
  """
  subtotalPrice: Money!

  """
  A subtotal of the line items and corresponding discounts. The subtotal doesn't
  include shipping charges, shipping discounts, or taxes.
  """
  subtotalPriceSet: MoneyBag!

  """
  A comma separated list of tags associated with the draft order. Updating `tags` overwrites
  any existing tags that were previously added to the draft order. To add new tags without overwriting
  existing tags, use the [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsadd)
  mutation.
  """
  tags: [String!]!

  """Whether the draft order is tax exempt."""
  taxExempt: Boolean!

  """Total amount of taxes charged for each line item and shipping line."""
  taxLines: [TaxLine!]!

  """Whether the line item prices include taxes."""
  taxesIncluded: Boolean!

  """The total discounts for this draft order."""
  totalDiscountsSet: MoneyBag!

  """The total price of line items for this draft order."""
  totalLineItemsPriceSet: MoneyBag!

  """
  The total amount of the draft order, including taxes, shipping charges, and discounts.
  """
  totalPrice: Money!

  """
  The total amount of the draft order including taxes, shipping charges, and discounts.
  """
  totalPriceSet: MoneyBag!

  """The total shipping charge for the draft order."""
  totalShippingPrice: Money!

  """The total shipping charge for the draft order."""
  totalShippingPriceSet: MoneyBag!

  """The total amount of taxes for the draft order."""
  totalTax: Money!

  """The total amount of taxes for the draft order."""
  totalTaxSet: MoneyBag!

  """The total weight in grams of the draft order."""
  totalWeight: UnsignedInt64!

  """
  The date and time when the draft order was last changed.
  The format is YYYY-MM-DD HH:mm:ss. For example, 2016-02-05 17:04:01.
  """
  updatedAt: DateTime!

  """
  Whether the draft order will be visible to the customer on the self-serve portal.
  """
  visibleToCustomer: Boolean!
}

"""The order-level discount applied to a draft order."""
type DraftOrderAppliedDiscount {
  """Amount of the order-level discount that's applied to the draft order."""
  amount: Money! @deprecated(reason: "Use `amountV2` instead.")

  """
  The amount of money discounted, with values shown in both shop currency and presentment currency.
  """
  amountSet: MoneyBag!

  """Amount of money discounted."""
  amountV2: MoneyV2!

  """Description of the order-level discount."""
  description: String!

  """Name of the order-level discount."""
  title: String

  """
  The order level discount amount. If `valueType` is `"percentage"`,
  then `value` is the percentage discount.
  """
  value: Float!

  """Type of the order-level discount."""
  valueType: DraftOrderAppliedDiscountType!
}

"""
The input fields for applying an order-level discount to a draft order.
"""
input DraftOrderAppliedDiscountInput {
  """
  The applied amount of the discount.
  If the type of the discount is fixed amount, then this is the fixed dollar amount.
  If the type is percentage, then this is the subtotal multiplied by the percentage.
  """
  amount: Money

  """Reason for the discount."""
  description: String

  """Title of the discount."""
  title: String

  """
  The value of the discount.
  If the type of the discount is fixed amount, then this is a fixed dollar amount.
  If the type is percentage, then this is the percentage.
  """
  value: Float!

  """The type of discount."""
  valueType: DraftOrderAppliedDiscountType!
}

"""The valid discount types that can be applied to a draft order."""
enum DraftOrderAppliedDiscountType {
  """A fixed amount in the store's currency."""
  FIXED_AMOUNT

  """A percentage of the order subtotal."""
  PERCENTAGE
}

"""Return type for `draftOrderBulkAddTags` mutation."""
type DraftOrderBulkAddTagsPayload {
  """The asynchronous job for adding tags to the draft orders."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderBulkDelete` mutation."""
type DraftOrderBulkDeletePayload {
  """The asynchronous job for deleting the draft orders."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderBulkRemoveTags` mutation."""
type DraftOrderBulkRemoveTagsPayload {
  """The asynchronous job for removing tags from the draft orders."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderCalculate` mutation."""
type DraftOrderCalculatePayload {
  """The calculated properties for a draft order."""
  calculatedDraftOrder: CalculatedDraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderComplete` mutation."""
type DraftOrderCompletePayload {
  """The completed draft order."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An auto-generated type for paginating through multiple DraftOrders."""
type DraftOrderConnection {
  """A list of edges."""
  edges: [DraftOrderEdge!]!

  """A list of the nodes contained in DraftOrderEdge."""
  nodes: [DraftOrder!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `draftOrderCreateFromOrder` mutation."""
type DraftOrderCreateFromOrderPayload {
  """The created Draft Order."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderCreateMerchantCheckout` mutation."""
type DraftOrderCreateMerchantCheckoutPayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderCreate` mutation."""
type DraftOrderCreatePayload {
  """The created draft order."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields to specify the draft order to delete by its ID."""
input DraftOrderDeleteInput {
  """The ID of the draft order to delete."""
  id: ID!
}

"""Return type for `draftOrderDelete` mutation."""
type DraftOrderDeletePayload {
  """The ID of the deleted draft order."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderDuplicate` mutation."""
type DraftOrderDuplicatePayload {
  """The newly duplicated draft order."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one DraftOrder and a cursor during pagination.
"""
type DraftOrderEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DraftOrderEdge."""
  node: DraftOrder!
}

"""The input fields used to create or update a draft order."""
input DraftOrderInput {
  """
  The discount that will be applied to the draft order.
  A draft order line item can have one discount. A draft order can also have one order-level discount.
  """
  appliedDiscount: DraftOrderAppliedDiscountInput

  """The mailing address associated with the payment method."""
  billingAddress: MailingAddressInput

  """Extra information added to the customer."""
  customAttributes: [AttributeInput!]

  """The customer's email address."""
  email: String

  """
  Product variant line item or custom line item associated to the draft order.
  Each draft order must include at least one line item.
  """
  lineItems: [DraftOrderLineItemInput!]

  """Metafields attached to the draft order."""
  metafields: [MetafieldInput!]

  """
  The localization extensions attached to the draft order. For example, Tax IDs.
  """
  localizationExtensions: [LocalizationExtensionInput!]

  """
  The text of an optional note that a shop owner can attach to the draft order.
  """
  note: String

  """The mailing address to where the order will be shipped."""
  shippingAddress: MailingAddressInput

  """A shipping line object, which details the shipping method used."""
  shippingLine: ShippingLineInput

  """
  A comma separated list of tags that have been added to the draft order.
  """
  tags: [String!]

  """
  Whether or not taxes are exempt for the draft order.
  If false, then Shopify will refer to the taxable field for each line item.
  If a customer is applied to the draft order, then Shopify will use the customer's tax exempt field instead.
  """
  taxExempt: Boolean

  """
  Sent as part of a draft order object to load customer shipping information.
  """
  useCustomerDefaultAddress: Boolean

  """
  Whether the draft order will be visible to the customer on the self-serve portal.
  """
  visibleToCustomer: Boolean

  """Time after which inventory will automatically be restocked."""
  reserveInventoryUntil: DateTime

  """The payment currency of the customer for this draft order."""
  presentmentCurrencyCode: CurrencyCode

  """The selected market region country code for the draft order."""
  marketRegionCountryCode: CountryCode

  """The customer's phone number."""
  phone: String

  """The fields used to create payment terms."""
  paymentTerms: PaymentTermsInput

  """The purchasing entity for this draft order."""
  purchasingEntity: PurchasingEntityInput

  """
  The source of the checkout.
            To use this field for sales attribution, you must register the channels that your app is managing.
            You can register the channels that your app is managing by completing
            [this Google Form](https://docs.google.com/forms/d/e/1FAIpQLScmVTZRQNjOJ7RD738mL1lGeFjqKVe_FM2tO9xsm21QEo5Ozg/viewform?usp=sf_link).
            After you've submitted your request, you need to wait for your request to be processed by Shopify.
            You can find a list of your channels in the Partner Dashboard, in your app's Marketplace extension.
            You need to specify the handle as the `source_name` value in your request.
            The handle is the channel that the order was placed from.
  """
  sourceName: String
}

"""Return type for `draftOrderInvoicePreview` mutation."""
type DraftOrderInvoicePreviewPayload {
  """The draft order invoice email rendered as HTML to allow previewing."""
  previewHtml: HTML

  """The subject preview for the draft order invoice email."""
  previewSubject: HTML

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `draftOrderInvoiceSend` mutation."""
type DraftOrderInvoiceSendPayload {
  """The draft order an invoice email is sent for."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""A line item included in a draft order."""
type DraftOrderLineItem implements Node {
  """
  The discount that will be applied to the line item or the overall order.
  """
  appliedDiscount: DraftOrderAppliedDiscount

  """
  Whether the line item is a custom line item (`true`) or a product variant line item (`false`).
  """
  custom: Boolean!

  """
  A list of attributes that represent custom features or special requests.
  """
  customAttributes: [Attribute!]!

  """
  Additional information (metafields) about the line item with the associated types.
  """
  customAttributesV2: [TypedAttribute!]!

  """The line item price after discounts are applied."""
  discountedTotal: Money!

  """The line item price after discounts are applied."""
  discountedTotalSet: MoneyBag!

  """
  The `discountedTotal` divided by `quantity`, resulting in the value of the discount per unit.
  """
  discountedUnitPrice: Money!

  """
  The `discountedTotal` divided by `quantity`, resulting in the value of the discount per unit.
  """
  discountedUnitPriceSet: MoneyBag!

  """
  Name of the service provider who fulfilled the order.
  
  Valid values are either **manual** or the name of the provider.
  For example, **amazon**, **shipwire**.
  
  Deleted fulfillment services will return null.
  """
  fulfillmentService: FulfillmentService

  """
  The weight of the line item in grams. The weight can only be specified if the line item is a custom
  line item.
  """
  grams: Int @deprecated(reason: "Use `weight` instead.")

  """A globally-unique ID."""
  id: ID!

  """The image associated with the draft order line item."""
  image: Image

  """Whether the line item is a gift card."""
  isGiftCard: Boolean!

  """The name of the product."""
  name: String!

  """
  The total price (without discounts) of the line item, based on the original unit price of the variant x quantity.
  """
  originalTotal: Money!

  """
  The total price (without discounts) of the line item,based on the original unit price of the variant x quantity.
  """
  originalTotalSet: MoneyBag!

  """The variant price without any discounts applied."""
  originalUnitPrice: Money!

  """The variant price without any discounts applied."""
  originalUnitPriceSet: MoneyBag!

  """The product corresponding to the line item’s product variant."""
  product: Product

  """The number of product variants that are requested in the draft order."""
  quantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """The SKU number of the product variant."""
  sku: String

  """
  A list of tax line objects, each of which details the total taxes applicable to the order.
  """
  taxLines: [TaxLine!]!

  """Whether the variant is taxable."""
  taxable: Boolean!

  """
  The title of the product or variant. This field only applies to custom line items.
  """
  title: String!

  """The total value of the discount that's applied to the line item."""
  totalDiscount: Money!

  """The total value of the discount that's applied to the line item."""
  totalDiscountSet: MoneyBag!

  """The associated variant for the line item."""
  variant: ProductVariant

  """The name of the variant."""
  variantTitle: String

  """The name of the vendor who created the product variant."""
  vendor: String

  """The weight unit and value for a draft order line item."""
  weight: Weight
}

"""
An auto-generated type for paginating through multiple DraftOrderLineItems.
"""
type DraftOrderLineItemConnection {
  """A list of edges."""
  edges: [DraftOrderLineItemEdge!]!

  """A list of the nodes contained in DraftOrderLineItemEdge."""
  nodes: [DraftOrderLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one DraftOrderLineItem and a cursor during pagination.
"""
type DraftOrderLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of DraftOrderLineItemEdge."""
  node: DraftOrderLineItem!
}

"""The input fields used to create a line item for a draft order."""
input DraftOrderLineItemInput {
  """Discount which will be applied to the line item."""
  appliedDiscount: DraftOrderAppliedDiscountInput

  """Represents a generic custom attribute using a key value pair."""
  customAttributes: [AttributeInput!]

  """
  The price without any discounts applied. This value is ignored when `variantId` is provided.
  """
  originalUnitPrice: Money

  """The number of products that were purchased."""
  quantity: Int!

  """
  Whether physical shipping is required. This value is ignored when `variantId` is provided.
  """
  requiresShipping: Boolean

  """
  The SKU number of the item. This value is ignored when `variantId` is provided.
  """
  sku: String

  """
  Whether the item is taxable. This value is ignored when `variantId` is provided.
  """
  taxable: Boolean

  """Title of the item. Ignored when `variantId` is provided."""
  title: String

  """
  The ID of the product variant corresponding to the line item.
  Null if custom line item. Required if product variant line item.
  """
  variantId: ID

  """
  Specifies the weight unit and value inputs.
  This value is ignored when `variantId` is provided.
  """
  weight: WeightInput
}

"""The set of valid sort keys for the DraftOrder query."""
enum DraftOrderSortKeys {
  """Sort by the `number` value."""
  NUMBER

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `status` value."""
  STATUS

  """Sort by the `total_price` value."""
  TOTAL_PRICE

  """Sort by the `customer_name` value."""
  CUSTOMER_NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The valid statuses for a draft order."""
enum DraftOrderStatus {
  """The draft order has been paid."""
  COMPLETED

  """An invoice for the draft order has been sent to the customer."""
  INVOICE_SENT

  """
  The draft order is open. It has not been paid, and an invoice hasn't been sent.
  """
  OPEN
}

"""Represents a draft order tag."""
type DraftOrderTag implements Node {
  """Handle of draft order tag."""
  handle: String!

  """ID of draft order tag."""
  id: ID!

  """Title of draft order tag."""
  title: String!
}

"""Return type for `draftOrderUpdate` mutation."""
type DraftOrderUpdatePayload {
  """The updated draft order."""
  draftOrder: DraftOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The duty details for a line item."""
type Duty implements Node {
  """
  The ISO 3166-1 alpha-2 country code of the country of origin used in calculating the duty.
  """
  countryCodeOfOrigin: CountryCode

  """The harmonized system code of the item used in calculating the duty."""
  harmonizedSystemCode: String

  """A globally-unique ID."""
  id: ID!

  """The amount of the duty."""
  price: MoneyBag!

  """A list of taxes charged on the duty."""
  taxLines: [TaxLine!]!
}

"""A sale associated with a duty charge."""
type DutySale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The duty for the associated sale."""
  duty: Duty!

  """The unique ID for the sale."""
  id: ID!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""The attribute editable information."""
type EditableProperty {
  """Whether the attribute is locked for editing."""
  locked: Boolean!

  """The reason the attribute is locked for editing."""
  reason: FormattedString
}

"""The input fields for an email."""
input EmailInput {
  """Specifies the email subject."""
  subject: String

  """Specifies the email recipient."""
  to: String

  """Specifies the email sender."""
  from: String

  """Specifies the email body."""
  body: String

  """Specifies any bcc recipients for the email."""
  bcc: [String!]

  """Specifies a custom message to include in the email."""
  customMessage: String
}

"""Error position information in a ShopifyQL parsing error."""
type ErrorPosition {
  """The character position of the error in the line."""
  character: Int!

  """The line number of the error."""
  line: Int!
}

"""An error that occurs during the execution of a web pixel mutation."""
type ErrorsWebPixelUserError implements DisplayableError {
  """The error code."""
  code: ErrorsWebPixelUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ErrorsWebPixelUserError`.
"""
enum ErrorsWebPixelUserErrorCode {
  """The input value is blank."""
  BLANK

  """The input value is already taken."""
  TAKEN

  """The record with the ID used as the input value couldn't be found."""
  NOT_FOUND

  """
  The provided settings ID does not match the expected settings definition on the app.
  """
  INVALID_SETTINGS

  """An error occurred and the web pixel couldnt be deleted."""
  UNABLE_TO_DELETE
}

"""
Events chronicle resource activities such as the creation of an article, the fulfillment of an order, or the
addition of a product.
"""
interface Event {
  """The name of the app that created the event."""
  appTitle: String

  """Whether the event was created by an app."""
  attributeToApp: Boolean!

  """Whether the event was caused by an admin user."""
  attributeToUser: Boolean!

  """The date and time when the event was created."""
  createdAt: DateTime!

  """Whether the event is critical."""
  criticalAlert: Boolean!

  """A globally-unique ID."""
  id: ID!

  """Human readable text that describes the event."""
  message: FormattedString!
}

"""Return type for `eventBridgeWebhookSubscriptionCreate` mutation."""
type EventBridgeWebhookSubscriptionCreatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!

  """The webhook subscription that was created."""
  webhookSubscription: WebhookSubscription
}

"""The input fields for an EventBridge webhook subscription."""
input EventBridgeWebhookSubscriptionInput {
  """The ARN of the EventBridge partner event source."""
  arn: ARN

  """The format in which the webhook subscription should send the data."""
  format: WebhookSubscriptionFormat

  """The list of fields to be included in the webhook subscription."""
  includeFields: [String!]

  """
  The list of namespaces for any metafields that should be included in the webhook subscription.
  """
  metafieldNamespaces: [String!]
}

"""Return type for `eventBridgeWebhookSubscriptionUpdate` mutation."""
type EventBridgeWebhookSubscriptionUpdatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!

  """The webhook subscription that was updated."""
  webhookSubscription: WebhookSubscription
}

"""An auto-generated type for paginating through multiple Events."""
type EventConnection {
  """A list of edges."""
  edges: [EventEdge!]!

  """A list of the nodes contained in EventEdge."""
  nodes: [Event!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one Event and a cursor during pagination.
"""
type EventEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of EventEdge."""
  node: Event!
}

"""The set of valid sort keys for the Event query."""
enum EventSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Represents a video hosted outside of Shopify."""
type ExternalVideo implements Media & Node {
  """A word or phrase to share the nature or contents of a media."""
  alt: String

  """The embed URL of the video for the respective host."""
  embedUrl: URL!

  """The URL."""
  embeddedUrl: URL! @deprecated(reason: "Use `originUrl` instead.")

  """The host of the external video."""
  host: MediaHost!

  """A globally-unique ID."""
  id: ID!

  """The media content type."""
  mediaContentType: MediaContentType!

  """Any errors which have occurred on the media."""
  mediaErrors: [MediaError!]!

  """The warnings attached to the media."""
  mediaWarnings: [MediaWarning!]!

  """The origin URL of the video on the respective host."""
  originUrl: URL!

  """The preview image for the media."""
  preview: MediaPreviewImage

  """Current status of the media."""
  status: MediaStatus!
}

"""Requirements that must be met before an app can be installed."""
type FailedRequirement {
  """
  Action to be taken to resolve a failed requirement, including URL link.
  """
  action: NavigationItem

  """
  A concise set of copy strings to be displayed to merchants, to guide them in resolving problems your app
  encounters when trying to make use of their Shop and its resources.
  """
  message: String!
}

"""A file interface."""
interface File {
  """A word or phrase to describe the contents or the function of a file."""
  alt: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the file was created.
  """
  createdAt: DateTime!

  """Any errors that have occurred on the file."""
  fileErrors: [FileError!]!

  """The status of the file."""
  fileStatus: FileStatus!

  """The preview image for the media."""
  preview: MediaPreviewImage
}

"""An auto-generated type for paginating through multiple Files."""
type FileConnection {
  """A list of edges."""
  edges: [FileEdge!]!

  """A list of the nodes contained in FileEdge."""
  nodes: [File!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The possible content types for a file object."""
enum FileContentType {
  """A Shopify-hosted image."""
  IMAGE

  """A Shopify-hosted generic file."""
  FILE

  """
  A Shopify-hosted video file. It's recommended to use this type for all video files.
  """
  VIDEO
}

"""The input fields that are required to create a file object."""
input FileCreateInput {
  """
  An external URL (for images only) or a
  [staged upload URL](https://shopify.dev/api/admin-graphql/latest/mutations/stageduploadscreate).
  """
  originalSource: String!

  """
  The file content type. If omitted, then Shopify will attempt to determine the content type during file processing.
  """
  contentType: FileContentType

  """The alternative text description of the file."""
  alt: String
}

"""Return type for `fileCreate` mutation."""
type FileCreatePayload {
  """The newly created files."""
  files: [File!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FilesUserError!]!
}

"""Return type for `fileDelete` mutation."""
type FileDeletePayload {
  """The IDs of the deleted files."""
  deletedFileIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FilesUserError!]!
}

"""
An auto-generated type which holds one File and a cursor during pagination.
"""
type FileEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FileEdge."""
  node: File!
}

"""
A file error. This typically occurs when there is an issue with the file itself causing it to fail validation.
Check the file before attempting to upload again.
"""
type FileError {
  """Code representing the type of error."""
  code: FileErrorCode!

  """Additional details regarding the error."""
  details: String

  """Translated error message."""
  message: String!
}

"""The error types for a file."""
enum FileErrorCode {
  """File error has occurred for an unknown reason."""
  UNKNOWN

  """File could not be processed because the signed URL was invalid."""
  INVALID_SIGNED_URL

  """File could not be processed because the image could not be downloaded."""
  IMAGE_DOWNLOAD_FAILURE

  """File could not be processed because the image could not be processed."""
  IMAGE_PROCESSING_FAILURE

  """
  File timed out because it is currently being modified by another operation.
  """
  MEDIA_TIMEOUT_ERROR

  """
  File could not be created because the external video could not be found.
  """
  EXTERNAL_VIDEO_NOT_FOUND

  """
  File could not be created because the external video is not listed or is private.
  """
  EXTERNAL_VIDEO_UNLISTED

  """
  File could not be created because the external video has an invalid aspect ratio.
  """
  EXTERNAL_VIDEO_INVALID_ASPECT_RATIO

  """
  File could not be created because embed permissions are disabled for this video.
  """
  EXTERNAL_VIDEO_EMBED_DISABLED

  """
  File could not be created because video is either not found or still transcoding.
  """
  EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING

  """
  File could not be processed because the source could not be downloaded.
  """
  GENERIC_FILE_DOWNLOAD_FAILURE

  """File could not be created because the size is too large."""
  GENERIC_FILE_INVALID_SIZE

  """File could not be created because the metadata could not be read."""
  VIDEO_METADATA_READ_ERROR

  """File could not be created because it has an invalid file type."""
  VIDEO_INVALID_FILETYPE_ERROR

  """
  File could not be created because it does not meet the minimum width requirement.
  """
  VIDEO_MIN_WIDTH_ERROR

  """
  File could not be created because it does not meet the maximum width requirement.
  """
  VIDEO_MAX_WIDTH_ERROR

  """
  File could not be created because it does not meet the minimum height requirement.
  """
  VIDEO_MIN_HEIGHT_ERROR

  """
  File could not be created because it does not meet the maximum height requirement.
  """
  VIDEO_MAX_HEIGHT_ERROR

  """
  File could not be created because it does not meet the minimum duration requirement.
  """
  VIDEO_MIN_DURATION_ERROR

  """
  File could not be created because it does not meet the maximum duration requirement.
  """
  VIDEO_MAX_DURATION_ERROR

  """Video failed validation."""
  VIDEO_VALIDATION_ERROR

  """Model failed validation."""
  MODEL3D_VALIDATION_ERROR

  """
  File could not be created because the model's thumbnail generation failed.
  """
  MODEL3D_THUMBNAIL_GENERATION_ERROR

  """
  File could not be created because the model can't be converted to USDZ format.
  """
  MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR

  """File could not be created because the model file failed processing."""
  MODEL3D_GLB_OUTPUT_CREATION_ERROR

  """File could not be created because the model file failed processing."""
  MODEL3D_PROCESSING_FAILURE

  """
  File could not be created because the image is an unsupported file type.
  """
  UNSUPPORTED_IMAGE_FILE_TYPE

  """File could not be created because the image size is too large."""
  INVALID_IMAGE_FILE_SIZE

  """
  File could not be created because the image has an invalid aspect ratio.
  """
  INVALID_IMAGE_ASPECT_RATIO

  """
  File could not be created because the image's resolution exceeds the max limit.
  """
  INVALID_IMAGE_RESOLUTION

  """
  File could not be created because the cumulative file storage limit would be exceeded.
  """
  FILE_STORAGE_LIMIT_EXCEEDED
}

"""Possible error codes that can be returned by `FilesUserError`."""
enum FilesErrorCode {
  """The input value is invalid."""
  INVALID

  """File does not exist."""
  FILE_DOES_NOT_EXIST

  """File has a pending operation."""
  FILE_LOCKED

  """Specify one argument: search, IDs, or deleteAll."""
  TOO_MANY_ARGUMENTS

  """The search term must not be blank."""
  BLANK_SEARCH

  """At least one argument is required."""
  MISSING_ARGUMENTS

  """Search query isn't supported."""
  INVALID_QUERY

  """
  The file is not supported on trial accounts that have not validated their
  email. Either select a plan or verify the shop owner email to upload this file.
  """
  UNACCEPTABLE_UNVERIFIED_TRIAL_ASSET

  """The file type is not supported."""
  UNACCEPTABLE_ASSET

  """
  The file is not supported on trial accounts. Select a plan to upload this file.
  """
  UNACCEPTABLE_TRIAL_ASSET

  """The alt value exceeds the maximum limit of 512 characters."""
  ALT_VALUE_LIMIT_EXCEEDED

  """Exceeded the limit of non-image media per shop."""
  NON_IMAGE_MEDIA_PER_SHOP_LIMIT_EXCEEDED
}

"""The set of valid sort keys for the File query."""
enum FileSortKeys {
  """Sort by the `filename` value."""
  FILENAME

  """Sort by the `original_upload_size` value."""
  ORIGINAL_UPLOAD_SIZE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The possible statuses for a file object."""
enum FileStatus {
  """File has been uploaded but hasn't been processed."""
  UPLOADED

  """File is being processed."""
  PROCESSING

  """File is ready to be displayed."""
  READY

  """File processing has failed."""
  FAILED
}

"""
An error that happens during the execution of a Files API query or mutation.
"""
type FilesUserError implements DisplayableError {
  """The error code."""
  code: FilesErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""The input fields that are required to update a file object."""
input FileUpdateInput {
  """The ID of the file to be updated."""
  id: ID!

  """The alternative text description of the file."""
  alt: String

  """
  The source from which to update the media preview image.
  May be an external URL or a
  [staged upload URL](https://shopify.dev/api/admin-graphql/latest/mutations/stageduploadscreate).
  """
  previewImageSource: String
}

"""Return type for `fileUpdate` mutation."""
type FileUpdatePayload {
  """The list of updated files."""
  files: [File!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FilesUserError!]!
}

"""A filter option is one possible value in a search filter."""
type FilterOption {
  """The filter option's label for display purposes."""
  label: String!

  """The filter option's value."""
  value: String!
}

"""Return type for `flowTriggerReceive` mutation."""
type FlowTriggerReceivePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
A string containing a strict subset of HTML code. Non-allowed tags will be stripped out.
Allowed tags:
* `a` (allowed attributes: `href`, `target`)
* `b`
* `br`
* `em`
* `i`
* `strong`
* `u`
Use [HTML](https://shopify.dev/api/admin-graphql/latest/scalars/HTML) instead if you need to
include other HTML tags.

Example value: `"Your current domain is <strong>johns-apparel.myshopify.com</strong>."`
"""
scalar FormattedString

"""
Represents a fulfillment.
In Shopify, a fulfillment represents a shipment of one or more items in an order.
When an order has been completely fulfilled, it means that all the items that are included
in the order have been sent to the customer.
There can be more than one fulfillment for an order.
"""
type Fulfillment implements LegacyInteroperability & Node {
  """The date and time when the fulfillment was created."""
  createdAt: DateTime!

  """The date that this fulfillment was delivered."""
  deliveredAt: DateTime

  """Human readable display status for this fulfillment."""
  displayStatus: FulfillmentDisplayStatus

  """The estimated date that this fulfillment will arrive."""
  estimatedDeliveryAt: DateTime

  """The history of events associated with this fulfillment."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: FulfillmentEventSortKeys = HAPPENED_AT
  ): FulfillmentEventConnection!

  """List of the fulfillment's line items."""
  fulfillmentLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentLineItemConnection!

  """A paginated list of fulfillment orders for the fulfillment."""
  fulfillmentOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentOrderConnection!

  """A globally-unique ID."""
  id: ID!

  """The date and time when the fulfillment went into transit."""
  inTransitAt: DateTime

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The location that the fulfillment was processed at."""
  location: Location

  """Human readable reference identifier for this fulfillment."""
  name: String!

  """The order for which the fulfillment was created."""
  order: Order!

  """
  The address at which the fulfillment occurred. Typically this is the address of the warehouse or fulfillment center.
  """
  originAddress: FulfillmentOriginAddress

  """Whether any of the line items in the fulfillment require shipping."""
  requiresShipping: Boolean!

  """Fulfillment service associated with the fulfillment."""
  service: FulfillmentService

  """The status of the fulfillment."""
  status: FulfillmentStatus!

  """Sum of all line item quantities for the fulfillment."""
  totalQuantity: Int!

  """
  Tracking information associated with the fulfillment,
  such as the tracking company, tracking number, and tracking URL.
  """
  trackingInfo(
    """Truncate the array result to this size."""
    first: Int
  ): [FulfillmentTrackingInfo!]!

  """The date and time when the fulfillment was last modified."""
  updatedAt: DateTime!
}

"""Return type for `fulfillmentCancel` mutation."""
type FulfillmentCancelPayload {
  """The canceled fulfillment."""
  fulfillment: Fulfillment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An auto-generated type for paginating through multiple Fulfillments."""
type FulfillmentConnection {
  """A list of edges."""
  edges: [FulfillmentEdge!]!

  """A list of the nodes contained in FulfillmentEdge."""
  nodes: [Fulfillment!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `fulfillmentCreateV2` mutation."""
type FulfillmentCreateV2Payload {
  """The created fulfillment."""
  fulfillment: Fulfillment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The display status of a fulfillment."""
enum FulfillmentDisplayStatus {
  """Displayed as **Attempted delivery**."""
  ATTEMPTED_DELIVERY

  """Displayed as **Canceled**."""
  CANCELED

  """Displayed as **Confirmed**."""
  CONFIRMED

  """Displayed as **Delivered**."""
  DELIVERED

  """Displayed as **Failure**."""
  FAILURE

  """Displayed as **Fulfilled**."""
  FULFILLED

  """Displayed as **In transit**."""
  IN_TRANSIT

  """Displayed as **Label printed**."""
  LABEL_PRINTED

  """Displayed as **Label purchased**."""
  LABEL_PURCHASED

  """Displayed as **Label voided**."""
  LABEL_VOIDED

  """Displayed as **Marked as fulfilled**."""
  MARKED_AS_FULFILLED

  """Displayed as **Not delivered**."""
  NOT_DELIVERED

  """Displayed as **Out for delivery**."""
  OUT_FOR_DELIVERY

  """Displayed as **Ready for pickup**."""
  READY_FOR_PICKUP

  """Displayed as **Picked up**."""
  PICKED_UP

  """Displayed as **Submitted**."""
  SUBMITTED
}

"""
An auto-generated type which holds one Fulfillment and a cursor during pagination.
"""
type FulfillmentEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentEdge."""
  node: Fulfillment!
}

"""
The fulfillment event that describes the fulfilllment status at a particular time.
"""
type FulfillmentEvent implements Node {
  """The street address where this fulfillment event occurred."""
  address1: String

  """The city where this fulfillment event occurred."""
  city: String

  """The country where this fulfillment event occurred."""
  country: String

  """The estimated delivery date and time of the fulfillment."""
  estimatedDeliveryAt: DateTime

  """The time at which this fulfillment event happened."""
  happenedAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The latitude where this fulfillment event occurred."""
  latitude: Float

  """The longitude where this fulfillment event occurred."""
  longitude: Float

  """A message associated with this fulfillment event."""
  message: String

  """The province where this fulfillment event occurred."""
  province: String

  """The status of this fulfillment event."""
  status: FulfillmentEventStatus!

  """The zip code of the location where this fulfillment event occurred."""
  zip: String
}

"""
An auto-generated type for paginating through multiple FulfillmentEvents.
"""
type FulfillmentEventConnection {
  """A list of edges."""
  edges: [FulfillmentEventEdge!]!

  """A list of the nodes contained in FulfillmentEventEdge."""
  nodes: [FulfillmentEvent!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `fulfillmentEventCreate` mutation."""
type FulfillmentEventCreatePayload {
  """The created fulfillment event."""
  fulfillmentEvent: FulfillmentEvent

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one FulfillmentEvent and a cursor during pagination.
"""
type FulfillmentEventEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentEventEdge."""
  node: FulfillmentEvent!
}

"""The input fields used to create a fulfillment event."""
input FulfillmentEventInput {
  """The street address where this fulfillment event occurred."""
  address1: String

  """The city where this fulfillment event occurred."""
  city: String

  """The country where this fulfillment event occurred."""
  country: String

  """The estimated delivery date and time of the fulfillment."""
  estimatedDeliveryAt: DateTime

  """The time at which this fulfillment event happened."""
  happenedAt: DateTime

  """
  The ID for the fulfillment that's associated with this fulfillment event.
  """
  fulfillmentId: ID!

  """The latitude where this fulfillment event occurred."""
  latitude: Float

  """The longitude where this fulfillment event occurred."""
  longitude: Float

  """A message associated with this fulfillment event."""
  message: String

  """The province where this fulfillment event occurred."""
  province: String

  """The status of this fulfillment event."""
  status: FulfillmentEventStatus!

  """The zip code of the location where this fulfillment event occurred."""
  zip: String
}

"""The set of valid sort keys for the FulfillmentEvent query."""
enum FulfillmentEventSortKeys {
  """Sort by the `happened_at` value."""
  HAPPENED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The status that describes a fulfillment or delivery event."""
enum FulfillmentEventStatus {
  """A shipping label has been purchased."""
  LABEL_PURCHASED

  """A purchased shipping label has been printed."""
  LABEL_PRINTED

  """The fulfillment is ready to be picked up."""
  READY_FOR_PICKUP

  """
  The fulfillment is confirmed. This is the default value when no other information is available.
  """
  CONFIRMED

  """The fulfillment is in transit."""
  IN_TRANSIT

  """The fulfillment is out for delivery."""
  OUT_FOR_DELIVERY

  """A delivery was attempted."""
  ATTEMPTED_DELIVERY

  """The fulfillment was successfully delivered."""
  DELIVERED

  """The fulfillment request failed."""
  FAILURE
}

"""A fulfillment hold currently applied on a fulfillment order."""
type FulfillmentHold {
  """The reason for the fulfillment hold."""
  reason: FulfillmentHoldReason!

  """Additional information about the fulfillment hold reason."""
  reasonNotes: String
}

"""The reason for a fulfillment hold."""
enum FulfillmentHoldReason {
  """The fulfillment hold is applied because payment is pending."""
  AWAITING_PAYMENT

  """The fulfillment hold is applied because of a high risk of fraud."""
  HIGH_RISK_OF_FRAUD

  """The fulfillment hold is applied because of an incorrect address."""
  INCORRECT_ADDRESS

  """The fulfillment hold is applied because inventory is out of stock."""
  INVENTORY_OUT_OF_STOCK

  """The fulfillment hold is applied because of an unknown delivery date."""
  UNKNOWN_DELIVERY_DATE

  """The fulfillment hold is applied for another reason."""
  OTHER
}

"""Represents a line item from an order that's included in a fulfillment."""
type FulfillmentLineItem implements Node {
  """The total price after discounts are applied."""
  discountedTotal: Money! @deprecated(reason: "Use `discountedTotalSet` instead.")

  """
  The total price after discounts are applied in shop and presentment currencies.
  """
  discountedTotalSet: MoneyBag!

  """A globally-unique ID."""
  id: ID!

  """The associated order's line item."""
  lineItem: LineItem!

  """The total price before discounts are applied."""
  originalTotal: Money! @deprecated(reason: "Use `originalTotalSet` instead.")

  """
  The total price before discounts are applied in shop and presentment currencies.
  """
  originalTotalSet: MoneyBag!

  """Number of line items in the fulfillment."""
  quantity: Int
}

"""
An auto-generated type for paginating through multiple FulfillmentLineItems.
"""
type FulfillmentLineItemConnection {
  """A list of edges."""
  edges: [FulfillmentLineItemEdge!]!

  """A list of the nodes contained in FulfillmentLineItemEdge."""
  nodes: [FulfillmentLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one FulfillmentLineItem and a cursor during pagination.
"""
type FulfillmentLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentLineItemEdge."""
  node: FulfillmentLineItem!
}

"""
The FulfillmentOrder object represents either an item or a group of items in an
[Order](https://shopify.dev/api/admin-graphql/latest/objects/Order)
that are expected to be fulfilled from the same location.
There can be more than one fulfillment order for an
[order](https://shopify.dev/api/admin-graphql/latest/objects/Order)
at a given location.

{{ '/api/reference/fulfillment_order_relationships.png' | image }}

Fulfillment orders represent the work which is intended to be done in relation to an order.
When fulfillment has started for one or more line items, a
[Fulfillment](https://shopify.dev/api/admin-graphql/latest/objects/Fulfillment)
is created by a merchant or third party to represent the ongoing or completed work of fulfillment.

[See below for more details on creating fulfillments](#the-lifecycle-of-a-fulfillment-order-at-a-location-which-is-managed-by-a-fulfillment-service).

> Note:
> Shopify creates fulfillment orders automatically when an order is created.
> It is not possible to manually create fulfillment orders.
>
> [See below for more details on the lifecycle of a fulfillment order](#the-lifecycle-of-a-fulfillment-order).

## Retrieving fulfillment orders

### Fulfillment orders from an order

All fulfillment orders related to a given order can be retrieved with the
[Order.fulfillmentOrders](https://shopify.dev/api/admin-graphql/latest/objects/Order#connection-order-fulfillmentorders)
connection.

[API access scopes](#api-access-scopes)
govern which fulfillments orders are returned to clients.
An API client will only receive a subset of the fulfillment orders which belong to an order
if they don't have the necessary access scopes to view all of the fulfillment orders.

### Fulfillment orders assigned to the app for fulfillment

Fulfillment service apps can retrieve the fulfillment orders which have been assigned to their locations with the
[Shop.assignedFulfillmentOrders](https://shopify.dev/api/admin-graphql/latest/objects/Shop#connection-shop-assignedfulfillmentorders)
connection.
Use the `assignmentStatus` argument to control whether all assigned fulfillment orders
should be returned or only those where a merchant has sent a
[fulfillment request](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrderMerchantRequest)
and it has yet to be responded to.

The API client must be granted the `read_assigned_fulfillment_orders` access scope to access
the assigned fulfillment orders.

### All fulfillment orders

Apps can retrieve all fulfillment orders with the
[fulfillmentOrders](https://shopify.dev/api/admin-graphql/latest/queries/fulfillmentOrders)
query. This query returns all assigned, merchant-managed, and third-party fulfillment orders on the shop,
which are accessible to the app according to the
[fulfillment order access scopes](#api-access-scopes) it was granted with.

## The lifecycle of a fulfillment order

### Fulfillment Order Creation

After an order is created, a background worker performs the order routing process which determines
which locations will be responsible for fulfilling the purchased items.
Once the order routing process is complete, one or more fulfillment orders will be created
and assigned to these locations. It is not possible to manually create fulfillment orders.

Once a fulfillment order has been created, it will have one of two different lifecycles depending on
the type of location which the fulfillment order is assigned to.

### The lifecycle of a fulfillment order at a merchant managed location

Fulfillment orders are completed by creating
[fulfillments](https://shopify.dev/api/admin-graphql/latest/objects/Fulfillment).
Fulfillments represents the work done.

For digital products a merchant or an order management app would create a fulfilment once the digital asset
has been provisioned.
For example, in the case of a digital gift card, a merchant would to do this once
the gift card has been activated - before the email has been shipped.

On the other hand, for a traditional shipped order,
a merchant or an order management app would create a fulfillment after picking and packing the items relating
to a fulfillment order, but before the courier has collected the goods.

[Learn about managing fulfillment orders as an order management app](https://shopify.dev/apps/fulfillment/order-management-apps/manage-fulfillments).

### The lifecycle of a fulfillment order at a location which is managed by a fulfillment service

For fulfillment orders which are assigned to a location that is managed by a fulfillment service,
a merchant or an Order Management App can
[send a fulfillment request](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderSubmitFulfillmentRequest)
to the fulfillment service which operates the location to request that they fulfill the associated items.
A fulfillment service has the option to
[accept](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderAcceptFulfillmentRequest)
or [reject](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderRejectFulfillmentRequest)
this fulfillment request.

Once the fulfillment service has accepted the request, the request can no longer be cancelled by the merchant
or order management app and instead a
[cancellation request must be submitted](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderSubmitCancellationRequest)
to the fulfillment service.

Once a fulfillment service accepts a fulfillment request,
then after they are ready to pack items and send them for delivery, they create fulfillments with the
[fulfillmentCreateV2](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentCreateV2)
mutation.
They can provide tracking information right away or create fulfillments without it and then
update the tracking information for fulfillments with the
[fulfillmentTrackingInfoUpdateV2](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentTrackingInfoUpdateV2)
mutation.

[Learn about managing fulfillment orders as a fulfillment service](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments).

## API access scopes

Fulfillment orders are governed by the following API access scopes:

* The `read_merchant_managed_fulfillment_orders` and
  `write_merchant_managed_fulfillment_orders` access scopes
  grant access to fulfillment orders assigned to merchant-managed locations.
* The `read_assigned_fulfillment_orders` and `write_assigned_fulfillment_orders`
  access scopes are intended for fulfillment services.
  These scopes grant access to fulfillment orders assigned to locations that are being managed
  by fulfillment services.
* The `read_third_party_fulfillment_orders` and `write_third_party_fulfillment_orders`
  access scopes grant access to fulfillment orders
  assigned to locations managed by other fulfillment services.

### Fulfillment service app access scopes

Usually, **fulfillment services** have the `write_assigned_fulfillment_orders` access scope
and don't have the `*_third_party_fulfillment_orders`
or `*_merchant_managed_fulfillment_orders` access scopes.
The app will only have access to the fulfillment orders assigned to their location
(or multiple locations if the app registers multiple fulfillment services on the shop).
The app will not have access to fulfillment orders assigned to merchant-managed locations
or locations owned by other fulfillment service apps.

### Order management app access scopes

**Order management apps** will usually request `write_merchant_managed_fulfillment_orders` and
`write_third_party_fulfillment_orders` access scopes. This will allow them to manage all fulfillment orders
on behalf of a merchant.

If an app combines the functions of an order management app and a fulfillment service,
then the app should request all
access scopes to manage all assigned and all unassigned fulfillment orders.

## Notifications about fulfillment orders

Fulfillment services are required to
[register](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentService)
a self-hosted callback URL which has a number of uses. One of these uses is that this callback URL will be notified
whenever a merchant submits a fulfillment or cancellation request.

Both merchants and apps can
[subscribe](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#webhooks)
to the
[fulfillment order webhooks](https://shopify.dev/api/admin-graphql/latest/enums/WebhookSubscriptionTopic#value-fulfillmentorderscancellationrequestaccepted)
to be notified whenever fulfillment order related domain events occur.

[Learn about fulfillment workflows](https://shopify.dev/apps/fulfillment).
"""
type FulfillmentOrder implements Node {
  """
  The fulfillment order's assigned location. This is the location where the fulfillment is expected to happen.
  
  The fulfillment order's assigned location might change in the following cases:
  
  - The fulfillment order has been entirely moved to a new location. For example, the [fulfillmentOrderMove](
    https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderMove
    ) mutation has been called, and you see the original fulfillment order in the [movedFulfillmentOrder](
    https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderMove#field-fulfillmentordermovepayload-movedfulfillmentorder
    ) field within the mutation's response.
  - Work on the fulfillment order hasn't yet begun, which means that the fulfillment order has the
      [OPEN](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-open),
      [SCHEDULED](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-scheduled), or
      [ON_HOLD](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-onhold)
      status, and the shop's location properties might be undergoing edits (for example, in the Shopify admin).
  """
  assignedLocation: FulfillmentOrderAssignedLocation!

  """Date and time when the fulfillment order was created."""
  createdAt: DateTime!

  """Delivery method of this fulfillment order."""
  deliveryMethod: DeliveryMethod

  """The destination where the items should be sent."""
  destination: FulfillmentOrderDestination

  """
  The date and time at which the fulfillment order will be fulfillable. When
  this date and time is reached, the scheduled fulfillment order is
  automatically transitioned to open. For example, the `fulfill_at` date for a
  subscription order might be the 1st of each month, a pre-order `fulfill_at`
  date would be `nil`, and a standard order `fulfill_at` date would be the order creation date.
  """
  fulfillAt: DateTime

  """
  The latest date and time by which all items in the fulfillment order need to be fulfilled.
  """
  fulfillBy: DateTime

  """The fulfillment holds applied on the fulfillment order."""
  fulfillmentHolds: [FulfillmentHold!]!

  """A list of fulfillments for the fulfillment order."""
  fulfillments(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentConnection!

  """A globally-unique ID."""
  id: ID!

  """The duties delivery method of this fulfillment order."""
  internationalDuties: FulfillmentOrderInternationalDuties

  """A list of the fulfillment order's line items."""
  lineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentOrderLineItemConnection!

  """
  A list of locations that the fulfillment order can potentially move to.
  """
  locationsForMove(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentOrderLocationForMoveConnection!

  """
  A list of requests sent by the merchant or an order management app to the fulfillment service for the fulfillment order.
  """
  merchantRequests(
    """The kind of request the merchant sent."""
    kind: FulfillmentOrderMerchantRequestKind

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentOrderMerchantRequestConnection!

  """The order that's associated with the fulfillment order."""
  order: Order!

  """The request status of the fulfillment order."""
  requestStatus: FulfillmentOrderRequestStatus!

  """The status of the fulfillment order."""
  status: FulfillmentOrderStatus!

  """The actions that can be performed on this fulfillment order."""
  supportedActions: [FulfillmentOrderSupportedAction!]!

  """The date and time when the fulfillment order was last updated."""
  updatedAt: DateTime!
}

"""Return type for `fulfillmentOrderAcceptCancellationRequest` mutation."""
type FulfillmentOrderAcceptCancellationRequestPayload {
  """The fulfillment order whose cancellation request was accepted."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderAcceptFulfillmentRequest` mutation."""
type FulfillmentOrderAcceptFulfillmentRequestPayload {
  """The fulfillment order whose fulfillment request was accepted."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The actions that can be taken on a fulfillment order."""
enum FulfillmentOrderAction {
  """
  Creates a fulfillment for selected line items in the fulfillment order. The
  corresponding mutation for this action is `fulfillmentCreateV2`.
  """
  CREATE_FULFILLMENT

  """
  Sends a request for fulfilling selected line items in a fulfillment order to a
  fulfillment service. The corresponding mutation for this action is
  `fulfillmentOrderSubmitFulfillmentRequest`.
  """
  REQUEST_FULFILLMENT

  """
  Cancels a fulfillment order. The corresponding mutation for this action is `fulfillmentOrderCancel`.
  """
  CANCEL_FULFILLMENT_ORDER

  """
  Moves a fulfillment order. The corresponding mutation for this action is `fulfillmentOrderMove`.
  """
  MOVE

  """
  Sends a cancellation request to the fulfillment service of a fulfillment
  order. The corresponding mutation for this action is
  `fulfillmentOrderSubmitCancellationRequest`.
  """
  REQUEST_CANCELLATION

  """
  Marks the fulfillment order as open. The corresponding mutation for this action is `fulfillmentOrderOpen`.
  """
  MARK_AS_OPEN

  """
  Releases the fulfillment hold on the fulfillment order. The corresponding
  mutation for this action is `fulfillmentOrderReleaseHold`.
  """
  RELEASE_HOLD

  """
  Applies a fulfillment hold on an open fulfillment order. The corresponding
  mutation for this action is `fulfillmentOrderHold`.
  """
  HOLD

  """
  Opens an external URL to initiate the fulfillment process outside Shopify.
  This action should be paired with
  `FulfillmentOrderSupportedAction.externalUrl`.
  """
  EXTERNAL
}

"""
The fulfillment order's assigned location. This is the location where the fulfillment is expected to happen.

 The fulfillment order's assigned location might change in the following cases:

  - The fulfillment order has been entirely moved to a new location. For example, the [fulfillmentOrderMove](
    https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderMove
    ) mutation has been called, and you see the original fulfillment order in the [movedFulfillmentOrder](
    https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderMove#field-fulfillmentordermovepayload-movedfulfillmentorder
    ) field within the mutation's response.

  - Work on the fulfillment order has not yet begun, which means that the fulfillment order has the
      [OPEN](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-open),
      [SCHEDULED](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-scheduled), or
      [ON_HOLD](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-onhold)
      status, and the shop's location properties might be undergoing edits (for example, in the Shopify admin).

If the [fulfillmentOrderMove](
https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentOrderMove
) mutation has moved the fulfillment order's line items to a new location,
but hasn't moved the fulfillment order instance itself, then the original fulfillment order's assigned location
doesn't change.
This happens if the fulfillment order is being split during the move, or if all line items can be moved
to an existing fulfillment order at a new location.

Once the fulfillment order has been taken into work or canceled,
which means that the fulfillment order has the
[IN_PROGRESS](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-inprogress),
[CLOSED](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-closed),
[CANCELLED](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-cancelled), or
[INCOMPLETE](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderStatus#value-incomplete)
status, `FulfillmentOrderAssignedLocation` acts as a snapshot of the shop's location content.
Up-to-date shop's location data may be queried through [location](
  https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrderAssignedLocation#field-fulfillmentorderassignedlocation-location
) connection.
"""
type FulfillmentOrderAssignedLocation {
  """The first line of the address for the location."""
  address1: String

  """The second line of the address for the location."""
  address2: String

  """The city of the location."""
  city: String

  """The two-letter country code of the location."""
  countryCode: CountryCode!

  """
  The location where the fulfillment is expected to happen. This value might be different from
  `FulfillmentOrderAssignedLocation` if the location's attributes were updated
  after the fulfillment order was taken into work of canceled.
  """
  location: Location

  """The name of the location."""
  name: String!

  """The phone number of the location."""
  phone: String

  """The province of the location."""
  province: String

  """The ZIP code of the location."""
  zip: String
}

"""The assigment status to be used to filter fulfillment orders."""
enum FulfillmentOrderAssignmentStatus {
  """
  Fulfillment orders for which the merchant has requested cancellation of
  the previously accepted fulfillment request.
  """
  CANCELLATION_REQUESTED

  """Fulfillment orders for which the merchant has requested fulfillment."""
  FULFILLMENT_REQUESTED

  """
  Fulfillment orders for which the merchant's fulfillment request has been accepted.
  Any number of fulfillments can be created on these fulfillment orders
  to completely fulfill the requested items.
  """
  FULFILLMENT_ACCEPTED
}

"""Return type for `fulfillmentOrderCancel` mutation."""
type FulfillmentOrderCancelPayload {
  """The fulfillment order that was marked as canceled."""
  fulfillmentOrder: FulfillmentOrder

  """
  The fulfillment order that was created to replace the canceled fulfillment order.
  """
  replacementFulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderClose` mutation."""
type FulfillmentOrderClosePayload {
  """The fulfillment order that was marked as incomplete."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type for paginating through multiple FulfillmentOrders.
"""
type FulfillmentOrderConnection {
  """A list of edges."""
  edges: [FulfillmentOrderEdge!]!

  """A list of the nodes contained in FulfillmentOrderEdge."""
  nodes: [FulfillmentOrder!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
Represents the destination where the items should be sent upon fulfillment.
"""
type FulfillmentOrderDestination implements Node {
  """The first line of the address of the destination."""
  address1: String

  """The second line of the address of the destination."""
  address2: String

  """The city of the destination."""
  city: String

  """The company of the destination."""
  company: String

  """The two-letter country code of the destination."""
  countryCode: CountryCode

  """The email of the customer at the destination."""
  email: String

  """The first name of the customer at the destination."""
  firstName: String

  """A globally-unique ID."""
  id: ID!

  """The last name of the customer at the destination."""
  lastName: String

  """The phone number of the customer at the destination."""
  phone: String

  """The province of the destination."""
  province: String

  """The ZIP code of the destination."""
  zip: String
}

"""
An auto-generated type which holds one FulfillmentOrder and a cursor during pagination.
"""
type FulfillmentOrderEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentOrderEdge."""
  node: FulfillmentOrder!
}

"""
The input fields for the fulfillment hold applied on the fulfillment order.
"""
input FulfillmentOrderHoldInput {
  """The reason for the fulfillment hold."""
  reason: FulfillmentHoldReason!

  """Additional information about the fulfillment hold reason."""
  reasonNotes: String

  """
  Whether the merchant receives a notification about the fulfillment hold. The default value is `false`.
  """
  notifyMerchant: Boolean = false

  """
  A configurable ID used to track the automation system releasing these holds.
  """
  externalId: String
}

"""Return type for `fulfillmentOrderHold` mutation."""
type FulfillmentOrderHoldPayload {
  """The fulfillment order on which a fulfillment hold was applied."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrderHoldUserError!]!
}

"""An error that occurs during the execution of `FulfillmentOrderHold`."""
type FulfillmentOrderHoldUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrderHoldUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrderHoldUserError`.
"""
enum FulfillmentOrderHoldUserErrorCode {
  """The fulfillment order could not be found."""
  FULFILLMENT_ORDER_NOT_FOUND

  """The input value is already taken."""
  TAKEN
}

"""The international duties relevant to a fulfillment order."""
type FulfillmentOrderInternationalDuties {
  """The method of duties payment. Example values: `DDP`, `DAP`."""
  incoterm: String!
}

"""
Associates an order line item with quantities requiring fulfillment from the respective fulfillment order.
"""
type FulfillmentOrderLineItem implements Node {
  """A globally-unique ID."""
  id: ID!

  """The image associated to the line item's variant."""
  image: Image

  """The associated order line item."""
  lineItem: LineItem! @deprecated(reason: "          As of API version 2023-01, this field has been deprecated. The order line item associated with a `FulfillmentOrderLineItem`\n          shouldn't be used to determine what to fulfill. Use the `FulfillmentOrderLineItem` and `FulfillmentOrder` objects\n          instead. An order `LineItem` represents a single line item on an order, but it doesn't represent what should be fulfilled.\n")

  """
  The variant unit price without discounts applied, in shop and presentment currencies.
  """
  originalUnitPriceSet: MoneyBag!

  """The title of the product."""
  productTitle: String!

  """The number of units remaining to be fulfilled."""
  remainingQuantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """The variant SKU number."""
  sku: String

  """The total number of units to be fulfilled."""
  totalQuantity: Int!

  """The name of the variant."""
  variantTitle: String

  """The name of the vendor who made the variant."""
  vendor: String

  """Warning messages for a fulfillment order line item."""
  warnings: [FulfillmentOrderLineItemWarning!]!

  """The weight of a line item unit."""
  weight: Weight
}

"""
An auto-generated type for paginating through multiple FulfillmentOrderLineItems.
"""
type FulfillmentOrderLineItemConnection {
  """A list of edges."""
  edges: [FulfillmentOrderLineItemEdge!]!

  """A list of the nodes contained in FulfillmentOrderLineItemEdge."""
  nodes: [FulfillmentOrderLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one FulfillmentOrderLineItem and a cursor during pagination.
"""
type FulfillmentOrderLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentOrderLineItemEdge."""
  node: FulfillmentOrderLineItem!
}

"""
The input fields used to include the quantity of the fulfillment order line item that should be fulfilled.
"""
input FulfillmentOrderLineItemInput {
  """The ID of the fulfillment order line item."""
  id: ID!

  """The quantity of the fulfillment order line item."""
  quantity: Int!
}

"""
The input fields used to include the line items of a specified fulfillment order that should be fulfilled.
"""
input FulfillmentOrderLineItemsInput {
  """The ID of the fulfillment order."""
  fulfillmentOrderId: ID!

  """
  The fulfillment order line items to be fulfilled.
  If left blank, all line items of the fulfillment order will be fulfilled.
  """
  fulfillmentOrderLineItems: [FulfillmentOrderLineItemInput!]
}

"""
The input fields for marking fulfillment order line items as ready for pickup.
"""
input FulfillmentOrderLineItemsPreparedForPickupInput {
  """
  The fulfillment orders associated with the line items which are ready to be picked up by a customer.
  """
  lineItemsByFulfillmentOrder: [PreparedFulfillmentOrderLineItemsInput!]!
}

"""Return type for `fulfillmentOrderLineItemsPreparedForPickup` mutation."""
type FulfillmentOrderLineItemsPreparedForPickupPayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrderLineItemsPreparedForPickupUserError!]!
}

"""
An error that occurs during the execution of `FulfillmentOrderLineItemsPreparedForPickup`.
"""
type FulfillmentOrderLineItemsPreparedForPickupUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrderLineItemsPreparedForPickupUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrderLineItemsPreparedForPickupUserError`.
"""
enum FulfillmentOrderLineItemsPreparedForPickupUserErrorCode {
  """
  The fulfillment order does not have any line items that can be prepared.
  """
  NO_LINE_ITEMS_TO_PREPARE_FOR_FULFILLMENT_ORDER

  """Unable to prepare quantity."""
  FULFILLMENT_ORDER_CHANGED @deprecated(reason: "This error code is deprecated and will be removed in the 2023-04 API version.\n")

  """Invalid fulfillment order ID provided."""
  FULFILLMENT_ORDER_INVALID
}

"""
A fulfillment order line item warning. For example, a warning about why a fulfillment request was rejected.
"""
type FulfillmentOrderLineItemWarning {
  """The description of warning."""
  description: String

  """The title of warning."""
  title: String
}

"""A location that a fulfillment order can potentially move to."""
type FulfillmentOrderLocationForMove {
  """
  The location being considered as the fulfillment order's new assigned location.
  """
  location: Location!

  """
  A human-readable string with the reason why the fulfillment order, or some of its line items, can't be
  moved to the location.
  """
  message: String

  """Whether the fulfillment order can be moved to the location."""
  movable: Boolean!
}

"""
An auto-generated type for paginating through multiple FulfillmentOrderLocationForMoves.
"""
type FulfillmentOrderLocationForMoveConnection {
  """A list of edges."""
  edges: [FulfillmentOrderLocationForMoveEdge!]!

  """A list of the nodes contained in FulfillmentOrderLocationForMoveEdge."""
  nodes: [FulfillmentOrderLocationForMove!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one FulfillmentOrderLocationForMove and a cursor during pagination.
"""
type FulfillmentOrderLocationForMoveEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentOrderLocationForMoveEdge."""
  node: FulfillmentOrderLocationForMove!
}

"""
A request made by the merchant or an order management app to a fulfillment service
for a fulfillment order.
"""
type FulfillmentOrderMerchantRequest implements Node {
  """The fulfillment order associated with the merchant request."""
  fulfillmentOrder: FulfillmentOrder!

  """A globally-unique ID."""
  id: ID!

  """The kind of request made."""
  kind: FulfillmentOrderMerchantRequestKind!

  """The optional message that the merchant included in the request."""
  message: String

  """
  Additional options requested by the merchant. These depend on the `kind` of the request.
  For example, for a `FULFILLMENT_REQUEST`, one option is `notify_customer`, which indicates whether the
  merchant intends to notify the customer upon fulfillment. The fulfillment service can then set
  `notifyCustomer` when making calls to `FulfillmentCreateV2`.
  """
  requestOptions: JSON

  """The response from the fulfillment service."""
  responseData: JSON

  """The timestamp when the request was made."""
  sentAt: DateTime!
}

"""
An auto-generated type for paginating through multiple FulfillmentOrderMerchantRequests.
"""
type FulfillmentOrderMerchantRequestConnection {
  """A list of edges."""
  edges: [FulfillmentOrderMerchantRequestEdge!]!

  """A list of the nodes contained in FulfillmentOrderMerchantRequestEdge."""
  nodes: [FulfillmentOrderMerchantRequest!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one FulfillmentOrderMerchantRequest and a cursor during pagination.
"""
type FulfillmentOrderMerchantRequestEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of FulfillmentOrderMerchantRequestEdge."""
  node: FulfillmentOrderMerchantRequest!
}

"""The kinds of request merchants can make to a fulfillment service."""
enum FulfillmentOrderMerchantRequestKind {
  """The merchant requests fulfillment for an `OPEN` fulfillment order."""
  FULFILLMENT_REQUEST

  """
  The merchant requests cancellation of an `IN_PROGRESS` fulfillment order.
  """
  CANCELLATION_REQUEST
}

"""Return type for `fulfillmentOrderMove` mutation."""
type FulfillmentOrderMovePayload {
  """
  The fulfillment order which now contains the moved line items and is assigned to the destination location.
  
  **First scenario:** All line items belonging to the original fulfillment order are re-assigned.
  
  In this case, this will be the original fulfillment order.
  
  **Second scenario:** A subset of the line items belonging to the original fulfillment order are re-assigned.
  
  If the new location is already assigned to fulfill line items on the order, then
  this will be an existing active fulfillment order.
  Otherwise, this will be a new fulfillment order with the moved line items assigned.
  """
  movedFulfillmentOrder: FulfillmentOrder

  """
  The final state of the original fulfillment order.
  
  As a result of the move operation, the original fulfillment order might be moved to the new location
  or remain in the original location. The original fulfillment order might have the same status or be closed.
  """
  originalFulfillmentOrder: FulfillmentOrder

  """This field is deprecated."""
  remainingFulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderOpen` mutation."""
type FulfillmentOrderOpenPayload {
  """
  The fulfillment order that was transitioned to open and is fulfillable.
  """
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderRejectCancellationRequest` mutation."""
type FulfillmentOrderRejectCancellationRequestPayload {
  """The fulfillment order whose cancellation request was rejected."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderRejectFulfillmentRequest` mutation."""
type FulfillmentOrderRejectFulfillmentRequestPayload {
  """The fulfillment order whose fulfillment request was rejected."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The reason for a fulfillment order rejection."""
enum FulfillmentOrderRejectionReason {
  """The fulfillment order was rejected because of an incorrect address."""
  INCORRECT_ADDRESS

  """The fulfillment order was rejected because inventory is out of stock."""
  INVENTORY_OUT_OF_STOCK

  """The fulfillment order was rejected because of an ineligible product."""
  INELIGIBLE_PRODUCT

  """
  The fulfillment order was rejected because of an undeliverable destination.
  """
  UNDELIVERABLE_DESTINATION

  """The fulfillment order was rejected for another reason."""
  OTHER
}

"""Return type for `fulfillmentOrderReleaseHold` mutation."""
type FulfillmentOrderReleaseHoldPayload {
  """The fulfillment order on which the hold was released."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrderReleaseHoldUserError!]!
}

"""
An error that occurs during the execution of `FulfillmentOrderReleaseHold`.
"""
type FulfillmentOrderReleaseHoldUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrderReleaseHoldUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrderReleaseHoldUserError`.
"""
enum FulfillmentOrderReleaseHoldUserErrorCode {
  """The fulfillment order wasn't found."""
  FULFILLMENT_ORDER_NOT_FOUND
}

"""The request status of a fulfillment order."""
enum FulfillmentOrderRequestStatus {
  """
  The initial request status for the newly-created fulfillment orders. This is the only valid
  request status for fulfillment orders that aren't assigned to a fulfillment service.
  """
  UNSUBMITTED

  """The merchant requested fulfillment for this fulfillment order."""
  SUBMITTED

  """The fulfillment service accepted the merchant's fulfillment request."""
  ACCEPTED

  """The fulfillment service rejected the merchant's fulfillment request."""
  REJECTED

  """
  The merchant requested a cancellation of the fulfillment request for this fulfillment order.
  """
  CANCELLATION_REQUESTED

  """
  The fulfillment service accepted the merchant's fulfillment cancellation request.
  """
  CANCELLATION_ACCEPTED

  """
  The fulfillment service rejected the merchant's fulfillment cancellation request.
  """
  CANCELLATION_REJECTED

  """
  The fulfillment service closed the fulfillment order without completing it.
  """
  CLOSED
}

"""Return type for `fulfillmentOrderReschedule` mutation."""
type FulfillmentOrderReschedulePayload {
  """The fulfillment order that was rescheduled."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrderRescheduleUserError!]!
}

"""
An error that occurs during the execution of `FulfillmentOrderReschedule`.
"""
type FulfillmentOrderRescheduleUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrderRescheduleUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrderRescheduleUserError`.
"""
enum FulfillmentOrderRescheduleUserErrorCode {
  """Fulfillment order could not be found."""
  FULFILLMENT_ORDER_NOT_FOUND
}

"""The set of valid sort keys for the FulfillmentOrder query."""
enum FulfillmentOrderSortKeys {
  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `fulfillmentOrdersReleaseHolds` mutation."""
type FulfillmentOrdersReleaseHoldsPayload {
  """The asynchronous job that will release the fulfillment holds."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrdersReleaseHoldsUserError!]!
}

"""
An error that occurs during the execution of `FulfillmentOrdersReleaseHolds`.
"""
type FulfillmentOrdersReleaseHoldsUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrdersReleaseHoldsUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrdersReleaseHoldsUserError`.
"""
enum FulfillmentOrdersReleaseHoldsUserErrorCode {
  """Failed to create release fulfillment order holds job."""
  FAILED_TO_CREATE_JOB
}

"""Return type for `fulfillmentOrdersSetFulfillmentDeadline` mutation."""
type FulfillmentOrdersSetFulfillmentDeadlinePayload {
  """Whether the fulfillment deadline was successfully set."""
  success: Boolean

  """The list of errors that occurred from executing the mutation."""
  userErrors: [FulfillmentOrdersSetFulfillmentDeadlineUserError!]!
}

"""
An error that occurs during the execution of `FulfillmentOrdersSetFulfillmentDeadline`.
"""
type FulfillmentOrdersSetFulfillmentDeadlineUserError implements DisplayableError {
  """The error code."""
  code: FulfillmentOrdersSetFulfillmentDeadlineUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `FulfillmentOrdersSetFulfillmentDeadlineUserError`.
"""
enum FulfillmentOrdersSetFulfillmentDeadlineUserErrorCode {
  """The fulfillment orders could not be found."""
  FULFILLMENT_ORDERS_NOT_FOUND
}

"""The status of a fulfillment order."""
enum FulfillmentOrderStatus {
  """The fulfillment order is ready for fulfillment."""
  OPEN

  """The fulfillment order is being processed."""
  IN_PROGRESS

  """The fulfillment order has been cancelled by the merchant."""
  CANCELLED

  """The fulfillment order cannot be completed as requested."""
  INCOMPLETE

  """The fulfillment order has been completed and closed."""
  CLOSED

  """
  The fulfillment order is deferred and will be ready for fulfillment after the date and time specified in `fulfill_at`.
  """
  SCHEDULED

  """
  The fulfillment order is on hold. The fulfillment process can't be initiated
  until the hold on the fulfillment order is released.
  """
  ON_HOLD
}

"""Return type for `fulfillmentOrderSubmitCancellationRequest` mutation."""
type FulfillmentOrderSubmitCancellationRequestPayload {
  """The fulfillment order specified in the cancelation request."""
  fulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentOrderSubmitFulfillmentRequest` mutation."""
type FulfillmentOrderSubmitFulfillmentRequestPayload {
  """The original fulfillment order intended to request fulfillment for."""
  originalFulfillmentOrder: FulfillmentOrder

  """
  The fulfillment order that was submitted to the fulfillment service. This will be the same as
  the original fulfillment order field. The exception to this is partial fulfillment requests or
  fulfillment request for cancelled or incomplete fulfillment orders.
  """
  submittedFulfillmentOrder: FulfillmentOrder

  """
  This field will only be present for partial fulfillment requests. This will represent the new
  fulfillment order with the remaining line items not submitted to the fulfillment service.
  """
  unsubmittedFulfillmentOrder: FulfillmentOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
One of the actions that the fulfillment order supports in its current state.
"""
type FulfillmentOrderSupportedAction {
  """The action value."""
  action: FulfillmentOrderAction!

  """
  The external URL to be used to initiate the fulfillment process outside Shopify.
  Applicable only when the `action` value is `EXTERNAL`.
  """
  externalUrl: URL
}

"""
The address at which the fulfillment occurred. Typically this is the address of the warehouse or fulfillment center.
"""
type FulfillmentOriginAddress {
  """The street address of the fulfillment location."""
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The city in which the fulfillment location is located."""
  city: String

  """The country code of the fulfillment location."""
  countryCode: String!

  """The province code of the fulfillment location."""
  provinceCode: String

  """The zip code of the fulfillment location."""
  zip: String
}

"""
The input fields used to include the address at which the fulfillment occurred.
Typically the address of a warehouse or a fulfillment center.
"""
input FulfillmentOriginAddressInput {
  """The street address of the fulfillment location."""
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The city in which the fulfillment location is located."""
  city: String

  """The zip code of the fulfillment location."""
  zip: String

  """The province of the fulfillment location."""
  provinceCode: String

  """The country of the fulfillment location."""
  countryCode: String!
}

"""
A **Fulfillment Service** is a third party warehouse that prepares and ships orders
on behalf of the store owner. Fulfillment services charge a fee to package and ship items
and update product inventory levels. Some well known fulfillment services with Shopify integrations
include: Amazon, Shipwire, and Rakuten. When an app registers a new `FulfillmentService` on a store,
Shopify automatically creates a `Location` that's associated to the fulfillment service.
To learn more about fulfillment services, refer to
[Manage fulfillments as a fulfillment service app](https://shopify.dev/apps/fulfillment/fulfillment-service-apps)
guide.

## Mutations

You can work with the `FulfillmentService` object with the
[fulfillmentServiceCreate](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentServiceCreate),
[fulfillmentServiceUpdate](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentServiceUpdate),
and [fulfillmentServiceDelete](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentServiceDelete)
mutations.

## Hosted endpoints

Fulfillment service providers integrate with Shopify by providing Shopify with a set of hosted endpoints that
Shopify can query on certain conditions.
These endpoints must have a common prefix, and this prefix should be supplied in the `callbackUrl` parameter
in the
[fulfillmentServiceCreate](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentServiceCreate)
mutation.

- Shopify sends POST requests to the `<callbackUrl>/fulfillment_order_notification` endpoint
  to notify the fulfillment service about fulfillment requests and fulfillment cancellation requests,
  if `fulfillment_orders_opt_in` is set to `true`.

  [As of the 2022-07 API version](https://shopify.dev/changelog/legacy-fulfillment-api-deprecation),
  it's mandatory for a fulfillment service to follow a fulfillment order based workflow by
  having `fulfillment_orders_opt_in` set to `true`,
  hosting the `<callbackUrl>/fulfillment_order_notification` endpoint, and acting on fulfillment requests and cancellations.

  For more information, refer to
  [Receive fulfillment requests and cancellations](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-2-receive-fulfillment-requests-and-cancellations).
- Shopify sends GET requests to the `<callbackUrl>/fetch_tracking_numbers` endpoint to retrieve tracking numbers for orders,
  if `trackingSupport` is set to `true`.

  For more information, refer to
  [Enable tracking support](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-8-enable-tracking-support-optional).

  Fulfillment services can also update tracking information with the
  [fulfillmentTrackingInfoUpdateV2](https://shopify.dev/api/admin-graphql/latest/mutations/fulfillmentTrackingInfoUpdateV2) mutation,
  rather than waiting for Shopify to ask for tracking numbers.
- Shopify sends GET requests to the `<callbackUrl>/fetch_stock` endpoint to retrieve inventory levels,
  if `inventoryManagement` is set to `true`.

  For more information, refer to
  [Sharing inventory levels with Shopify](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-9-share-inventory-levels-with-shopify-optional).

To make sure you have everything set up correctly, you can test the `callbackUrl`-prefixed endpoints
in your development store.

## Resources and webhooks

There are a variety of objects and webhooks that enable a fulfillment service to work.
To exchange fulfillment information with Shopify, fulfillment services use the
[FulfillmentOrder](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder),
[Fulfillment](https://shopify.dev/api/admin-graphql/latest/objects/Fulfillment) and
[Order](https://shopify.dev/api/admin-graphql/latest/objects/Order) objects and related mutations.
To act on fulfillment process events that happen on the Shopify side,
besides awaiting calls to `callbackUrl`-prefixed endpoints,
fulfillment services can subscribe to the
[fulfillment order](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#webhooks)
and [order](https://shopify.dev/api/admin-rest/latest/resources/webhook)
webhooks.
"""
type FulfillmentService {
  """
  The callback URL that the fulfillment service has registered for requests. The following considerations apply:
  
  - Shopify queries the `<callbackUrl>/fetch_tracking_numbers` endpoint to retrieve tracking numbers
      for orders, if `trackingSupport` is set to `true`.
  - Shopify queries the `<callbackUrl>/fetch_stock` endpoint to retrieve inventory levels,
      if `inventoryManagement` is set to `true`.
  - Shopify uses the `<callbackUrl>/fulfillment_order_notification` endpoint to send
      [fulfillment and cancellation requests](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-2-receive-fulfillment-requests-and-cancellations),
      if the fulfillment service has opted in to the fulfillment order based workflow for managing fulfillments
      (`fulfillmentOrdersOptIn` is set to `true`).
  """
  callbackUrl: URL

  """
  Whether the fulfillment service uses the [fulfillment order based workflow](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments)
  for managing fulfillments.
  """
  fulfillmentOrdersOptIn: Boolean!

  """Human-readable unique identifier for this fulfillment service."""
  handle: String!

  """The ID of the fulfillment service."""
  id: ID!

  """
  Whether the fulfillment service tracks product inventory and provides updates to Shopify.
  """
  inventoryManagement: Boolean!

  """Location associated with the fulfillment service."""
  location: Location

  """
  Whether the fulfillment service can stock inventory alongside other locations.
  """
  permitsSkuSharing: Boolean!

  """Whether the fulfillment service supports local deliveries."""
  productBased: Boolean!

  """The name of the fulfillment service as seen by merchants."""
  serviceName: String!

  """
  Shipping methods associated with the fulfillment service provider. Applies only to Fulfill By Amazon fulfillment service.
  """
  shippingMethods: [ShippingMethod!]! @deprecated(reason: "The Fulfillment by Amazon feature will no longer be supported from March 30, 2023. To continue using Amazon fulfillment, merchants need to set up a Multi-Channel Fulfillment solution recommended by Amazon: https://help.shopify.com/manual/shipping/fulfillment-services/amazon#activate-fulfillment-by-amazon")

  """Type associated with the fulfillment service."""
  type: FulfillmentServiceType!
}

"""Return type for `fulfillmentServiceCreate` mutation."""
type FulfillmentServiceCreatePayload {
  """The created fulfillment service."""
  fulfillmentService: FulfillmentService

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `fulfillmentServiceDelete` mutation."""
type FulfillmentServiceDeletePayload {
  """The ID of the deleted fulfillment service."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The type of a fulfillment service."""
enum FulfillmentServiceType {
  """Fulfillment by gift card."""
  GIFT_CARD

  """Manual fulfillment by the merchant."""
  MANUAL

  """Fullfillment by a third-party fulfillment service."""
  THIRD_PARTY
}

"""Return type for `fulfillmentServiceUpdate` mutation."""
type FulfillmentServiceUpdatePayload {
  """The updated fulfillment service."""
  fulfillmentService: FulfillmentService

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The status of a fulfillment."""
enum FulfillmentStatus {
  """
  Shopify has created the fulfillment and is waiting for the third-party
  fulfillment service to transition it to `open` or `success`.
  """
  PENDING @deprecated(reason: "This is a legacy status and is due to be deprecated.")

  """
  The third-party fulfillment service has acknowledged the fulfillment and is processing it.
  """
  OPEN @deprecated(reason: "This is a legacy status and is due to be deprecated.")

  """The fulfillment was completed successfully."""
  SUCCESS

  """The fulfillment was canceled."""
  CANCELLED

  """There was an error with the fulfillment request."""
  ERROR

  """The fulfillment request failed."""
  FAILURE
}

"""Represents the tracking information for a fulfillment."""
type FulfillmentTrackingInfo {
  """
  The name of the tracking company.
  
  For tracking company names from the list below
  Shopify will automatically build tracking URLs for all provided tracking numbers,
  which will make the tracking numbers clickable in the interface.
  
  Additionally, for the tracking companies listed on the
  [Shipping Carriers help page](https://help.shopify.com/manual/shipping/understanding-shipping/shipping-carriers#integrated-shipping-carriers)
  Shopify will automatically update the fulfillment's `shipment_status` field during the fulfillment process.
  
  ### Supported tracking companies
  
  The following tracking companies display for shops located in any country:
  
    * 4PX
    * AGS
    * Amazon Logistics UK
    * Amazon Logistics US
    * An Post
    * Anjun Logistics
    * APC
    * Asendia USA
    * Australia Post
    * Bonshaw
    * BPost
    * BPost International
    * Canada Post
    * Canpar
    * CDL Last Mile
    * China Post
    * Chronopost
    * Chukou1
    * Colissimo
    * Comingle
    * Coordinadora
    * Correios
    * Correos
    * CTT
    * CTT Express
    * Cyprus Post
    * Delnext
    * Deutsche Post
    * DHL eCommerce
    * DHL eCommerce Asia
    * DHL Express
    * DoorDash
    * DPD
    * DPD Local
    * DPD UK
    * DTD Express
    * DX
    * Eagle
    * Estes
    * Evri
    * FedEx
    * First Global Logistics
    * First Line
    * FSC
    * Fulfilla
    * GLS
    * Guangdong Weisuyi Information Technology (WSE)
    * Heppner Internationale Spedition GmbH & Co.
    * Iceland Post
    * IDEX
    * Israel Post
    * Japan Post (EN)
    * Japan Post (JA)
    * La Poste
    * Lasership
    * Latvia Post
    * Lietuvos Paštas
    * Logisters
    * Lone Star Overnight
    * M3 Logistics
    * Meteor Space
    * Mondial Relay
    * New Zealand Post
    * NinjaVan
    * North Russia Supply Chain (Shenzhen) Co.
    * OnTrac
    * Packeta
    * Pago Logistics
    * Ping An Da Tengfei Express
    * Pitney Bowes
    * Portal PostNord
    * Poste Italiane
    * PostNL
    * PostNord DK
    * PostNord NO
    * PostNord SE
    * Purolator
    * Qxpress
    * Qyun Express
    * Royal Mail
    * Royal Shipments
    * Sagawa (EN)
    * Sagawa (JA)
    * Sendle
    * SF Express
    * SFC Fulfillment
    * SHREE NANDAN COURIER
    * Singapore Post
    * Southwest Air Cargo
    * StarTrack
    * Step Forward Freight
    * Swiss Post
    * TForce Final Mile
    * Tinghao
    * TNT
    * Toll IPEC
    * United Delivery Service
    * UPS
    * USPS
    * Venipak
    * We Post
    * Whistl
    * Wizmo
    * WMYC
    * Xpedigo
    * XPO Logistics
    * Yamato (EN)
    * Yamato (JA)
    * YiFan Express
    * YunExpress
  
  The following tracking companies are displayed for shops located in specific countries:
  
    * **Australia**: Australia Post, Sendle, Aramex Australia, TNT Australia,
  Hunter Express, Couriers Please, Bonds, Allied Express, Direct Couriers,
  Northline, GO Logistics
    * **Austria**: Österreichische Post
    * **Bulgaria**: Speedy
    * **Canada**: Intelcom, BoxKnight, Loomis, GLS
    * **China**: China Post, DHL eCommerce Asia, WanbExpress, YunExpress, Anjun Logistics, SFC Fulfillment, FSC
    * **Czechia**: Zásilkovna
    * **Germany**: Deutsche Post (DE), Deutsche Post (EN), DHL, DHL Express, Swiship, Hermes, GLS
    * **Spain**: SEUR
    * **France**: Colissimo, Mondial Relay, Colis Privé, GLS
    * **United Kingdom**: Evri, DPD UK, Parcelforce, Yodel, DHL Parcel, Tuffnells
    * **Greece**: ACS Courier
    * **Hong Kong SAR**: SF Express
    * **Ireland**: Fastway, DPD Ireland
    * **India**: DTDC, India Post, Delhivery, Gati KWE, Professional Couriers,
  XpressBees, Ecom Express, Ekart, Shadowfax, Bluedart
    * **Italy**: BRT, GLS Italy
    * **Japan**: エコ配, 西濃運輸, 西濃スーパーエキスプレス, 福山通運, 日本通運, 名鉄運輸, 第一貨物
    * **Netherlands**: DHL Parcel, DPD
    * **Norway**: Bring
    * **Poland**: Inpost
    * **Turkey**: PTT, Yurtiçi Kargo, Aras Kargo, Sürat Kargo
    * **United States**: GLS, Alliance Air Freight, Pilot Freight, LSO, Old Dominion, R+L Carriers, Southwest Air Cargo
    * **South Africa**: Fastway, Skynet.
  """
  company: String

  """
  The tracking number of the fulfillment.
  
  The tracking number is clickable in the interface if one of the following applies
  (the highest in the list has the highest priority):
  
  * Tracking url provided in the `url` field.
  * [Shopify-known tracking company name](#supported-tracking-companies) specified in the `company` field.
    Shopify will build the tracking URL automatically based on the tracking number specified.
  * The tracking number has a Shopify-known format.
    Shopify will guess the tracking provider and build the tracking url based on the tracking number format.
    Not all tracking carriers are supported, and multiple tracking carriers may use similarly formatted tracking numbers.
    This can result in an invalid tracking URL.
    It is highly recommended that you send the tracking company and the tracking URL.
  """
  number: String

  """
  The URLs to track the fulfillment.
  
  The tracking URL is displayed in the merchant's admin on the order page.
  The tracking URL is displayed in the shipping confirmation email, which can optionally be sent to the customer.
  When accounts are enabled, it's also displayed in the customer's order history.
  """
  url: URL
}

"""Return type for `fulfillmentTrackingInfoUpdateV2` mutation."""
type FulfillmentTrackingInfoUpdateV2Payload {
  """The updated fulfillment with tracking information."""
  fulfillment: Fulfillment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields that specify all possible fields for tracking information.

> Note:
> If you provide the `url` field, you should not provide the `urls` field.
>
> If you provide the `number` field, you should not provide the `numbers` field.
>
> If you provide the `url` field, you should provide the `number` field.
>
> If you provide the `urls` field, you should provide the `numbers` field.
"""
input FulfillmentTrackingInput {
  """
  The tracking number of the fulfillment.
  
  The tracking number will be clickable in the interface if one of the following applies
  (the highest in the list has the highest priority):
  
  * Tracking url provided in the `url` field.
  * [Shopify-known tracking company name](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentTrackingInfo#supported-tracking-companies)
    specified in the `company` field.
    Shopify will build the tracking URL automatically based on the tracking number specified.
  * The tracking number has a Shopify-known format.
    Shopify will guess the tracking provider and build the tracking url based on the tracking number format.
    Not all tracking carriers are supported, and multiple tracking carriers may use similarly formatted tracking numbers.
    This can result in an invalid tracking URL.
    It is highly recommended that you send the tracking company and the tracking URL.
  """
  number: String

  """
  The URL to track the fulfillment.
  
  The tracking URL is displayed in the merchant's admin on the order page.
  The tracking URL is displayed in the shipping confirmation email, which can optionally be sent to the customer.
  When accounts are enabled, it's also displayed in the customer's order history.
  
  The URL must be an [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) and
  [RFC 3987](https://datatracker.ietf.org/doc/html/rfc3987)-compliant URI string.
  For example, `"https://www.myshipping.com/track/?tracknumbers=TRACKING_NUMBER"` is a valid URL.
  It includes a scheme (`https`) and a host (`myshipping.com`).
  """
  url: URL

  """
  The name of the tracking company.
  
  If you specify a tracking company name from
  [the list](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentTrackingInfo#supported-tracking-companies),
  Shopify will automatically build tracking URLs for all provided tracking numbers,
  which will make the tracking numbers clickable in the interface.
  The same tracking company will be applied to all tracking numbers specified.
  
  Additionally, for the tracking companies listed on the
  [Shipping Carriers help page](https://help.shopify.com/manual/shipping/understanding-shipping/shipping-carriers#integrated-shipping-carriers)
  Shopify will automatically update the fulfillment's `shipment_status` field during the fulfillment process.
  
  > Note:
  > Send the tracking company name exactly as written in
  > [the list](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentTrackingInfo#supported-tracking-companies)
  > (capitalization matters).
  """
  company: String

  """
  The tracking numbers of the fulfillment, one or many.
  
  With multiple tracking numbers, you can provide tracking information
  for all shipments associated with the fulfillment, if there are more than one.
  For example, if you're shipping assembly parts of one furniture item in several boxes.
  
  Tracking numbers will be clickable in the interface if one of the following applies
  (the highest in the list has the highest priority):
  
  * Tracking URLs provided in the `urls` field.
    The tracking URLs will be matched to the tracking numbers based on their positions in the arrays.
  * [Shopify-known tracking company name](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentTrackingInfo#supported-tracking-companies)
    specified in the `company` field.
    Shopify will build tracking URLs automatically for all tracking numbers specified.
    The same tracking company will be applied to all tracking numbers.
  * Tracking numbers have a Shopify-known format.
    Shopify will guess tracking providers and build tracking URLs based on the tracking number formats.
    Not all tracking carriers are supported, and multiple tracking carriers may use similarly formatted tracking numbers.
    This can result in an invalid tracking URL.
    It is highly recommended that you send the tracking company and the tracking URLs.
  """
  numbers: [String!]

  """
  The URLs to track the fulfillment, one or many.
  
  The tracking URLs are displayed in the merchant's admin on the order page.
  The tracking URLs are displayed in the shipping confirmation email, which can optionally be sent to the customer.
  When accounts are enabled, the tracking URLs are also displayed in the customer's order history.
  
  If you're not specifying a
  [Shopify-known](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentTrackingInfo#supported-tracking-companies)
  tracking company name in the `company` field,
  then provide tracking URLs for all tracking numbers from the `numbers` field.
  
  Tracking URLs from the `urls` array field are being matched with the tracking numbers from the `numbers` array
  field correspondingly their positions in the arrays.
  
  Each URL must be an [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) and
  [RFC 3987](https://datatracker.ietf.org/doc/html/rfc3987)-compliant URI string.
  For example, `"https://www.myshipping.com/track/?tracknumbers=TRACKING_NUMBER"` is a valid URL.
  It includes a scheme (`https`) and a host (`myshipping.com`).
  """
  urls: [URL!]
}

"""The input fields used to create a fulfillment from fulfillment orders."""
input FulfillmentV2Input {
  """
  The fulfillment's tracking information, including a tracking URL, a tracking number,
  and the company associated with the fulfillment.
  """
  trackingInfo: FulfillmentTrackingInput

  """
  Whether the customer is notified.
  If `true`, then a notification is sent when the fulfillment is created. The default value is `false`.
  """
  notifyCustomer: Boolean = false

  """
  Pairs of `fulfillment_order_id` and `fulfillment_order_line_items` that represent the fulfillment
  order line items that have to be fulfilled for each fulfillment order.  For any given pair, if the
  fulfillment order line items are left blank then all the fulfillment order line items of the
  associated fulfillment order ID will be fulfilled.
  """
  lineItemsByFulfillmentOrder: [FulfillmentOrderLineItemsInput!]!

  """
  Address information about the location from which the order was fulfilled.
  """
  originAddress: FulfillmentOriginAddressInput
}

"""The App Bridge information for a Shopify Function."""
type FunctionsAppBridge {
  """The relative path for creating a customization."""
  createPath: String!

  """The relative path for viewing a customization."""
  detailsPath: String!
}

"""The error history from running a Shopify Function."""
type FunctionsErrorHistory {
  """The date and time that the first error occurred."""
  errorsFirstOccurredAt: DateTime!

  """The date and time that the first error occurred."""
  firstOccurredAt: DateTime!

  """
  Whether the merchant has shared all the recent errors with the developer.
  """
  hasBeenSharedSinceLastError: Boolean!

  """
  Whether the merchant has shared all the recent errors with the developer.
  """
  hasSharedRecentErrors: Boolean!
}

"""Represents any file other than HTML."""
type GenericFile implements File & Node {
  """A word or phrase to describe the contents or the function of a file."""
  alt: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the file was created.
  """
  createdAt: DateTime!

  """Any errors that have occurred on the file."""
  fileErrors: [FileError!]!

  """The status of the file."""
  fileStatus: FileStatus!

  """A globally-unique ID."""
  id: ID!

  """The generic file's MIME type."""
  mimeType: String

  """The generic file's size in bytes."""
  originalFileSize: Int

  """The preview image for the media."""
  preview: MediaPreviewImage

  """The generic file's URL."""
  url: URL
}

"""Represents an issued gift card."""
type GiftCard implements Node {
  """The gift card's remaining balance."""
  balance: MoneyV2!

  """The date and time at which the gift card was created."""
  createdAt: DateTime!

  """The customer who will receive the gift card."""
  customer: Customer

  """The date and time at which the gift card was disabled."""
  disabledAt: DateTime

  """Whether the gift card is enabled."""
  enabled: Boolean!

  """The date at which the gift card will expire."""
  expiresOn: Date

  """A globally-unique ID."""
  id: ID!

  """The initial value of the gift card."""
  initialValue: MoneyV2!

  """The final four characters of the gift card code."""
  lastCharacters: String!

  """
  The gift card code. Everything but the final four characters is masked.
  """
  maskedCode: String!

  """
  The note associated with the gift card, which isn't visible to the customer.
  """
  note: String

  """
  The order associated with the gift card. This value is `null` if the gift card was issued manually.
  """
  order: Order
}

"""An auto-generated type for paginating through multiple GiftCards."""
type GiftCardConnection {
  """A list of edges."""
  edges: [GiftCardEdge!]!

  """A list of the nodes contained in GiftCardEdge."""
  nodes: [GiftCard!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields to issue a gift card."""
input GiftCardCreateInput {
  """The initial value of the gift card."""
  initialValue: Decimal!

  """
  The gift card's code. It must be 8-20 characters long and contain only letters(a-z) and numbers(0-9).
  It isn't case sensitive. If not provided, then a random code will be generated.
  """
  code: String

  """
  The ID of the customer who will receive the gift card. Requires `write_customers` access_scope.
  """
  customerId: ID

  """
  The date at which the gift card will expire. If not provided, then the gift card will never expire.
  """
  expiresOn: Date

  """
  The note associated with the gift card, which isn't visible to the customer.
  """
  note: String

  """
  The suffix of the Liquid template that's used to render the gift card online.
  For example, if the value is `birthday`, then the gift card is rendered using the template `gift_card.birthday.liquid`.
  If not provided, then the default `gift_card.liquid` template is used.
  """
  templateSuffix: String
}

"""Return type for `giftCardCreate` mutation."""
type GiftCardCreatePayload {
  """The created gift card."""
  giftCard: GiftCard

  """The created gift card's code."""
  giftCardCode: String

  """The list of errors that occurred from executing the mutation."""
  userErrors: [GiftCardUserError!]!
}

"""Return type for `giftCardDisable` mutation."""
type GiftCardDisablePayload {
  """The disabled gift card."""
  giftCard: GiftCard

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one GiftCard and a cursor during pagination.
"""
type GiftCardEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of GiftCardEdge."""
  node: GiftCard!
}

"""Possible error codes that can be returned by `GiftCardUserError`."""
enum GiftCardErrorCode {
  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The input value is already taken."""
  TAKEN

  """The input value is invalid."""
  INVALID

  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Missing a required argument."""
  MISSING_ARGUMENT

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN
}

"""A sale associated with a gift card."""
type GiftCardSale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line item for the associated sale."""
  lineItem: LineItem!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""The set of valid sort keys for the GiftCard query."""
enum GiftCardSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `customer_name` value."""
  CUSTOMER_NAME

  """Sort by the `code` value."""
  CODE

  """Sort by the `balance` value."""
  BALANCE

  """Sort by the `amount_spent` value."""
  AMOUNT_SPENT

  """Sort by the `initial_value` value."""
  INITIAL_VALUE

  """Sort by the `disabled_at` value."""
  DISABLED_AT

  """Sort by the `expires_on` value."""
  EXPIRES_ON

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The input fields to update a gift card."""
input GiftCardUpdateInput {
  """
  The note associated with the gift card, which isn't visible to the customer.
  """
  note: String

  """
  The date at which the gift card will expire. If set to `null`, then the gift card will never expire.
  """
  expiresOn: Date

  """
  The ID of the customer who will receive the gift card. The ID can't be changed
  if the gift card already has an assigned customer ID.
  """
  customerId: ID

  """
  The suffix of the Liquid template that's used to render the gift card online.
  For example, if the value is `birthday`, then the gift card is rendered using the template `gift_card.birthday.liquid`.
  """
  templateSuffix: String
}

"""Return type for `giftCardUpdate` mutation."""
type GiftCardUpdatePayload {
  """The updated gift card."""
  giftCard: GiftCard

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Represents an error that happens during the execution of a gift card mutation.
"""
type GiftCardUserError implements DisplayableError {
  """The error code."""
  code: GiftCardErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents an object that has a list of events."""
interface HasEvents {
  """The paginated list of events associated with the host subject."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!
}

"""
Localization extensions associated with the specified resource. For example, the tax id for government invoice.
"""
interface HasLocalizationExtensions {
  """List of localization extensions for the resource."""
  localizationExtensions(
    """The country codes of the extensions."""
    countryCodes: [CountryCode!]

    """The purpose of the extensions."""
    purposes: [LocalizationExtensionPurpose!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LocalizationExtensionConnection!
}

"""Resources that metafield definitions can be applied to."""
interface HasMetafieldDefinitions {
  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!
}

"""
Represents information about the metafields associated to the specified resource.
"""
interface HasMetafields {
  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")
}

"""Published translations associated with the resource."""
interface HasPublishedTranslations {
  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!
}

"""
A string containing HTML code. Refer to the [HTML spec](https://html.spec.whatwg.org/#elements-3) for a
complete list of HTML elements.

Example value: `"<p>Grey cotton knit sweater.</p>"`
"""
scalar HTML

"""Represents an image resource."""
type Image implements HasMetafields {
  """A word or phrase to share the nature or contents of an image."""
  altText: String

  """
  The original height of the image in pixels. Returns `null` if the image isn't hosted by Shopify.
  """
  height: Int

  """A unique ID for the image."""
  id: ID

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  The location of the original image as a URL.
  
  If there are any existing transformations in the original source URL, they will remain and not be stripped.
  """
  originalSrc: URL! @deprecated(reason: "Use `url` instead.")

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The location of the image as a URL."""
  src: URL! @deprecated(reason: "Use `url` instead.")

  """
  The location of the transformed image as a URL.
  
  All transformation arguments are considered "best-effort". If they can be applied to an image, they will be.
  Otherwise any transformations which an image type doesn't support will be ignored.
  """
  transformedSrc(
    """Image width in pixels between 1 and 5760."""
    maxWidth: Int

    """Image height in pixels between 1 and 5760."""
    maxHeight: Int

    """Crops the image according to the specified region."""
    crop: CropRegion

    """
    Image size multiplier for high-resolution retina displays. Must be between 1 and 3.
    """
    scale: Int = 1

    """
    Best effort conversion of image into content type (SVG -> PNG, Anything -> JPG, Anything -> WEBP are supported).
    """
    preferredContentType: ImageContentType
  ): URL! @deprecated(reason: "Use `url(transform:)` instead")

  """
  The location of the image as a URL.
  
  If no transform options are specified, then the original image will be preserved including any pre-applied transforms.
  
  All transformation options are considered "best-effort". Any transformation
  that the original image type doesn't support will be ignored.
  
  If you need multiple variations of the same image, then you can use [GraphQL
  aliases](https://graphql.org/learn/queries/#aliases).
  """
  url(
    """A set of options to transform the original image."""
    transform: ImageTransformInput
  ): URL!

  """
  The original width of the image in pixels. Returns `null` if the image isn't hosted by Shopify.
  """
  width: Int
}

"""An auto-generated type for paginating through multiple Images."""
type ImageConnection {
  """A list of edges."""
  edges: [ImageEdge!]!

  """A list of the nodes contained in ImageEdge."""
  nodes: [Image!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""List of supported image content types."""
enum ImageContentType {
  """A PNG image."""
  PNG

  """A JPG image."""
  JPG

  """A WEBP image."""
  WEBP
}

"""
An auto-generated type which holds one Image and a cursor during pagination.
"""
type ImageEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ImageEdge."""
  node: Image!
}

"""The input fields for an image."""
input ImageInput {
  """A globally-unique ID."""
  id: ID

  """A word or phrase to share the nature or contents of an image."""
  altText: String

  """The URL of the image. May be a staged upload URL."""
  src: String
}

"""
The available options for transforming an image.

All transformation options are considered best effort. Any transformation that
the original image type doesn't support will be ignored.
"""
input ImageTransformInput {
  """
  The region of the image to remain after cropping.
  Must be used in conjunction with the `maxWidth` and/or `maxHeight` fields,
  where the `maxWidth` and `maxHeight` aren't equal.
  The `crop` argument should coincide with the smaller value. A smaller `maxWidth` indicates a `LEFT` or `RIGHT` crop, while
  a smaller `maxHeight` indicates a `TOP` or `BOTTOM` crop. For example, `{
  maxWidth: 5, maxHeight: 10, crop: LEFT }` will result
  in an image with a width of 5 and height of 10, where the right side of the image is removed.
  """
  crop: CropRegion

  """Image width in pixels between 1 and 5760."""
  maxWidth: Int

  """Image height in pixels between 1 and 5760."""
  maxHeight: Int

  """
  Image size multiplier for high-resolution retina displays. Must be within 1..3.
  """
  scale: Int = 1

  """
  Convert the source image into the preferred content type.
  Supported conversions: `.svg` to `.png`, any file type to `.jpg`, and any file type to `.webp`.
  """
  preferredContentType: ImageContentType
}

"""
A parameter to upload an image.

Deprecated in favor of
[StagedUploadParameter](https://shopify.dev/api/admin-graphql/latest/objects/StagedUploadParameter),
which is used in
[StagedMediaUploadTarget](https://shopify.dev/api/admin-graphql/latest/objects/StagedMediaUploadTarget)
and returned by the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stagedUploadsCreate).
"""
type ImageUploadParameter {
  """The parameter name."""
  name: String!

  """The parameter value."""
  value: String!
}

"""The input fields for the incoming line item."""
input IncomingRequestLineItemInput {
  """The ID of the rejected line item."""
  fulfillmentOrderLineItemId: ID!

  """The rejection message of the line item."""
  message: String
}

"""Return type for `inventoryActivate` mutation."""
type InventoryActivatePayload {
  """The inventory level that was activated."""
  inventoryLevel: InventoryLevel

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for items and their adjustments."""
input InventoryAdjustItemInput {
  """ID of the inventory item to adjust."""
  inventoryItemId: ID!

  """
  The change applied to the `available` quantity of the item at the location.
  """
  availableDelta: Int!
}

"""Represents a group of adjustments made as part of the same operation."""
type InventoryAdjustmentGroup implements Node {
  """The app that triggered the inventory event, if one exists."""
  app: App

  """
  The set of inventory quantity changes that occurred in the inventory event.
  """
  changes(
    """The IDs of the inventory items to filter changes by."""
    inventoryItemIds: [ID!]

    """The IDs of the locations to filter changes by."""
    locationIds: [ID!]

    """The names of the requested inventory quantities."""
    quantityNames: [String!]
  ): [InventoryChange!]!

  """The date and time the inventory adjustment group was created."""
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The reason for the group of adjustments."""
  reason: String!

  """
  The reference document URI for the changes. Denotes what's causing the change.
  """
  referenceDocumentUri: String

  """The staff member associated with the inventory event."""
  staffMember: StaffMember
}

"""The input fields required to adjust inventory quantities."""
input InventoryAdjustQuantitiesInput {
  """The reason for the quantity changes."""
  reason: String!

  """The quantity name to be adjusted."""
  name: String!

  """
  The reference document URI for the changes. Used to denote what's causing the change.
  """
  referenceDocumentUri: String

  """The quantity changes of items at locations to be made."""
  changes: [InventoryChangeInput!]!
}

"""Return type for `inventoryAdjustQuantities` mutation."""
type InventoryAdjustQuantitiesPayload {
  """The group of changes made by the operation."""
  inventoryAdjustmentGroup: InventoryAdjustmentGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [InventoryAdjustQuantitiesUserError!]!
}

"""
An error that occurs during the execution of `InventoryAdjustQuantities`.
"""
type InventoryAdjustQuantitiesUserError implements DisplayableError {
  """The error code."""
  code: InventoryAdjustQuantitiesUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `InventoryAdjustQuantitiesUserError`.
"""
enum InventoryAdjustQuantitiesUserErrorCode {
  """
  Internal (gid://shopify/) ledger documents are not allowed to be adjusted via API.
  """
  INTERNAL_LEDGER_DOCUMENT

  """A ledger document URI is not allowed when adjusting available."""
  INVALID_AVAILABLE_DOCUMENT

  """The specified inventory item could not be found."""
  INVALID_INVENTORY_ITEM

  """The specified ledger document is invalid."""
  INVALID_LEDGER_DOCUMENT

  """The specified location could not be found."""
  INVALID_LOCATION

  """A ledger document URI is required except when adjusting available."""
  INVALID_QUANTITY_DOCUMENT

  """The specified quantity name is invalid."""
  INVALID_QUANTITY_NAME

  """The quantity can't be lower than -2,000,000,000."""
  INVALID_QUANTITY_TOO_LOW

  """The quantity can't be higher than 2,000,000,000."""
  INVALID_QUANTITY_TOO_HIGH

  """The specified reason is invalid."""
  INVALID_REASON

  """The specified reference document is invalid."""
  INVALID_REFERENCE_DOCUMENT

  """The quantities couldn't be adjusted. Try again."""
  ADJUST_QUANTITIES_FAILED

  """
  All changes must have the same ledger document URI or, in the case of adjusting available, no ledger document URI.
  """
  MAX_ONE_LEDGER_DOCUMENT
}

"""The input fields required to adjust the inventory quantity."""
input InventoryAdjustQuantityInput {
  """ID of the inventory level to adjust."""
  inventoryLevelId: ID!

  """
  The change applied to the `available` quantity of the item at the location.
  """
  availableDelta: Int!
}

"""Return type for `inventoryAdjustQuantity` mutation."""
type InventoryAdjustQuantityPayload {
  """
  Represents the updated inventory quantity of an inventory item at a specific location.
  """
  inventoryLevel: InventoryLevel

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `inventoryBulkAdjustQuantityAtLocation` mutation."""
type InventoryBulkAdjustQuantityAtLocationPayload {
  """
  Represents the updated inventory quantities of an inventory item at the location.
  """
  inventoryLevels: [InventoryLevel!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields to specify whether the inventory item should be activated or not at the specified location.
"""
input InventoryBulkToggleActivationInput {
  """The ID of the location to modify the inventory item's stocked status."""
  locationId: ID!

  """
  Whether the inventory item can be stocked at the specified location. To
  deactivate, set the value to false which removes an inventory item's
  quantities from that location, and turns off inventory at that location.
  """
  activate: Boolean!
}

"""Return type for `inventoryBulkToggleActivation` mutation."""
type InventoryBulkToggleActivationPayload {
  """The inventory item that was updated."""
  inventoryItem: InventoryItem

  """The activated inventory levels."""
  inventoryLevels: [InventoryLevel!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [InventoryBulkToggleActivationUserError!]!
}

"""
An error that occurred while setting the activation status of an inventory item.
"""
type InventoryBulkToggleActivationUserError implements DisplayableError {
  """The error code."""
  code: InventoryBulkToggleActivationUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `InventoryBulkToggleActivationUserError`.
"""
enum InventoryBulkToggleActivationUserErrorCode {
  """An error occurred while setting the activation status."""
  GENERIC_ERROR

  """
  Cannot unstock an inventory item from the only location at which it is stocked.
  """
  CANNOT_DEACTIVATE_FROM_ONLY_LOCATION

  """
  Cannot unstock this inventory item from this location because it has committed and incoming quantities.
  """
  COMMITTED_AND_INCOMING_INVENTORY_AT_LOCATION @deprecated(reason: "This error code is deprecated. Both INCOMING_INVENTORY_AT_LOCATION and COMMITTED_INVENTORY_AT_LOCATION codes will be returned as individual errors instead.")

  """
  Cannot unstock this inventory item from this location because it has incoming quantities.
  """
  INCOMING_INVENTORY_AT_LOCATION

  """
  Cannot unstock this inventory item from this location because it has committed quantities.
  """
  COMMITTED_INVENTORY_AT_LOCATION

  """Failed to unstock this inventory item from this location."""
  FAILED_TO_UNSTOCK_FROM_LOCATION

  """
  Cannot stock this inventory item at this location because it is managed by a third-party fulfillment service.
  """
  INVENTORY_MANAGED_BY_3RD_PARTY

  """
  Cannot stock this inventory item at this location because it is managed by Shopify.
  """
  INVENTORY_MANAGED_BY_SHOPIFY

  """Failed to stock this inventory item at this location."""
  FAILED_TO_STOCK_AT_LOCATION

  """
  Cannot stock this inventory item at this location because the variant is missing a SKU.
  """
  MISSING_SKU

  """The location was not found."""
  LOCATION_NOT_FOUND

  """The inventory item was not found."""
  INVENTORY_ITEM_NOT_FOUND
}

"""
Represents a change in an inventory quantity of an inventory item at a location.
"""
type InventoryChange {
  """The amount by which the inventory quantity was changed."""
  delta: Int!

  """The inventory item associated with this inventory change."""
  item: InventoryItem

  """
  The ledger document URI for the change. Denotes who the change is applied to.
  """
  ledgerDocumentUri: String

  """The location associated with this inventory change."""
  location: Location

  """The name of the inventory quantity that was changed."""
  name: String!

  """The quantity of named inventory after the change."""
  quantityAfterChange: Int
}

"""
The input fields for the change to be made to an inventory item at a location.
"""
input InventoryChangeInput {
  """The amount by which the inventory quantity will be changed."""
  delta: Int!

  """Specifies the inventory item to which the change will be applied."""
  inventoryItemId: ID!

  """Specifies the location at which the change will be applied."""
  locationId: ID!

  """
  The ledger document URI to which the quantity change is being applied. Not
  allowed for 'available' and required for other quantity names.
  """
  ledgerDocumentUri: String
}

"""Return type for `inventoryDeactivate` mutation."""
type InventoryDeactivatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Represents the goods available to be shipped to a customer.
It holds essential information about the goods, including SKU and whether it is tracked.
"""
type InventoryItem implements LegacyInteroperability & Node {
  """The ISO 3166-1 alpha-2 country code of where the item originated from."""
  countryCodeOfOrigin: CountryCode

  """A list of country specific harmonized system codes."""
  countryHarmonizedSystemCodes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CountryHarmonizedSystemCodeConnection!

  """The date and time when the inventory item was created."""
  createdAt: DateTime!

  """The number of inventory items that share the same SKU with this item."""
  duplicateSkuCount: Int!

  """The harmonized system code of the item."""
  harmonizedSystemCode: String

  """A globally-unique ID."""
  id: ID!

  """The URL that points to the inventory history for the item."""
  inventoryHistoryUrl: URL

  """The inventory item's quantities at the specified location."""
  inventoryLevel(
    """ID of the location for which the inventory level is requested."""
    locationId: ID!
  ): InventoryLevel

  """
  A list of the inventory item's quantities for each location that the inventory item can be stocked at.
  """
  inventoryLevels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `created_at`
     - `inventory_group_id`
     - `inventory_item_id`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): InventoryLevelConnection!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The number of locations where this inventory item is stocked."""
  locationsCount: Int!

  """
  The ISO 3166-2 alpha-2 province code of where the item originated from.
  """
  provinceCodeOfOrigin: String

  """Whether the inventory item requires shipping."""
  requiresShipping: Boolean!

  """Inventory item SKU. Case-sensitive string."""
  sku: String

  """Whether inventory levels are tracked for the item."""
  tracked: Boolean!

  """
  Whether the value of the `tracked` field for the inventory item can be changed.
  """
  trackedEditable: EditableProperty!

  """
  Unit cost associated with the inventory item. Note: the user must have "View
  product costs" permission granted in order to access this field once product
  granular permissions are enabled.
  """
  unitCost: MoneyV2

  """The date and time when the inventory item was updated."""
  updatedAt: DateTime!

  """The variant that owns this inventory item."""
  variant: ProductVariant!
}

"""An auto-generated type for paginating through multiple InventoryItems."""
type InventoryItemConnection {
  """A list of edges."""
  edges: [InventoryItemEdge!]!

  """A list of the nodes contained in InventoryItemEdge."""
  nodes: [InventoryItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one InventoryItem and a cursor during pagination.
"""
type InventoryItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of InventoryItemEdge."""
  node: InventoryItem!
}

"""The input fields for an inventory item."""
input InventoryItemInput {
  """
  Unit cost associated with the inventory item, the currency is the shop's default currency.
  """
  cost: Decimal

  """Whether the inventory item is tracked."""
  tracked: Boolean
}

"""The input fields for an inventory item."""
input InventoryItemUpdateInput {
  """
  Unit cost associated with the inventory item, the currency is the shop's default currency.
  """
  cost: Decimal

  """
  Whether the inventory item is tracked. The value must be true to adjust the item's inventory levels.
  """
  tracked: Boolean

  """The ISO 3166-1 alpha-2 country code of where the item originated from."""
  countryCodeOfOrigin: CountryCode

  """
  The ISO 3166-2 alpha-2 province/state code of where the item originated from.
  """
  provinceCodeOfOrigin: String

  """
  The harmonized system code of the inventory item. This must be a number between 6 and 13 digits.
  """
  harmonizedSystemCode: String

  """List of country-specific harmonized system codes."""
  countryHarmonizedSystemCodes: [CountryHarmonizedSystemCodeInput!]
}

"""Return type for `inventoryItemUpdate` mutation."""
type InventoryItemUpdatePayload {
  """The inventory item that was updated."""
  inventoryItem: InventoryItem

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The quantities of an inventory item that are related to a specific location.
"""
type InventoryLevel implements Node {
  """
  The quantity of inventory items that are available at the inventory level's associated location.
  """
  available: Int! @deprecated(reason: "Use `quantities` instead.")

  """
  Whether the inventory items associated with the inventory level can be deactivated.
  """
  canDeactivate: Boolean!

  """The date and time when the inventory level was created."""
  createdAt: DateTime!

  """
  Describes either the impact of deactivating the inventory level, or why the inventory level can't be deactivated.
  """
  deactivationAlert: String

  """
  Describes, in HTML with embedded URLs, either the impact of deactivating the
  inventory level or why the inventory level can't be deactivated.
  """
  deactivationAlertHtml: FormattedString @deprecated(reason: "Use `deactivationAlert` instead.")

  """A globally-unique ID."""
  id: ID!

  """
  The quantity of inventory items that are going to the inventory level's associated location.
  """
  incoming: Int! @deprecated(reason: "Use `quantities` instead.")

  """Inventory item associated with the inventory level."""
  item: InventoryItem!

  """The location associated with the inventory level."""
  location: Location!

  """Quantities for the requested names."""
  quantities(
    """The names of the requested inventory quantities."""
    names: [String!]!
  ): [InventoryQuantity!]!

  """The date and time when the inventory level was updated."""
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple InventoryLevels.
"""
type InventoryLevelConnection {
  """A list of edges."""
  edges: [InventoryLevelEdge!]!

  """A list of the nodes contained in InventoryLevelEdge."""
  nodes: [InventoryLevel!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one InventoryLevel and a cursor during pagination.
"""
type InventoryLevelEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of InventoryLevelEdge."""
  node: InventoryLevel!
}

"""The input fields for an inventory level."""
input InventoryLevelInput {
  """The available quantity of an inventory item at a location."""
  availableQuantity: Int!

  """The ID of a location."""
  locationId: ID!
}

"""The input fields required to move inventory quantities."""
input InventoryMoveQuantitiesInput {
  """The reason for the quantity changes."""
  reason: String!

  """
  The reference document URI for the changes. Used to denote what's causing the change.
  """
  referenceDocumentUri: String!

  """The quantity changes of items at locations to be made."""
  changes: [InventoryMoveQuantityChange!]!
}

"""Return type for `inventoryMoveQuantities` mutation."""
type InventoryMoveQuantitiesPayload {
  """The group of changes made by the operation."""
  inventoryAdjustmentGroup: InventoryAdjustmentGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [InventoryMoveQuantitiesUserError!]!
}

"""
An error that occurs during the execution of `InventoryMoveQuantities`.
"""
type InventoryMoveQuantitiesUserError implements DisplayableError {
  """The error code."""
  code: InventoryMoveQuantitiesUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `InventoryMoveQuantitiesUserError`.
"""
enum InventoryMoveQuantitiesUserErrorCode {
  """
  Internal (gid://shopify/) ledger documents are not allowed to be adjusted via API.
  """
  INTERNAL_LEDGER_DOCUMENT

  """A ledger document URI is not allowed when adjusting available."""
  INVALID_AVAILABLE_DOCUMENT

  """The specified inventory item could not be found."""
  INVALID_INVENTORY_ITEM

  """The specified ledger document is invalid."""
  INVALID_LEDGER_DOCUMENT

  """The specified location could not be found."""
  INVALID_LOCATION

  """A ledger document URI is required except when adjusting available."""
  INVALID_QUANTITY_DOCUMENT

  """The specified quantity name is invalid."""
  INVALID_QUANTITY_NAME

  """The quantity can't be negative."""
  INVALID_QUANTITY_NEGATIVE

  """The quantity can't be higher than 2,000,000,000."""
  INVALID_QUANTITY_TOO_HIGH

  """The specified reason is invalid."""
  INVALID_REASON

  """The specified reference document is invalid."""
  INVALID_REFERENCE_DOCUMENT

  """The quantities couldn't be moved. Try again."""
  MOVE_QUANTITIES_FAILED

  """The quantities can't be moved between different locations."""
  DIFFERENT_LOCATIONS

  """The quantity names for each change can't be the same."""
  SAME_QUANTITY_NAME

  """
  Only a maximum of 2 ledger document URIs across all changes is allowed.
  """
  MAXIMUM_LEDGER_DOCUMENT_URIS
}

"""
Represents the change to be made to an inventory item at a location.
The change can either involve the same quantity name between different locations,
or involve different quantity names between the same location.
"""
input InventoryMoveQuantityChange {
  """Specifies the inventory item to which the change will be applied."""
  inventoryItemId: ID!

  """The amount by which the inventory quantity will be changed."""
  quantity: Int!

  """
  The location, quantity name, and ledger document from where the move will be made.
  """
  from: InventoryMoveQuantityTerminalInput!

  """
  The location, quantity name, and ledger document to where the move will be made.
  """
  to: InventoryMoveQuantityTerminalInput!
}

"""
The input fields representing the change to be made to an inventory item at a location.
"""
input InventoryMoveQuantityTerminalInput {
  """Specifies the location at which the change will be applied."""
  locationId: ID!

  """The quantity name to be moved."""
  name: String!

  """
  The ledger document URI for the quantity move. Not allowed for 'available' and required for other quantity names.
  """
  ledgerDocumentUri: String
}

"""General inventory properties for the shop."""
type InventoryProperties {
  """All the quantity names."""
  quantityNames: [InventoryQuantityName!]!
}

"""
Represents a quantity of an inventory item at a specific location, for a specific name.
"""
type InventoryQuantity {
  """The name that identifies the inventory quantity."""
  name: String!

  """The quantity for the quantity name."""
  quantity: Int!

  """When the quantity was last updated."""
  updatedAt: DateTime
}

"""Details about an individual quantity name."""
type InventoryQuantityName {
  """List of quantity names that this quantity name belongs to."""
  belongsTo: [String!]!

  """List of quantity names that comprise this quantity name."""
  comprises: [String!]!

  """The i18n-friendly display name of the quantity."""
  displayName: String

  """Whether the quantity name has been used by the merchant."""
  isInUse: Boolean!

  """The quantity name as used by the API."""
  name: String!
}

"""The input fields required to set inventory on hand quantities."""
input InventorySetOnHandQuantitiesInput {
  """The reason for the quantity changes."""
  reason: String!

  """
  The reference document URI for the changes. Used to denote what's causing the change.
  """
  referenceDocumentUri: String

  """The value to which the on hand quantity will be set."""
  setQuantities: [InventorySetQuantityInput!]!
}

"""Return type for `inventorySetOnHandQuantities` mutation."""
type InventorySetOnHandQuantitiesPayload {
  """The group of changes made by the operation."""
  inventoryAdjustmentGroup: InventoryAdjustmentGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [InventorySetOnHandQuantitiesUserError!]!
}

"""
An error that occurs during the execution of `InventorySetOnHandQuantities`.
"""
type InventorySetOnHandQuantitiesUserError implements DisplayableError {
  """The error code."""
  code: InventorySetOnHandQuantitiesUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `InventorySetOnHandQuantitiesUserError`.
"""
enum InventorySetOnHandQuantitiesUserErrorCode {
  """The specified inventory item could not be found."""
  INVALID_INVENTORY_ITEM

  """The specified location could not be found."""
  INVALID_LOCATION

  """The quantity can't be negative."""
  INVALID_QUANTITY_NEGATIVE

  """The specified reason is invalid."""
  INVALID_REASON

  """The specified reference document is invalid."""
  INVALID_REFERENCE_DOCUMENT

  """The on-hand quantities couldn't be set. Try again."""
  SET_ON_HAND_QUANTITIES_FAILED

  """The total quantity can't be higher than 1,000,000,000."""
  INVALID_QUANTITY_TOO_HIGH
}

"""
The input fields for the quantity to be set for an inventory item at a location.
"""
input InventorySetQuantityInput {
  """Specifies the inventory item to which the quantity will be set."""
  inventoryItemId: ID!

  """Specifies the location at which the quantity will be set."""
  locationId: ID!

  """The quantity to which the inventory quantity will be set."""
  quantity: Int!
}

"""
A job corresponds to some long running task that the client should poll for status.
"""
type Job {
  """This indicates if the job is still queued or has been run."""
  done: Boolean!

  """
  A globally-unique ID that's returned when running an asynchronous mutation.
  """
  id: ID!

  """
  This field will only resolve once the job is done. Can be used to ask for object(s) that have been changed by the job.
  """
  query: QueryRoot
}

"""
A job corresponds to some long running task that the client should poll for status.
"""
interface JobResult {
  """This indicates if the job is still queued or has been run."""
  done: Boolean!

  """
  A globally-unique ID that's returned when running an asynchronous mutation.
  """
  id: ID!
}

"""
A [JSON](https://www.json.org/json-en.html) object.

Example value:
`{
  "product": {
    "id": "gid://shopify/Product/1346443542550",
    "title": "White T-shirt",
    "options": [{
      "name": "Size",
      "values": ["M", "L"]
    }]
  }
}`
"""
scalar JSON

"""
Interoperability metadata for types that directly correspond to a REST Admin API resource.
For example, on the Product type, LegacyInteroperability returns metadata for
the corresponding [Product
object](https://shopify.dev/api/admin-graphql/latest/objects/product) in the
REST Admin API.
"""
interface LegacyInteroperability {
  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!
}

"""Units of measurement for length."""
enum LengthUnit {
  """1000 millimeters equals 1 meter."""
  MILLIMETERS

  """100 centimeters equals 1 meter."""
  CENTIMETERS

  """Metric system unit of length."""
  METERS

  """12 inches equals 1 foot."""
  INCHES

  """Imperial system unit of length."""
  FEET

  """1 yard equals 3 feet."""
  YARDS
}

"""
The total number of pending orders on a shop if less then a maximum, or that maximum.
The atMax field indicates when this maximum has been reached.
"""
type LimitedPendingOrderCount {
  """This is set when the number of pending orders has reached the maximum."""
  atMax: Boolean!

  """
  The number of pendings orders on the shop.
  Limited to a maximum of 10000.
  """
  count: Int!
}

"""
Represents individual products and quantities purchased in the associated order.
"""
type LineItem implements Node {
  """Whether the line item can be restocked."""
  canRestock: Boolean! @deprecated(reason: "Use `restockable` instead.")

  """The subscription contract associated with this line item."""
  contract: SubscriptionContract

  """The line item's quantity, minus the removed quantity."""
  currentQuantity: Int!

  """
  A list of attributes that represent custom features or special requests.
  """
  customAttributes: [Attribute!]!

  """
  The discounts that have been allocated onto the line item by discount applications, not including order edits and refunds.
  """
  discountAllocations: [DiscountAllocation!]!

  """The total line price after discounts are applied, in shop currency."""
  discountedTotal: Money! @deprecated(reason: "Use `discountedTotalSet` instead.")

  """
  The total line price after discounts are applied, in shop and presentment currencies.
  """
  discountedTotalSet: MoneyBag!

  """
  The approximate split price of a line item unit, in shop currency. This value
  doesn't include discounts applied to the entire order.
  """
  discountedUnitPrice: Money! @deprecated(reason: "Use `discountedUnitPriceSet` instead.")

  """
  The approximate split price of a line item unit, in shop and presentment
  currencies. This value doesn't include discounts applied to the entire order.
  """
  discountedUnitPriceSet: MoneyBag!

  """The duties associated with the line item."""
  duties: [Duty!]!

  """The total number of units to fulfill."""
  fulfillableQuantity: Int! @deprecated(reason: "Use [FulfillmentOrderLineItem#remainingQuantity](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrderLineItem#field-fulfillmentorderlineitem-remainingquantity) instead.")

  """
  The fulfillment service that stocks the product variant belonging to a line item.
  
  This is a third-party fulfillment service in the following scenarios:
  
  **Scenario 1**
  - The product variant is stocked by a single fulfillment service.
  - The [FulfillmentService](/api/admin-graphql/latest/objects/FulfillmentService)
  is a third-party fulfillment service. Third-party fulfillment services don't
  have a handle with the value `manual`.
  
  **Scenario 2**
  - Multiple fulfillment services stock the product variant.
  - The last time that the line item was unfulfilled, it was awaiting
  fulfillment by a third-party fulfillment service. Third-party fulfillment
  services don't have a handle with the value `manual`.
  
  If none of the above conditions are met, then the fulfillment service has the `manual` handle.
  """
  fulfillmentService: FulfillmentService @deprecated(reason: "\nThe [relationship between a product variant and a fulfillment service was changed in the `2022-07` API version](/changelog/fulfillment-service-sku-sharing). A [ProductVariant](/api/admin-graphql/latest/objects/ProductVariant) can be stocked by multiple fulfillment services. As a result, we recommend that you use the [inventoryItem field](/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-inventoryitem) if you need to determine where a product variant is stocked.\n\nIf you need to determine whether a product is a gift card, then you should continue to use this field until an alternative is available.\n\nAltering the locations which stock a product variant won't change the value of this field for existing orders.\n\nLearn about [managing inventory quantities and states](/apps/fulfillment/inventory-management-apps/quantities-states).\n")

  """
  The line item's fulfillment status. Returns 'fulfilled' if fulfillableQuantity >= quantity,
  'partial' if  fulfillableQuantity > 0, and 'unfulfilled' otherwise.
  """
  fulfillmentStatus: String! @deprecated(reason: "Use [FulfillmentOrderLineItem#remainingQuantity](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrderLineItem#field-fulfillmentorderlineitem-remainingquantity) instead")

  """A globally-unique ID."""
  id: ID!

  """The image associated to the line item's variant."""
  image: Image

  """Whether the line item can be edited or not."""
  merchantEditable: Boolean!

  """
  The title of the product, optionally appended with the title of the variant (if applicable).
  """
  name: String!

  """
  The total number of units that can't be fulfilled. For example, if items have
  been refunded, or the item is not something that can be fulfilled, like a tip. Please see the [FulfillmentOrder](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder)
  object for more fulfillment details.
  """
  nonFulfillableQuantity: Int!

  """
  The total price without discounts applied, in shop currency.
  This value is based on the unit price of the variant x quantity.
  """
  originalTotal: Money! @deprecated(reason: "Use `originalTotalSet` instead.")

  """
  The total price in shop and presentment currencies, without discounts applied.
  This value is based on the unit price of the variant x quantity.
  """
  originalTotalSet: MoneyBag!

  """The variant unit price without discounts applied, in shop currency."""
  originalUnitPrice: Money! @deprecated(reason: "Use `originalUnitPriceSet` instead.")

  """
  The variant unit price without discounts applied, in shop and presentment currencies.
  """
  originalUnitPriceSet: MoneyBag!

  """The Product object associated with this line item's variant."""
  product: Product

  """The number of variant units ordered."""
  quantity: Int!

  """The line item's quantity, minus the removed quantity."""
  refundableQuantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """Whether the line item can be restocked."""
  restockable: Boolean!

  """The selling plan details associated with the line item."""
  sellingPlan: LineItemSellingPlan

  """The variant SKU number."""
  sku: String

  """Staff attributed to the line item."""
  staffMember: StaffMember

  """The taxes charged for this line item."""
  taxLines(
    """Truncate the array result to this size."""
    first: Int
  ): [TaxLine!]!

  """Whether the variant is taxable."""
  taxable: Boolean!

  """The title of the product at time of order creation."""
  title: String!

  """
  The total amount of the discount allocated to the line item in the shop currency.
  """
  totalDiscount: Money! @deprecated(reason: "Use `totalDiscountSet` instead.")

  """
  The total amount of the discount that's allocated to the line item, in the
  shop and presentment currencies. This field must be explicitly set using draft
  orders, Shopify scripts, or the API.
  """
  totalDiscountSet: MoneyBag!

  """The total discounted value of unfulfilled units, in shop currency."""
  unfulfilledDiscountedTotal: Money! @deprecated(reason: "Use `unfulfilledDiscountedTotalSet` instead.")

  """
  The total discounted value of unfulfilled units, in shop and presentment currencies.
  """
  unfulfilledDiscountedTotalSet: MoneyBag!

  """
  The total price, without any discounts applied. This value is based on the
  unit price of the variant x quantity of all unfulfilled units, in shop currency.
  """
  unfulfilledOriginalTotal: Money! @deprecated(reason: "Use `unfulfilledOriginalTotalSet` instead.")

  """
  The total price, without any discounts applied. This value is based on the
  unit price of the variant x quantity of all unfulfilled units, in shop and
  presentment currencies.
  """
  unfulfilledOriginalTotalSet: MoneyBag!

  """The number of units not yet fulfilled."""
  unfulfilledQuantity: Int!

  """The Variant object associated with this line item."""
  variant: ProductVariant

  """The title of the variant at time of order creation."""
  variantTitle: String

  """The name of the vendor who made the variant."""
  vendor: String
}

"""An auto-generated type for paginating through multiple LineItems."""
type LineItemConnection {
  """A list of edges."""
  edges: [LineItemEdge!]!

  """A list of the nodes contained in LineItemEdge."""
  nodes: [LineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one LineItem and a cursor during pagination.
"""
type LineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of LineItemEdge."""
  node: LineItem!
}

"""Represents a single line item on an order."""
type LineItemMutable implements Node {
  """Whether the line item can be restocked."""
  canRestock: Boolean! @deprecated(reason: "Use `restockable` instead.")

  """
  A list of attributes that represent custom features or special requests.
  """
  customAttributes: [Attribute!]!

  """
  The discounts that have been allocated onto the line item by discount applications.
  """
  discountAllocations: [DiscountAllocation!]!

  """The total line price after discounts are applied, in shop currency."""
  discountedTotal: Money! @deprecated(reason: "Use `discountedTotalSet` instead.")

  """
  The total line price after discounts are applied, in shop and presentment currencies.
  """
  discountedTotalSet: MoneyBag!

  """
  The approximate split price of a line item unit, in shop currency. This value
  doesn't include discounts applied to the entire order.
  """
  discountedUnitPrice: Money! @deprecated(reason: "Use `discountedUnitPriceSet` instead.")

  """
  The approximate split price of a line item unit, in shop and presentment
  currencies. This value doesn't include discounts applied to the entire order.
  """
  discountedUnitPriceSet: MoneyBag!

  """The total number of units to fulfill."""
  fulfillableQuantity: Int!

  """
  The service provider that fulfills the line item.
  
  Deleted fulfillment services will return null.
  """
  fulfillmentService: FulfillmentService

  """
  The line item's fulfillment status. Returns 'fulfilled' if fulfillableQuantity >= quantity,
  'partial' if  fulfillableQuantity > 0, and 'unfulfilled' otherwise.
  """
  fulfillmentStatus: String!

  """A globally-unique ID."""
  id: ID!

  """The image associated to the line item's variant."""
  image: Image

  """Whether the line item can be edited or not."""
  merchantEditable: Boolean!

  """The name of the product."""
  name: String!

  """
  The total number of units that can't be fulfilled. For example, if items have
  been refunded, or the item isn't something that can be fulfilled, like a tip.
  """
  nonFulfillableQuantity: Int!

  """
  The total price without any discounts applied, in shop currency. ""This value
  is based on the unit price of the variant x quantity.
  """
  originalTotal: Money! @deprecated(reason: "Use `originalTotalSet` instead.")

  """
  The total price in shop and presentment currencies, without discounts applied.
  This value is based on the unit price of the variant x quantity.
  """
  originalTotalSet: MoneyBag!

  """The variant unit price without discounts applied, in shop currency."""
  originalUnitPrice: Money! @deprecated(reason: "Use `originalUnitPriceSet` instead.")

  """
  The variant unit price without discounts applied, in shop and presentment currencies.
  """
  originalUnitPriceSet: MoneyBag!

  """The Product object associated with this line item's variant."""
  product: Product

  """The number of variant units ordered."""
  quantity: Int!

  """The line item's quantity, minus the removed quantity."""
  refundableQuantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """Whether the line item can be restocked."""
  restockable: Boolean!

  """The variant SKU number."""
  sku: String

  """Staff attributed to the line item."""
  staffMember: StaffMember

  """The TaxLine object connected to this line item."""
  taxLines(
    """Truncate the array result to this size."""
    first: Int
  ): [TaxLine!]!

  """Whether the variant is taxable."""
  taxable: Boolean!

  """The title of the product."""
  title: String!

  """
  The total amount of the discount allocated to the line item in the shop
  currency. This field must be explicitly set using draft orders, Shopify
  scripts, or the API. Instead of using this field, Shopify recommends using
  `discountAllocations`, which provides the same information.
  """
  totalDiscount: Money! @deprecated(reason: "Use `totalDiscountSet` instead.")

  """
  The total amount of the discount allocated to the line item in the presentment
  currency. This field must be explicitly set using draft orders, Shopify
  scripts, or the API. Instead of using this field, Shopify recommends using
  `discountAllocations`, which provides the same information.
  """
  totalDiscountSet: MoneyBag!

  """The total discounted value of unfulfilled units, in shop currency."""
  unfulfilledDiscountedTotal: Money! @deprecated(reason: "Use `unfulfilledDiscountedTotalSet` instead.")

  """
  The total discounted value of unfulfilled units, in shop and presentment currencies.
  """
  unfulfilledDiscountedTotalSet: MoneyBag!

  """
  The total price without any discounts applied. This value is based on the unit
  price of the variant x quantity of all unfulfilled units, in shop currency.
  """
  unfulfilledOriginalTotal: Money! @deprecated(reason: "Use `unfulfilledOriginalTotalSet` instead.")

  """
  The total price without any discounts applied. This value is based on the unit
  price of the variant x quantity of all unfulfilled units, in shop and
  presentment currencies.
  """
  unfulfilledOriginalTotalSet: MoneyBag!

  """The number of units not yet fulfilled."""
  unfulfilledQuantity: Int!

  """The Variant object associated with this line item."""
  variant: ProductVariant

  """The name of the variant."""
  variantTitle: String

  """The name of the vendor who made the variant."""
  vendor: String
}

"""
An auto-generated type for paginating through multiple LineItemMutables.
"""
type LineItemMutableConnection {
  """A list of edges."""
  edges: [LineItemMutableEdge!]!

  """A list of the nodes contained in LineItemMutableEdge."""
  nodes: [LineItemMutable!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one LineItemMutable and a cursor during pagination.
"""
type LineItemMutableEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of LineItemMutableEdge."""
  node: LineItemMutable!
}

"""Represents the selling plan for a line item."""
type LineItemSellingPlan {
  """The name of the selling plan for display purposes."""
  name: String!

  """The ID of the selling plan associated with the line item."""
  sellingPlanId: ID
}

"""A link to direct users to."""
type Link implements HasPublishedTranslations {
  """A context-sensitive label for the link."""
  label: String!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The URL that the link visits."""
  url: URL!
}

"""A locale."""
type Locale {
  """Locale ISO code."""
  isoCode: String!

  """Human-readable locale name."""
  name: String!
}

"""
Represents the value captured by a localization extension. Localization
extensions are additional fields required by certain countries on international
orders. For example, some countries require additional fields for customs
information or tax identification numbers.
"""
type LocalizationExtension {
  """Country ISO 3166-1 alpha-2 code."""
  countryCode: CountryCode!

  """The localized extension keys that are allowed."""
  key: LocalizationExtensionKey!

  """The purpose of this localization extension."""
  purpose: LocalizationExtensionPurpose!

  """The localized extension title."""
  title: String!

  """The value of the field."""
  value: String!
}

"""
An auto-generated type for paginating through multiple LocalizationExtensions.
"""
type LocalizationExtensionConnection {
  """A list of edges."""
  edges: [LocalizationExtensionEdge!]!

  """A list of the nodes contained in LocalizationExtensionEdge."""
  nodes: [LocalizationExtension!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one LocalizationExtension and a cursor during pagination.
"""
type LocalizationExtensionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of LocalizationExtensionEdge."""
  node: LocalizationExtension!
}

"""The input fields for a LocalizationExtensionInput."""
input LocalizationExtensionInput {
  """The key for the localization extension."""
  key: LocalizationExtensionKey!

  """The localization extension value."""
  value: String!
}

"""The key of a localization extension."""
enum LocalizationExtensionKey {
  """Extension key 'tax_credential_br' for country BR."""
  TAX_CREDENTIAL_BR

  """Extension key 'shipping_credential_br' for country BR."""
  SHIPPING_CREDENTIAL_BR

  """Extension key 'shipping_credential_cn' for country CN."""
  SHIPPING_CREDENTIAL_CN

  """Extension key 'tax_credential_it' for country IT."""
  TAX_CREDENTIAL_IT

  """Extension key 'tax_email_it' for country IT."""
  TAX_EMAIL_IT

  """Extension key 'shipping_credential_kr' for country KR."""
  SHIPPING_CREDENTIAL_KR
}

"""The purpose of a localization extension."""
enum LocalizationExtensionPurpose {
  """
  Extensions that are used for shipping purposes, for example, customs clearance.
  """
  SHIPPING

  """Extensions that are used for taxes purposes, for example, invoicing."""
  TAX
}

"""Represents the location where the physical good resides."""
type Location implements HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node {
  """Whether this location can be reactivated."""
  activatable: Boolean!

  """The address of this location."""
  address: LocationAddress!

  """Whether the location address has been verified."""
  addressVerified: Boolean!

  """Whether this location can be deactivated."""
  deactivatable: Boolean!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  that the location was deactivated at. For example, 3:30 pm on September 7,
  2019 in the time zone of UTC (Universal Time Coordinated) is represented as
  `"2019-09-07T15:50:00Z`".
  """
  deactivatedAt: String

  """Whether this location can be deleted."""
  deletable: Boolean!

  """Name of the service provider that fulfills from this location."""
  fulfillmentService: FulfillmentService

  """Whether this location can fulfill online orders."""
  fulfillsOnlineOrders: Boolean!

  """Whether this location has active inventory."""
  hasActiveInventory: Boolean!

  """Whether this location has orders that need to be fulfilled."""
  hasUnfulfilledOrders: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The quantities of an inventory item at this location."""
  inventoryLevel(
    """The ID of the inventory item to obtain the inventory level for."""
    inventoryItemId: ID!
  ): InventoryLevel

  """
  A list of the quantities of the inventory items that can be stocked at this location.
  """
  inventoryLevels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `created_at`
     - `inventory_group_id`
     - `inventory_item_id`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): InventoryLevelConnection!

  """Whether the location is active."""
  isActive: Boolean!

  """Whether the location is your primary location for shipping inventory."""
  isPrimary: Boolean! @deprecated(reason: "The concept of a primary location is deprecated, shipsInventory can be used to get a fallback location")

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """Local pickup settings for the location."""
  localPickupSettingsV2: DeliveryLocalPickupSettings

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The name of the location."""
  name: String!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """
  Whether this location is used for calculating shipping rates. In multi-origin shipping mode, this flag is ignored.
  """
  shipsInventory: Boolean!

  """List of suggested addresses for this location (empty if none)."""
  suggestedAddresses: [LocationSuggestedAddress!]!
}

"""Return type for `locationActivate` mutation."""
type LocationActivatePayload {
  """The location that was activated."""
  location: Location

  """The list of errors that occurred from executing the mutation."""
  locationActivateUserErrors: [LocationActivateUserError!]!
}

"""An error that occurs while activating a location."""
type LocationActivateUserError implements DisplayableError {
  """The error code."""
  code: LocationActivateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `LocationActivateUserError`.
"""
enum LocationActivateUserErrorCode {
  """An error occurred while activating the location."""
  GENERIC_ERROR

  """Shop has reached its location limit."""
  LOCATION_LIMIT

  """
  This location currently cannot be activated as inventory, pending orders or
  transfers are being relocated from this location.
  """
  HAS_ONGOING_RELOCATION

  """Location not found."""
  LOCATION_NOT_FOUND

  """There is already an active location with this name."""
  HAS_NON_UNIQUE_NAME
}

"""
The input fields to use to specify the address while adding a location.
"""
input LocationAddAddressInput {
  """The first line of the address."""
  address1: String

  """The second line of the address."""
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The phone number of the location."""
  phone: String

  """The ZIP code or postal code of the address."""
  zip: String

  """The two-letter code of country for the address."""
  countryCode: CountryCode!

  """
  The code for the region of the address, such as the state, province, or district.
  For example CA for California, United States.
  """
  provinceCode: String
}

"""The input fields to use to add a location."""
input LocationAddInput {
  """The name of the location."""
  name: String!

  """The address of the location."""
  address: LocationAddAddressInput!

  """Whether inventory at this location is available for sale online."""
  fulfillsOnlineOrders: Boolean = true
}

"""Return type for `locationAdd` mutation."""
type LocationAddPayload {
  """The location that was added."""
  location: Location

  """The list of errors that occurred from executing the mutation."""
  userErrors: [LocationAddUserError!]!
}

"""Represents the address of a location."""
type LocationAddress {
  """The first line of the address for the location."""
  address1: String

  """The second line of the address for the location."""
  address2: String

  """The city of the location."""
  city: String

  """The country of the location."""
  country: String

  """The country code of the location."""
  countryCode: String

  """A formatted version of the address for the location."""
  formatted: [String!]!

  """The latitude coordinates of the location."""
  latitude: Float

  """The longitude coordinates of the location."""
  longitude: Float

  """The phone number of the location."""
  phone: String

  """The province of the location."""
  province: String

  """
  The code for the province, state, or district of the address of the location.
  """
  provinceCode: String

  """The ZIP code of the location."""
  zip: String
}

"""An error that occurs while adding a location."""
type LocationAddUserError implements DisplayableError {
  """The error code."""
  code: LocationAddUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `LocationAddUserError`."""
enum LocationAddUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is too long."""
  TOO_LONG

  """The input value is already taken."""
  TAKEN

  """The input value is blank."""
  BLANK

  """The ZIP code is not a valid US ZIP code."""
  INVALID_US_ZIPCODE

  """An error occurred while adding the location."""
  GENERIC_ERROR
}

"""An auto-generated type for paginating through multiple Locations."""
type LocationConnection {
  """A list of edges."""
  edges: [LocationEdge!]!

  """A list of the nodes contained in LocationEdge."""
  nodes: [Location!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `locationDeactivate` mutation."""
type LocationDeactivatePayload {
  """The location that was deactivated."""
  location: Location

  """The list of errors that occurred from executing the mutation."""
  locationDeactivateUserErrors: [LocationDeactivateUserError!]!
}

"""
The possible errors that can be returned when executing the `locationDeactivate` mutation.
"""
type LocationDeactivateUserError implements DisplayableError {
  """The error code."""
  code: LocationDeactivateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `LocationDeactivateUserError`.
"""
enum LocationDeactivateUserErrorCode {
  """Location not found."""
  LOCATION_NOT_FOUND

  """
  Location either has a fulfillment service or is the only location with a shipping address.
  """
  PERMANENTLY_BLOCKED_FROM_DEACTIVATION_ERROR

  """
  Location has incoming inventory. The location can be deactivated after the inventory has been received.
  """
  TEMPORARILY_BLOCKED_FROM_DEACTIVATION_ERROR

  """
  Location needs to be removed from Shopify POS for Retail subscription in Point of Sale channel.
  """
  HAS_ACTIVE_RETAIL_SUBSCRIPTIONS

  """Destination location is the same as the location to be deactivated."""
  DESTINATION_LOCATION_IS_THE_SAME_LOCATION

  """Destination location is not found or inactive."""
  DESTINATION_LOCATION_NOT_FOUND_OR_INACTIVE

  """
  Location could not be deactivated without specifying where to relocate inventory at the location.
  """
  HAS_ACTIVE_INVENTORY_ERROR

  """Location could not be deactivated because it has pending orders."""
  HAS_FULFILLMENT_ORDERS_ERROR

  """Location could not be deactivated because it has open transfers."""
  HAS_OPEN_TRANSFERS_ERROR

  """
  Location could not be deactivated because it has open Shopify Fulfillment Network transfers.
  """
  HAS_INCOMING_MOVEMENTS_ERROR

  """Location could not be deactivated because it has open purchase orders."""
  HAS_OPEN_PURCHASE_ORDERS_ERROR

  """Failed to relocate active inventories to the destination location."""
  FAILED_TO_RELOCATE_ACTIVE_INVENTORIES

  """Failed to relocate open transfers to the destination location."""
  FAILED_TO_RELOCATE_OPEN_TRANSFERS

  """Failed to relocate open purchase orders to the destination location."""
  FAILED_TO_RELOCATE_OPEN_PURCHASE_ORDERS

  """Failed to relocate incoming movements to the destination location."""
  FAILED_TO_RELOCATE_INCOMING_MOVEMENTS

  """At least one location must fulfill online orders."""
  CANNOT_DISABLE_ONLINE_ORDER_FULFILLMENT
}

"""Return type for `locationDelete` mutation."""
type LocationDeletePayload {
  """The ID of the location that was deleted."""
  deletedLocationId: ID

  """The list of errors that occurred from executing the mutation."""
  locationDeleteUserErrors: [LocationDeleteUserError!]!
}

"""An error that occurs while deleting a location."""
type LocationDeleteUserError implements DisplayableError {
  """The error code."""
  code: LocationDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `LocationDeleteUserError`.
"""
enum LocationDeleteUserErrorCode {
  """Location not found."""
  LOCATION_NOT_FOUND

  """The location cannot be deleted while it is active."""
  LOCATION_IS_ACTIVE

  """An error occurred while deleting the location."""
  GENERIC_ERROR

  """The location cannot be deleted while it has inventory."""
  LOCATION_HAS_INVENTORY

  """The location cannot be deleted while it has pending orders."""
  LOCATION_HAS_PENDING_ORDERS

  """
  The location cannot be deleted while it has any active Retail subscriptions in the Point of Sale channel.
  """
  LOCATION_HAS_ACTIVE_RETAIL_SUBSCRIPTION
}

"""
An auto-generated type which holds one Location and a cursor during pagination.
"""
type LocationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of LocationEdge."""
  node: Location!
}

"""The input fields to use to edit the address of a location."""
input LocationEditAddressInput {
  """The first line of the address."""
  address1: String

  """The second line of the address."""
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The phone number of the location."""
  phone: String

  """The ZIP code or postal code of the location."""
  zip: String

  """The two-letter code of country for the address."""
  countryCode: CountryCode

  """
  The code for the region of the address, such as the state, province, or district.
  For example CA for California, United States.
  """
  provinceCode: String
}

"""The input fields to use to edit a location."""
input LocationEditInput {
  """The name of the location."""
  name: String

  """The address of the location."""
  address: LocationEditAddressInput

  """Whether inventory at this location is available for sale online."""
  fulfillsOnlineOrders: Boolean
}

"""Return type for `locationEdit` mutation."""
type LocationEditPayload {
  """The location that was edited."""
  location: Location

  """The list of errors that occurred from executing the mutation."""
  userErrors: [LocationEditUserError!]!
}

"""An error that occurs while editing a location."""
type LocationEditUserError implements DisplayableError {
  """The error code."""
  code: LocationEditUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `LocationEditUserError`."""
enum LocationEditUserErrorCode {
  """The input value is too long."""
  TOO_LONG

  """The input value is blank."""
  BLANK

  """The record with the ID used as the input value couldn't be found."""
  NOT_FOUND

  """The input value is invalid."""
  INVALID

  """The input value is already taken."""
  TAKEN

  """The ZIP code is not a valid US ZIP code."""
  INVALID_US_ZIPCODE

  """An error occurred while editing the location."""
  GENERIC_ERROR

  """At least one location must fulfill online orders."""
  CANNOT_DISABLE_ONLINE_ORDER_FULFILLMENT
}

"""Return type for `locationLocalPickupDisable` mutation."""
type LocationLocalPickupDisablePayload {
  """The ID of the location for which local pickup was disabled."""
  locationId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DeliveryLocationLocalPickupSettingsError!]!
}

"""Return type for `locationLocalPickupEnable` mutation."""
type LocationLocalPickupEnablePayload {
  """The local pickup settings that were enabled."""
  localPickupSettings: DeliveryLocalPickupSettings

  """The list of errors that occurred from executing the mutation."""
  userErrors: [DeliveryLocationLocalPickupSettingsError!]!
}

"""The set of valid sort keys for the Location query."""
enum LocationSortKeys {
  """Sort by the `name` value."""
  NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Represents a suggested address for a location."""
type LocationSuggestedAddress {
  """The first line of the suggested address."""
  address1: String

  """The second line of the suggested address."""
  address2: String

  """The city of the suggested address."""
  city: String

  """The country of the suggested address."""
  country: String

  """The country code of the suggested address."""
  countryCode: CountryCode

  """A formatted version of the suggested address."""
  formatted: [String!]!

  """The province of the suggested address."""
  province: String

  """
  The code for the province, state, or district of the suggested address.
  """
  provinceCode: String

  """The ZIP code of the suggested address."""
  zip: String
}

"""
Represents a customer mailing address.

For example, a customer's default address and an order's billing address are both mailling addresses.
"""
type MailingAddress implements Node {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the customer's company or organization."""
  company: String

  """Whether the address coordinates are valid."""
  coordinatesValidated: Boolean!

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  
  For example, US.
  """
  countryCode: String @deprecated(reason: "Use `countryCodeV2` instead.")

  """
  The two-letter code for the country of the address.
  
  For example, US.
  """
  countryCodeV2: CountryCode

  """The first name of the customer."""
  firstName: String

  """
  A formatted version of the address, customized by the provided arguments.
  """
  formatted(
    """Whether to include the customer's name in the formatted address."""
    withName: Boolean = false

    """Whether to include the customer's company in the formatted address."""
    withCompany: Boolean = true
  ): [String!]!

  """A comma-separated list of the values for city, province, and country."""
  formattedArea: String

  """A globally-unique ID."""
  id: ID!

  """The last name of the customer."""
  lastName: String

  """The latitude coordinate of the customer address."""
  latitude: Float

  """The longitude coordinate of the customer address."""
  longitude: Float

  """The full name of the customer, based on firstName and lastName."""
  name: String

  """
  A unique phone number for the customer.
  
  Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """
  The two-letter code for the region.
  
  For example, ON.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""The input fields to create or update a mailing address."""
input MailingAddressInput {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the customer's company or organization."""
  company: String

  """The two-letter code for the country of the address."""
  countryCode: CountryCode

  """The first name of the customer."""
  firstName: String

  """The last name of the customer."""
  lastName: String

  """
  A unique phone number for the customer.
  
  Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """
  The code for the region of the address, such as the province, state, or district.
  For example QC for Quebec, Canada.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""
Manual discount applications capture the intentions of a discount that was manually created for an order.

Discount applications don't represent the actual final amount discounted on a
line (line item or shipping line). The actual amount discounted on a line is
represented by the [DiscountAllocation](https://shopify.dev/api/admin-graphql/latest/objects/discountallocation) object.
"""
type ManualDiscountApplication implements DiscountApplication {
  """
  The method by which the discount's value is applied to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The description of the discount application."""
  description: String

  """
  An ordered index that can be used to identify the discount application and indicate the precedence
  of the discount application for calculations.
  """
  index: Int!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The title of the discount application."""
  title: String!

  """The value of the discount application."""
  value: PricingValue!
}

"""
A market is a group of one or more regions that you want to target for international sales.
By creating a market, you can configure a distinct, localized shopping experience for
customers from a specific area of the world. For example, you can
[change currency](https://shopify.dev/api/admin-graphql/current/mutations/marketCurrencySettingsUpdate),
[configure international pricing](https://shopify.dev/apps/internationalization/product-price-lists),
or [add market-specific domains or subfolders](https://shopify.dev/api/admin-graphql/current/objects/MarketWebPresence).
"""
type Market implements Node {
  """The market’s currency settings."""
  currencySettings: MarketCurrencySettings!

  """
  Whether the market is enabled to receive visitors and sales. **Note**: Regions in inactive
  markets can't be selected on the storefront or in checkout.
  """
  enabled: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The name of the market. Not shown to customers."""
  name: String!

  """
  The market’s price list, which specifies a percentage-based price adjustment as well as
  fixed price overrides for specific variants.
  """
  priceList: PriceList

  """Whether the market is the shop’s primary market."""
  primary: Boolean!

  """The regions that comprise the market."""
  regions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MarketRegionConnection!

  """
  The market’s web presence, which defines its SEO strategy. This can be a different domain,
  subdomain, or subfolders of the primary domain. Each web presence comprises one or more
  language variants. If a market doesn't have its own web presence, then the market is accessible on the
  shop’s primary domain using [country
  selectors](https://shopify.dev/themes/internationalization/multiple-currencies-languages#the-country-selector).
  """
  webPresence: MarketWebPresence
}

"""An auto-generated type for paginating through multiple Markets."""
type MarketConnection {
  """A list of edges."""
  edges: [MarketEdge!]!

  """A list of the nodes contained in MarketEdge."""
  nodes: [Market!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields required to create a market."""
input MarketCreateInput {
  """The name of the market. Not shown to customers."""
  name: String!

  """
  Whether the market is enabled to receive visitors and sales. If a
  value isn't provided, then the market is enabled by default if all
  included regions have shipping rates, and disabled if any regions don't
  have shipping rates.
  
  **Note**: Regions in inactive markets can't be selected on the
  storefront or in checkout.
  """
  enabled: Boolean

  """
  The regions to be included in the market. Each region can only be included in one market at
  a time.
  """
  regions: [MarketRegionCreateInput!]!
}

"""Return type for `marketCreate` mutation."""
type MarketCreatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""A market's currency settings."""
type MarketCurrencySettings {
  """
  The currency which this market's prices are defined in, and the
  currency which its customers must use if local currencies are disabled.
  """
  baseCurrency: CurrencySetting!

  """
  Whether or not local currencies are enabled. If enabled, then prices will
  be converted to give each customer the best experience based on their
  region. If disabled, then all customers in this market will see prices
  in the market's base currency.
  """
  localCurrencies: Boolean!
}

"""The input fields used to update the currency settings of a market."""
input MarketCurrencySettingsUpdateInput {
  """
  The currency which this market’s prices are defined in, and the
  currency which its customers must use if local currencies are disabled.
  """
  baseCurrency: CurrencyCode

  """
  Whether or not local currencies are enabled. If enabled, then prices will
  be converted to give each customer the best experience based on their
  region. If disabled, then all customers in this market will see prices
  in the market's base currency.
  """
  localCurrencies: Boolean
}

"""Return type for `marketCurrencySettingsUpdate` mutation."""
type MarketCurrencySettingsUpdatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketCurrencySettingsUserError!]!
}

"""Error codes for failed market multi-currency operations."""
type MarketCurrencySettingsUserError implements DisplayableError {
  """The error code."""
  code: MarketCurrencySettingsUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MarketCurrencySettingsUserError`.
"""
enum MarketCurrencySettingsUserErrorCode {
  """The specified market wasn't found."""
  MARKET_NOT_FOUND

  """
  The currency settings of the given market cannot be changed because the market manager has exclusive control of pricing.
  """
  MANAGED_MARKET

  """
  The shop's payment gateway does not support enabling more than one currency.
  """
  MULTIPLE_CURRENCIES_NOT_SUPPORTED

  """Can't enable or disable local currencies on a single country market."""
  NO_LOCAL_CURRENCIES_ON_SINGLE_COUNTRY_MARKET

  """The specified currency is not supported."""
  UNSUPPORTED_CURRENCY

  """The primary market must use the shop currency."""
  PRIMARY_MARKET_USES_SHOP_CURRENCY
}

"""Return type for `marketDelete` mutation."""
type MarketDeletePayload {
  """The ID of the deleted market."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""
An auto-generated type which holds one Market and a cursor during pagination.
"""
type MarketEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MarketEdge."""
  node: Market!
}

"""
The marketing activity resource represents marketing that a
        merchant created through an app.
"""
type MarketingActivity implements Node {
  """
  The URL of the marketing activity listing page in the marketing section.
  """
  activityListUrl: URL

  """The amount spent on the marketing activity."""
  adSpend: MoneyV2

  """The app which created this marketing activity."""
  app: App!

  """The errors generated when an app publishes the marketing activity."""
  appErrors: MarketingActivityExtensionAppErrors

  """The allocated budget for the marketing activity."""
  budget: MarketingBudget

  """The date and time when the marketing activity was created."""
  createdAt: DateTime!

  """The completed content in the marketing activity creation form."""
  formData: String

  """A globally-unique ID."""
  id: ID!

  """
  Whether the marketing activity is in the main workflow version of
            the marketing automation.
  """
  inMainWorkflowVersion: Boolean!

  """The available marketing channels for a marketing activity."""
  marketingChannel: MarketingChannel!

  """Associated marketing event of this marketing activity."""
  marketingEvent: MarketingEvent

  """
  A contextual description of the marketing activity based on the platform and tactic used.
  """
  sourceAndMedium: String!

  """The current state of the marketing activity."""
  status: MarketingActivityStatus!

  """The severity of the marketing activity's status."""
  statusBadgeType: MarketingActivityStatusBadgeType @deprecated(reason: "Use `statusBadgeTypeV2` instead.")

  """The severity of the marketing activity's status."""
  statusBadgeTypeV2: BadgeType

  """The rendered status of the marketing activity."""
  statusLabel: String!

  """
  The [date and time](
            https://help.shopify.com/https://en.wikipedia.org/wiki/ISO_8601
            ) when the activity's status last changed.
  """
  statusTransitionedAt: DateTime

  """The method of marketing used for this marketing activity."""
  tactic: MarketingTactic!

  """The status to which the marketing activity is currently transitioning."""
  targetStatus: MarketingActivityStatus

  """
  The marketing activity's title, which is rendered on the marketing listing page.
  """
  title: String!

  """The date and time when the marketing activity was updated."""
  updatedAt: DateTime!

  """
  The set of [Urchin Tracking Module](
            https://help.shopify.com/https://en.wikipedia.org/wiki/UTM_parameters
            ) used in the URL for tracking this marketing activity.
  """
  utmParameters: UTMParameters
}

"""
The input fields combining budget amount and its marketing budget type.
"""
input MarketingActivityBudgetInput {
  """Budget type for marketing activity."""
  budgetType: MarketingBudgetBudgetType

  """Amount of budget for the marketing activity."""
  total: MoneyInput
}

"""
An auto-generated type for paginating through multiple MarketingActivities.
"""
type MarketingActivityConnection {
  """A list of edges."""
  edges: [MarketingActivityEdge!]!

  """A list of the nodes contained in MarketingActivityEdge."""
  nodes: [MarketingActivity!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The input fields for creating an externally-managed marketing activity.
"""
input MarketingActivityCreateExternalInput {
  """The title of the marketing activity."""
  title: String!

  """
  The
  [Urchin Traffic Module (UTM) parameters](https://en.wikipedia.org/wiki/UTM_parameters)
  that are associated with a related marketing campaign. `UTMInput` is required for all
  marketing tactics except for the Storefront app marketing tactic.
  """
  utm: UTMInput!

  """The budget for this marketing activity."""
  budget: MarketingActivityBudgetInput

  """The amount spent on the marketing activity."""
  adSpend: MoneyInput

  """The ID of an activity that's hosted outside of Shopify."""
  remoteId: String

  """URL for viewing and/or managing the activity outside of Shopify."""
  remoteUrl: URL!

  """The URL for a preview image that's used for the marketing activity."""
  remotePreviewImageUrl: URL

  """
  Specifies the settings for the marketing platform and the ad format.
  The marketing tactic determines which default fields are included
  in the marketing activity.
  """
  tactic: MarketingTactic!

  """The channel of your marketing event."""
  channel: MarketingChannel!

  """The referring domain."""
  referringDomain: String

  """When the activity is scheduled to start."""
  scheduledStart: DateTime

  """When the activity is scheduled to end."""
  scheduledEnd: DateTime

  """When the activity started."""
  start: DateTime

  """When the activity ended."""
  end: DateTime
}

"""Return type for `marketingActivityCreateExternal` mutation."""
type MarketingActivityCreateExternalPayload {
  """The external marketing activity that was created."""
  marketingActivity: MarketingActivity

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketingActivityUserError!]!
}

"""The input fields required to create a marketing activity."""
input MarketingActivityCreateInput {
  """The title of the marketing activity."""
  marketingActivityTitle: String

  """The form data in JSON serialized as a string."""
  formData: String

  """The ID of the marketing activity extension."""
  marketingActivityExtensionId: ID!

  """Encoded context containing marketing campaign id."""
  context: String

  """
  Specifies the
  [Urchin Traffic Module (UTM) parameters](https://en.wikipedia.org/wiki/UTM_parameters)
  that are associated with a related marketing campaign. UTMInput is required for all Marketing
  tactics except Storefront App.
  """
  utm: UTMInput

  """The current state of the marketing activity."""
  status: MarketingActivityStatus!

  """The budget for this marketing activity."""
  budget: MarketingActivityBudgetInput
}

"""Return type for `marketingActivityCreate` mutation."""
type MarketingActivityCreatePayload {
  """The created marketing activity."""
  marketingActivity: MarketingActivity

  """The path to return back to shopify admin from embedded editor."""
  redirectPath: String

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one MarketingActivity and a cursor during pagination.
"""
type MarketingActivityEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MarketingActivityEdge."""
  node: MarketingActivity!
}

"""
The error code resulted from the marketing activity extension integration.
"""
enum MarketingActivityExtensionAppErrorCode {
  """The shop/user must be onboarded to use the app."""
  NOT_ONBOARDED_ERROR

  """The app has returned validation errors."""
  VALIDATION_ERROR

  """The app is either not responding or returning unexpected data."""
  API_ERROR

  """The app has returned an error when invoking the platform."""
  PLATFORM_ERROR

  """The app needs to be installed."""
  INSTALL_REQUIRED_ERROR
}

"""
Represents errors returned from apps when using the marketing activity extension.
"""
type MarketingActivityExtensionAppErrors {
  """The app error type."""
  code: MarketingActivityExtensionAppErrorCode!

  """The list of errors returned by the app."""
  userErrors: [UserError!]!
}

"""The set of valid sort keys for the MarketingActivity query."""
enum MarketingActivitySortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
Status helps to identify if this marketing activity has been completed, queued, failed etc.
"""
enum MarketingActivityStatus {
  """This marketing activity is currently running."""
  ACTIVE

  """This marketing activity is permanently unavailable."""
  DELETED

  """
  This marketing activity was deleted and it was triggered from outside of Shopify.
  """
  DELETED_EXTERNALLY

  """This marketing activity is disconnected and no longer editable."""
  DISCONNECTED

  """This marketing activity has been edited, but it is not yet created."""
  DRAFT

  """This marketing activity is unable to run."""
  FAILED

  """This marketing activity has completed running."""
  INACTIVE

  """This marketing activity is currently not running."""
  PAUSED

  """
  This marketing activity is pending creation on the app's marketing platform.
  """
  PENDING

  """This marketing activity is scheduled to run."""
  SCHEDULED

  """The marketing activity's status is unknown."""
  UNDEFINED
}

"""StatusBadgeType helps to identify the color of the status badge."""
enum MarketingActivityStatusBadgeType {
  """This status badge has type default."""
  DEFAULT

  """This status badge has type success."""
  SUCCESS

  """This status badge has type attention."""
  ATTENTION

  """This status badge has type warning."""
  WARNING

  """This status badge has type info."""
  INFO
}

"""
The input fields required to update an externally managed marketing activity.
"""
input MarketingActivityUpdateExternalInput {
  """The title of the marketing activity."""
  title: String

  """
  Specifies the
  [Urchin Traffic Module (UTM) parameters](https://en.wikipedia.org/wiki/UTM_parameters)
  that are associated with a related marketing campaign. UTMInput is required for all marketing
  tactics except the storefront app.
  """
  utm: UTMInput

  """The budget for the marketing activity."""
  budget: MarketingActivityBudgetInput

  """The amount spent on the marketing activity."""
  adSpend: MoneyInput

  """The URL for managing the activity outside of Shopify."""
  remoteUrl: URL

  """The preview image URL for the marketing activity."""
  remotePreviewImageUrl: URL

  """
  The settings for the marketing platform and ad format.
  The selection of the marketing tactic also determines which default fields are included
  in the marketing activity.
  """
  tactic: MarketingTactic

  """The channel that your marketing event will use."""
  channel: MarketingChannel

  """The referring domain."""
  referringDomain: String

  """The date and time when the activity is scheduled to start."""
  scheduledStart: DateTime

  """The date and time when the activity is scheduled to end."""
  scheduledEnd: DateTime

  """The date and time when the activity started."""
  start: DateTime

  """The date and time when the activity ended."""
  end: DateTime
}

"""Return type for `marketingActivityUpdateExternal` mutation."""
type MarketingActivityUpdateExternalPayload {
  """The updated marketing activity."""
  marketingActivity: MarketingActivity

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketingActivityUserError!]!
}

"""The input fields required to update a marketing activity."""
input MarketingActivityUpdateInput {
  """The ID of the marketing activity."""
  id: ID!

  """
  The ID of the recommendation that the marketing activity was created from, if one exists.
  """
  marketingRecommendationId: ID

  """The title of the marketing activity."""
  title: String

  """The budget for the marketing activity."""
  budget: MarketingActivityBudgetInput

  """
  The current state of the marketing activity. Learn more about
  [marketing activities statuses](/api/marketing-activities/statuses).
  """
  status: MarketingActivityStatus

  """
  The target state that the marketing activity is transitioning to. Learn more
  about [marketing activities statuses](/api/marketing-activities/statuses).
  """
  targetStatus: MarketingActivityStatus

  """
  The form data of the marketing activity. This is only used if the marketing activity is
                integrated with the external editor.
  """
  formData: String

  """
  Specifies the
  [Urchin Traffic Module (UTM) parameters](https://en.wikipedia.org/wiki/UTM_parameters)
  that are associated with a related marketing campaign. UTMInput is required for all Marketing
  tactics except Storefront App. The utm field can only be set once and never modified.
  """
  utm: UTMInput

  """
  A list of the item IDs that were marketed in this marketing activity. Valid types for these items are:
  * `Product`
  * `Shop`
  """
  marketedResources: [ID!]

  """
  The error messages that were generated when the app was trying to complete the activity.
  Learn more about the
  [JSON format expected for error messages](/api/marketing-activities/statuses#failed-status).
  """
  errors: JSON
}

"""Return type for `marketingActivityUpdate` mutation."""
type MarketingActivityUpdatePayload {
  """The updated marketing activity."""
  marketingActivity: MarketingActivity

  """The redirect path from the embedded editor to the Shopify admin."""
  redirectPath: String

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An error that occurs during the execution of a Shopify Marketing mutation.
"""
type MarketingActivityUserError implements DisplayableError {
  """The error code."""
  code: MarketingActivityUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MarketingActivityUserError`.
"""
enum MarketingActivityUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is already taken."""
  TAKEN
}

"""This type combines budget amount and its marketing budget type."""
type MarketingBudget {
  """The budget type for a marketing activity."""
  budgetType: MarketingBudgetBudgetType!

  """The amount of budget for marketing activity."""
  total: MoneyV2!
}

"""The budget type for a marketing activity."""
enum MarketingBudgetBudgetType {
  """A daily budget."""
  DAILY

  """A budget for the lifetime of a marketing activity."""
  LIFETIME
}

"""
The available marketing channels for a marketing activity or event. A marketing
channel is broad category of marketing, used for reporting aggregation.
"""
enum MarketingChannel {
  """Paid search."""
  SEARCH

  """Displayed ads."""
  DISPLAY

  """Social media."""
  SOCIAL

  """Email."""
  EMAIL

  """Referral links."""
  REFERRAL
}

"""
Marketing engagement represents customer activity taken on a marketing activity or a marketing channel.
"""
type MarketingEngagement {
  """
  The total ad spend for the day, if the marketing event is a paid ad with a daily spend.
  """
  adSpend: MoneyV2

  """The total number of clicks on the marketing event for the day."""
  clicksCount: Int

  """The total number of comments on marketing content for the day."""
  commentsCount: Int

  """The total number of complaints for the day."""
  complaintsCount: Int

  """
  The total number of fails for the day. For message-based platforms such as
  email or SMS, this represents the number of bounced marketing emails or messages.
  """
  failsCount: Int

  """The total number of favorites, likes, saves, or bookmarks for the day."""
  favoritesCount: Int

  """The date time at which the data was fetched."""
  fetchedAt: DateTime

  """The total number of impressions for the day."""
  impressionsCount: Int

  """
  Whether the engagements are reported as lifetime values rather than daily totals.
  """
  isCumulative: Boolean

  """
  The marketing activity object related to this engagement. This corresponds to
  the marketingActivityId passed in on creation of the engagement.
  """
  marketingActivity: MarketingActivity!

  """
  The date that these engagements occurred on between 12:00 AM to 11:59 PM UTC.
  """
  occurredOn: Date!

  """
  The total number of marketing emails or messages that were sent for the day.
  """
  sendsCount: Int

  """
  The total number of times marketing content was distributed or reposted to
  either one's own network of followers through a social media platform or other
  digital channels for the day. For message-based platforms such as email or
  SMS, this represents the number of times marketing emails or messages were forwarded.
  """
  sharesCount: Int

  """The total number of unique clicks on marketing content for the day."""
  uniqueClicksCount: Int

  """The total number of unique views for the day."""
  uniqueViewsCount: Int

  """
  The total number of unsubscribes for the day. For social media platforms, this represents the number of unfollows.
  """
  unsubscribesCount: Int

  """
  The UTC Offset that the app is using to determine which date to allocate spend to.
  """
  utcOffset: UtcOffset

  """
  The total number of views for the day. For message-based platforms such as
  email or SMS, this represents the number of times marketing emails or messages
  were opened. For video-based content, this represents the number of times
  videos were played.
  """
  viewsCount: Int
}

"""Return type for `marketingEngagementCreate` mutation."""
type MarketingEngagementCreatePayload {
  """The marketing engagement that was created."""
  marketingEngagement: MarketingEngagement

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for a marketing engagement."""
input MarketingEngagementInput {
  """The date that these engagements occurred on."""
  occurredOn: Date!

  """The total number of impressions for the day."""
  impressionsCount: Int

  """
  The total number of views for the day. For message-based platforms such as
  email or SMS, this represents the number of times marketing emails or messages
  were opened. For video-based content, this represents the number of times
  videos were played.
  """
  viewsCount: Int

  """The total number of clicks on the marketing event for the day."""
  clicksCount: Int

  """
  The total number of times marketing content was distributed or reposted to
  either one's own network of followers through a social media platform or other
  digital channels for the day. For message-based platforms such as email or
  SMS, this represents the number of times marketing emails or messages were forwarded.
  """
  sharesCount: Int

  """The total number of favorites, likes, saves, or bookmarks for the day."""
  favoritesCount: Int

  """The total number of comments on marketing content for the day."""
  commentsCount: Int

  """
  The total number of unsubscribes for the day. For social media platforms, this represents the number of unfollows.
  """
  unsubscribesCount: Int

  """The total number of complaints for the day."""
  complaintsCount: Int

  """
  The total number of fails for the day. For message-based platforms such as
  email or SMS, this represents the number of bounced marketing emails or messages.
  """
  failsCount: Int

  """
  The total number of marketing emails or messages that were sent for the day.
  """
  sendsCount: Int

  """The total number of unique views for the day."""
  uniqueViewsCount: Int

  """The total number of unique clicks on marketing content for the day."""
  uniqueClicksCount: Int

  """
  The total ad spend for the day, if the marketing event is a paid ad with a daily spend.
  """
  adSpend: MoneyInput

  """
  Whether the engagements are reported as lifetime values rather than daily totals.
  """
  isCumulative: Boolean

  """
  The UTC Offset that the app is using to determine which date to allocate spend to.
  """
  utcOffset: UtcOffset

  """The date time at which the data was fetched."""
  fetchedAt: DateTime
}

"""Represents actions that market a merchant's store or products."""
type MarketingEvent implements LegacyInteroperability & Node {
  """The app that the marketing event is attributed to."""
  app: App!

  """The marketing channel used by the marketing event."""
  channel: MarketingChannel

  """A human-readable description of the marketing event."""
  description: String

  """The date and time when the marketing event ended."""
  endedAt: DateTime

  """A globally-unique ID."""
  id: ID!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The URL where the marketing event can be managed."""
  manageUrl: URL

  """The URL where the marketing event can be previewed."""
  previewUrl: URL

  """An optional ID that helps Shopify validate engagement data."""
  remoteId: String

  """The date and time when the marketing event is scheduled to end."""
  scheduledToEndAt: DateTime

  """
  Where the `MarketingEvent` occurred and what kind of content was used.
  Because `utmSource` and `utmMedium` are often used interchangeably, this is
  based on a combination of `marketingChannel`, `referringDomain`, and `type` to
  provide a consistent representation for any given piece of marketing
  regardless of the app that created it.
  """
  sourceAndMedium: String!

  """The date and time when the marketing event started."""
  startedAt: DateTime!

  """The display text for the marketing event type."""
  targetTypeDisplayText: String! @deprecated(reason: "Use `sourceAndMedium` instead.")

  """The marketing event type."""
  type: MarketingTactic!

  """The name of the marketing campaign."""
  utmCampaign: String

  """
  The medium that the marketing campaign is using. Example values: `cpc`, `banner`.
  """
  utmMedium: String

  """
  The referrer of the marketing event. Example values: `google`, `newsletter`.
  """
  utmSource: String
}

"""
An auto-generated type for paginating through multiple MarketingEvents.
"""
type MarketingEventConnection {
  """A list of edges."""
  edges: [MarketingEventEdge!]!

  """A list of the nodes contained in MarketingEventEdge."""
  nodes: [MarketingEvent!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one MarketingEvent and a cursor during pagination.
"""
type MarketingEventEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MarketingEventEdge."""
  node: MarketingEvent!
}

"""The set of valid sort keys for the MarketingEvent query."""
enum MarketingEventSortKeys {
  """Sort by the `started_at` value."""
  STARTED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The available types of marketing event."""
enum MarketingTactic {
  """An abandoned cart recovery email."""
  ABANDONED_CART

  """An ad, such as a Facebook ad."""
  AD

  """An affiliate link."""
  AFFILIATE

  """A link."""
  LINK

  """A loyalty program."""
  LOYALTY

  """A messaging app, such as Facebook Messenger."""
  MESSAGE

  """A newsletter."""
  NEWSLETTER

  """A notification in the Shopify admin."""
  NOTIFICATION

  """A blog post."""
  POST

  """A retargeting ad."""
  RETARGETING

  """A transactional email."""
  TRANSACTIONAL

  """Search engine optimization."""
  SEO

  """A direct visit to the online store."""
  DIRECT

  """A popup on the online store."""
  STOREFRONT_APP

  """A display ad."""
  DISPLAY @deprecated(reason: "`DISPLAY` is deprecated. Use `AD` instead.")

  """Paid search."""
  SEARCH @deprecated(reason: "`SEARCH` is deprecated. Use `AD` instead.")

  """A follow-up email."""
  FOLLOW_UP @deprecated(reason: "'FOLLOW_UP' is deprecated. Use 'TRANSACTIONAL' instead.")

  """A promotional receipt."""
  RECEIPT @deprecated(reason: "'RECEIPT' is deprecated. Use 'TRANSACTIONAL' instead.")
}

"""The market localizable content of a resource's field."""
type MarketLocalizableContent {
  """The hash digest representation of the content value."""
  digest: String

  """The resource field that's being localized."""
  key: String!

  """The content value."""
  value: String
}

"""A resource that has market localizable fields."""
type MarketLocalizableResource {
  """The market localizable content."""
  marketLocalizableContent: [MarketLocalizableContent!]!

  """Market localizations for the market localizable content."""
  marketLocalizations(
    """Filters market localizations by market ID."""
    marketId: ID!
  ): [MarketLocalization!]!

  """The GID of the resource."""
  resourceId: ID!
}

"""
An auto-generated type for paginating through multiple MarketLocalizableResources.
"""
type MarketLocalizableResourceConnection {
  """A list of edges."""
  edges: [MarketLocalizableResourceEdge!]!

  """A list of the nodes contained in MarketLocalizableResourceEdge."""
  nodes: [MarketLocalizableResource!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one MarketLocalizableResource and a cursor during pagination.
"""
type MarketLocalizableResourceEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MarketLocalizableResourceEdge."""
  node: MarketLocalizableResource!
}

"""The type of resources that are market localizable."""
enum MarketLocalizableResourceType {
  """A metafield. Market localizable fields: `value`."""
  METAFIELD
}

"""
The market localization of a field within a resource, which is determined by the market ID.
"""
type MarketLocalization {
  """
  A reference to the value being localized on the resource that this market localization belongs to.
  """
  key: String!

  """The market that the localization is specific to."""
  market: Market!

  """
  Whether the original content has changed since this market localization was updated.
  """
  outdated: Boolean!

  """The date and time when the market localization was updated."""
  updatedAt: DateTime

  """The value of the market localization."""
  value: String
}

"""
The input fields and values for creating or updating a market localization.
"""
input MarketLocalizationRegisterInput {
  """The ID of the market that the localization is specific to."""
  marketId: ID!

  """
  A reference to the value being localized on the resource that this market localization belongs to.
  """
  key: String!

  """The value of the market localization."""
  value: String!

  """A hash digest representation of the content being localized."""
  marketLocalizableContentDigest: String!
}

"""Return type for `marketLocalizationsRegister` mutation."""
type MarketLocalizationsRegisterPayload {
  """The market localizations that were created or updated."""
  marketLocalizations: [MarketLocalization!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [TranslationUserError!]!
}

"""Return type for `marketLocalizationsRemove` mutation."""
type MarketLocalizationsRemovePayload {
  """The market localizations that were deleted."""
  marketLocalizations: [MarketLocalization!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [TranslationUserError!]!
}

"""A geographic region which comprises a market."""
interface MarketRegion {
  """A globally-unique ID."""
  id: ID!

  """The name of the region."""
  name: String!
}

"""An auto-generated type for paginating through multiple MarketRegions."""
type MarketRegionConnection {
  """A list of edges."""
  edges: [MarketRegionEdge!]!

  """A list of the nodes contained in MarketRegionEdge."""
  nodes: [MarketRegion!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""A country which comprises a market."""
type MarketRegionCountry implements MarketRegion & Node {
  """The ISO code identifying the country."""
  code: CountryCode!

  """A globally-unique ID."""
  id: ID!

  """The name of the region."""
  name: String!
}

"""
The input fields for creating a market region with exactly one required option.
"""
input MarketRegionCreateInput {
  """A country code for the region."""
  countryCode: CountryCode!
}

"""Return type for `marketRegionDelete` mutation."""
type MarketRegionDeletePayload {
  """The ID of the deleted market region."""
  deletedId: ID

  """The parent market object of the deleted region."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""
An auto-generated type which holds one MarketRegion and a cursor during pagination.
"""
type MarketRegionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MarketRegionEdge."""
  node: MarketRegion!
}

"""Return type for `marketRegionsCreate` mutation."""
type MarketRegionsCreatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""The input fields used to update a market."""
input MarketUpdateInput {
  """The name of the market. Not shown to customers."""
  name: String

  """
  Whether the market is enabled to receive visitors and sales. **Note**: Regions in
  inactive markets cannot be selected on the storefront or in checkout.
  """
  enabled: Boolean
}

"""Return type for `marketUpdate` mutation."""
type MarketUpdatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""Defines errors encountered while managing a Market."""
type MarketUserError implements DisplayableError {
  """The error code."""
  code: MarketUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `MarketUserError`."""
enum MarketUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is already taken."""
  TAKEN

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The input value is blank."""
  BLANK

  """The market wasn't found."""
  MARKET_NOT_FOUND

  """The market region wasn't found."""
  REGION_NOT_FOUND

  """The market web presence wasn't found."""
  WEB_PRESENCE_NOT_FOUND

  """Can't add regions to the primary market."""
  CANNOT_ADD_REGIONS_TO_PRIMARY_MARKET

  """Can't delete the only region in a market."""
  CANNOT_DELETE_ONLY_REGION

  """Exactly one input option is required."""
  REQUIRES_EXACTLY_ONE_OPTION

  """Can't delete the primary market."""
  CANNOT_DELETE_PRIMARY_MARKET

  """Domain was not found."""
  DOMAIN_NOT_FOUND

  """The subfolder suffix must contain only letters."""
  SUBFOLDER_SUFFIX_MUST_CONTAIN_ONLY_LETTERS

  """No languages selected."""
  NO_LANGUAGES

  """Duplicates found in languages."""
  DUPLICATE_LANGUAGES

  """Cannot add region-specific language."""
  REGION_SPECIFIC_LANGUAGE

  """
  Can't create subfolders if the primary domain is a country code top-level domain (ccTLDs).
  """
  SUBFOLDER_NOT_ALLOWED_FOR_CCTLD_DOMAINS

  """Can't pass both `subfolderSuffix` and `domainId`."""
  CANNOT_HAVE_SUBFOLDER_AND_DOMAIN

  """Can't add the web presence to the primary market."""
  CANNOT_ADD_WEB_PRESENCE_TO_PRIMARY_MARKET

  """One of `subfolderSuffix` or `domainId` is required."""
  REQUIRES_DOMAIN_OR_SUBFOLDER

  """The primary market must use the primary domain."""
  PRIMARY_MARKET_MUST_USE_PRIMARY_DOMAIN

  """Can't delete the primary market's web presence."""
  CANNOT_DELETE_PRIMARY_MARKET_WEB_PRESENCE

  """Can't have more than 50 markets."""
  SHOP_REACHED_MARKETS_LIMIT

  """Can't disable the primary market."""
  CANNOT_DISABLE_PRIMARY_MARKET

  """The language isn't published to the store."""
  UNPUBLISHED_LANGUAGE

  """The language isn't enabled on the store."""
  DISABLED_LANGUAGE

  """Can't set default locale to null."""
  CANNOT_SET_DEFAULT_LOCALE_TO_NULL

  """Can't add unsupported country or region."""
  UNSUPPORTED_COUNTRY_REGION

  """Can't add customer account domain to a market."""
  CANNOT_ADD_CUSTOMER_DOMAIN
}

"""
The market’s web presence, which defines its SEO strategy. This can be a different domain
(e.g. `example.ca`), subdomain (e.g. `ca.example.com`), or subfolders of the primary
domain (e.g. `example.com/en-ca`). Each web presence comprises one or more language
variants. If a market does not have its own web presence, it is accessible on the shop’s
primary domain via [country
selectors](https://shopify.dev/themes/internationalization/multiple-currencies-languages#the-country-selector).

Note: while the domain/subfolders defined by a market’s web presence are not applicable to
custom storefronts, which must manage their own domains and routing, the languages chosen
here do govern [the languages available on the Storefront
API](https://shopify.dev/custom-storefronts/internationalization/multiple-languages) for the countries in
this market.
"""
type MarketWebPresence implements Node {
  """
  The ISO codes for the alternate locales. When a domain is used, these locales will be
  available as language-specific subfolders. For example, if English is an
  alternate locale, and `example.ca` is the market’s domain, then
  `example.ca/en` will load in English.
  """
  alternateLocales: [String!]!

  """
  The ISO code for the default locale. When a domain is used, this is the locale that will
  be used when the domain root is accessed. For example, if French is the default locale,
  and `example.ca` is the market’s domian, then `example.ca` will load in French.
  """
  defaultLocale: String!

  """
  The web presence’s domain.
  This field will be null if `subfolderSuffix` isn't null.
  """
  domain: Domain

  """A globally-unique ID."""
  id: ID!

  """The associated market."""
  market: Market!

  """The list of root URLs for each of the web presence’s locales."""
  rootUrls: [MarketWebPresenceRootUrl!]!

  """
  The market-specific suffix of the subfolders defined by the web presence.
  Example: in `/en-us` the subfolder suffix is `us`. This field will be null if
  `domain` isn't null.
  """
  subfolderSuffix: String
}

"""The input fields used to create a web presence for a market."""
input MarketWebPresenceCreateInput {
  """
  The web presence's domain ID. This field must be `null` if the `subfolderSuffix` isn't `null`.
  """
  domainId: ID

  """The default locale for the market’s web presence."""
  defaultLocale: String!

  """The alternate locales for the market’s web presence."""
  alternateLocales: [String!]

  """
  The market-specific suffix of the subfolders defined by the web presence.
  For example: in `/en-us`, the subfolder suffix is `us`.
  Only ASCII characters are allowed. This field must be `null` if the `domainId` isn't `null`.
  """
  subfolderSuffix: String
}

"""Return type for `marketWebPresenceCreate` mutation."""
type MarketWebPresenceCreatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""Return type for `marketWebPresenceDelete` mutation."""
type MarketWebPresenceDeletePayload {
  """The ID of the deleted web presence."""
  deletedId: ID

  """The market for which the web presence was deleted."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""
The URL for the homepage of the online store in the context of a particular market and a
particular locale.
"""
type MarketWebPresenceRootUrl {
  """The locale that the storefront loads in."""
  locale: String!

  """The URL."""
  url: URL!
}

"""The input fields used to update a web presence for a market."""
input MarketWebPresenceUpdateInput {
  """
  The web presence's domain ID. This field must be null if `subfolderSuffix` is not null.
  """
  domainId: ID

  """The default locale for the market’s web presence."""
  defaultLocale: String

  """The alternate locales for the market’s web presence."""
  alternateLocales: [String!]

  """
  The market-specific suffix of the subfolders defined by the web presence.
  Example: in `/en-us` the subfolder suffix is `us`.
  Only ASCII characters are allowed. This field must be null if `domainId` is not null.
  """
  subfolderSuffix: String
}

"""Return type for `marketWebPresenceUpdate` mutation."""
type MarketWebPresenceUpdatePayload {
  """The market object."""
  market: Market

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MarketUserError!]!
}

"""Represents a media interface."""
interface Media {
  """A word or phrase to share the nature or contents of a media."""
  alt: String

  """The media content type."""
  mediaContentType: MediaContentType!

  """Any errors which have occurred on the media."""
  mediaErrors: [MediaError!]!

  """The warnings attached to the media."""
  mediaWarnings: [MediaWarning!]!

  """The preview image for the media."""
  preview: MediaPreviewImage

  """Current status of the media."""
  status: MediaStatus!
}

"""An auto-generated type for paginating through multiple Media."""
type MediaConnection {
  """A list of edges."""
  edges: [MediaEdge!]!

  """A list of the nodes contained in MediaEdge."""
  nodes: [Media!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The possible content types for a media object."""
enum MediaContentType {
  """A Shopify-hosted video."""
  VIDEO

  """An externally hosted video."""
  EXTERNAL_VIDEO

  """A 3d model."""
  MODEL_3D

  """A Shopify-hosted image."""
  IMAGE
}

"""
An auto-generated type which holds one Media and a cursor during pagination.
"""
type MediaEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MediaEdge."""
  node: Media!
}

"""
Represents a media error. This typically occurs when there is an issue with the media itself causing it to fail validation.
Check the media before attempting to upload again.
"""
type MediaError {
  """Code representing the type of error."""
  code: MediaErrorCode!

  """Additional details regarding the error."""
  details: String

  """Translated error message."""
  message: String!
}

"""Error types for media."""
enum MediaErrorCode {
  """Media error has occured for unknown reason."""
  UNKNOWN

  """Media could not be processed because the signed URL was invalid."""
  INVALID_SIGNED_URL

  """
  Media could not be processed because the image could not be downloaded.
  """
  IMAGE_DOWNLOAD_FAILURE

  """Media could not be processed because the image could not be processed."""
  IMAGE_PROCESSING_FAILURE

  """
  Media timed out because it is currently being modified by another operation.
  """
  MEDIA_TIMEOUT_ERROR

  """
  Media could not be created because the external video could not be found.
  """
  EXTERNAL_VIDEO_NOT_FOUND

  """
  Media could not be created because the external video is not listed or is private.
  """
  EXTERNAL_VIDEO_UNLISTED

  """
  Media could not be created because the external video has an invalid aspect ratio.
  """
  EXTERNAL_VIDEO_INVALID_ASPECT_RATIO

  """
  Media could not be created because embed permissions are disabled for this video.
  """
  EXTERNAL_VIDEO_EMBED_DISABLED

  """
  Media could not be created because video is either not found or still transcoding.
  """
  EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING

  """
  File could not be processed because the source could not be downloaded.
  """
  GENERIC_FILE_DOWNLOAD_FAILURE

  """File could not be created because the size is too large."""
  GENERIC_FILE_INVALID_SIZE

  """Media could not be created because the metadata could not be read."""
  VIDEO_METADATA_READ_ERROR

  """Media could not be created because it has an invalid file type."""
  VIDEO_INVALID_FILETYPE_ERROR

  """
  Media could not be created because it does not meet the minimum width requirement.
  """
  VIDEO_MIN_WIDTH_ERROR

  """
  Media could not be created because it does not meet the maximum width requirement.
  """
  VIDEO_MAX_WIDTH_ERROR

  """
  Media could not be created because it does not meet the minimum height requirement.
  """
  VIDEO_MIN_HEIGHT_ERROR

  """
  Media could not be created because it does not meet the maximum height requirement.
  """
  VIDEO_MAX_HEIGHT_ERROR

  """
  Media could not be created because it does not meet the minimum duration requirement.
  """
  VIDEO_MIN_DURATION_ERROR

  """
  Media could not be created because it does not meet the maximum duration requirement.
  """
  VIDEO_MAX_DURATION_ERROR

  """Video failed validation."""
  VIDEO_VALIDATION_ERROR

  """Model failed validation."""
  MODEL3D_VALIDATION_ERROR

  """
  Media could not be created because the model's thumbnail generation failed.
  """
  MODEL3D_THUMBNAIL_GENERATION_ERROR

  """
  Media could not be created because the model can't be converted to USDZ format.
  """
  MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR

  """Media could not be created because the model file failed processing."""
  MODEL3D_GLB_OUTPUT_CREATION_ERROR

  """Media could not be created because the model file failed processing."""
  MODEL3D_PROCESSING_FAILURE

  """
  Media could not be created because the image is an unsupported file type.
  """
  UNSUPPORTED_IMAGE_FILE_TYPE

  """Media could not be created because the image size is too large."""
  INVALID_IMAGE_FILE_SIZE

  """
  Media could not be created because the image has an invalid aspect ratio.
  """
  INVALID_IMAGE_ASPECT_RATIO

  """
  Media could not be created because the image's resolution exceeds the max limit.
  """
  INVALID_IMAGE_RESOLUTION

  """
  Media could not be created because the cumulative file storage limit would be exceeded.
  """
  FILE_STORAGE_LIMIT_EXCEEDED
}

"""Host for a Media Resource."""
enum MediaHost {
  """Host for YouTube embedded videos."""
  YOUTUBE

  """Host for Vimeo embedded videos."""
  VIMEO
}

"""An image hosted on Shopify."""
type MediaImage implements File & Media & Node {
  """A word or phrase to share the nature or contents of a media."""
  alt: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the file was created.
  """
  createdAt: DateTime!

  """Any errors that have occurred on the file."""
  fileErrors: [FileError!]!

  """The status of the file."""
  fileStatus: FileStatus!

  """A globally-unique ID."""
  id: ID!

  """The image for the media. Returns `null` until `status` is `READY`."""
  image: Image

  """The media content type."""
  mediaContentType: MediaContentType!

  """Any errors which have occurred on the media."""
  mediaErrors: [MediaError!]!

  """The warnings attached to the media."""
  mediaWarnings: [MediaWarning!]!

  """The MIME type of the image."""
  mimeType: String

  """The original source of the image."""
  originalSource: MediaImageOriginalSource

  """The preview image for the media."""
  preview: MediaPreviewImage

  """Current status of the media."""
  status: MediaStatus!
}

"""The original source for an image."""
type MediaImageOriginalSource {
  """The size of the original file in bytes."""
  fileSize: Int
}

"""Represents the preview image for a media."""
type MediaPreviewImage {
  """
  The preview image for the media. Returns `null` until `status` is `READY`.
  """
  image: Image

  """Current status of the preview image."""
  status: MediaPreviewImageStatus!
}

"""The possible statuses for a media preview image."""
enum MediaPreviewImageStatus {
  """Preview image is uploaded but not yet processed."""
  UPLOADED

  """Preview image is being processed."""
  PROCESSING

  """Preview image is ready to be displayed."""
  READY

  """Preview image processing has failed."""
  FAILED
}

"""The possible statuses for a media object."""
enum MediaStatus {
  """Media has been uploaded but not yet processed."""
  UPLOADED

  """Media is being processed."""
  PROCESSING

  """Media is ready to be displayed."""
  READY

  """Media processing has failed."""
  FAILED
}

"""
Represents an error that happens during execution of a Media query or mutation.
"""
type MediaUserError implements DisplayableError {
  """The error code."""
  code: MediaUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `MediaUserError`."""
enum MediaUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """Video validation failed."""
  VIDEO_VALIDATION_ERROR

  """Model validation failed."""
  MODEL3D_VALIDATION_ERROR

  """Video creation throttle was exceeded."""
  VIDEO_THROTTLE_EXCEEDED

  """Model3d creation throttle was exceeded."""
  MODEL3D_THROTTLE_EXCEEDED

  """Exceeded the limit of media per product."""
  PRODUCT_MEDIA_LIMIT_EXCEEDED

  """Exceeded the limit of media per shop."""
  SHOP_MEDIA_LIMIT_EXCEEDED

  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Media does not exist."""
  MEDIA_DOES_NOT_EXIST

  """Media does not exist on the given product."""
  MEDIA_DOES_NOT_EXIST_ON_PRODUCT

  """Only one mediaId is allowed per variant-media input pair."""
  TOO_MANY_MEDIA_PER_INPUT_PAIR

  """
  Exceeded the maximum number of 100 variant-media pairs per mutation call.
  """
  MAXIMUM_VARIANT_MEDIA_PAIRS_EXCEEDED

  """Invalid media type."""
  INVALID_MEDIA_TYPE

  """Variant specified in more than one pair."""
  PRODUCT_VARIANT_SPECIFIED_MULTIPLE_TIMES

  """Variant does not exist on the given product."""
  PRODUCT_VARIANT_DOES_NOT_EXIST_ON_PRODUCT

  """Non-ready media are not supported."""
  NON_READY_MEDIA

  """Product variant already has attached media."""
  PRODUCT_VARIANT_ALREADY_HAS_MEDIA

  """The specified media is not attached to the specified variant."""
  MEDIA_IS_NOT_ATTACHED_TO_VARIANT

  """
  Media cannot be modified. It is currently being modified by another operation.
  """
  MEDIA_CANNOT_BE_MODIFIED
}

"""
Represents a media warning. This occurs when there is a non-blocking concern regarding your media.
Consider reviewing your media to ensure it is correct and its parameters are as expected.
"""
type MediaWarning {
  """The code representing the type of warning."""
  code: MediaWarningCode!

  """Translated warning message."""
  message: String
}

"""Warning types for media."""
enum MediaWarningCode {
  """
  3D model physical size might be invalid. The dimensions of your model are very
  small. Consider reviewing your model to ensure they are correct.
  """
  MODEL_SMALL_PHYSICAL_SIZE

  """
  3D model physical size might be invalid. The dimensions of your model are very
  large. Consider reviewing your model to ensure they are correct.
  """
  MODEL_LARGE_PHYSICAL_SIZE
}

"""The class of the discount for combining purposes."""
enum MerchandiseDiscountClass {
  """Combined as a product discount."""
  PRODUCT

  """Combined as an order discount."""
  ORDER
}

"""
Merchant approval for accelerated onboarding to channel integration apps.
"""
type MerchantApprovalSignals {
  """
  Whether the shop's Shopify Payments account identity is verified. Returns
  `false` if the identity is unverified or if the shop doesn't have a Shopify
  Payments account.
  """
  identityVerified: Boolean!

  """
  Whether Shopify has pre-verified the merchant's business for onboarding to
  channel integration apps. Returns `false` if the shop isn't marked for verification.
  """
  verifiedByShopify: Boolean!
}

"""
Metafields enable you to attach additional information to a Shopify resource, such
as a [Product](https://shopify.dev/api/admin-graphql/latest/objects/product) or
a [Collection](https://shopify.dev/api/admin-graphql/latest/objects/collection).
For more information about where you can attach metafields refer to [HasMetafields](https://shopify.dev/api/admin/graphql/reference/common-objects/HasMetafields).
Some examples of the data that metafields enable you to store are
specifications, size charts, downloadable documents, release dates, images, or part numbers.
Metafields are identified by an owner resource, namespace, and key. and store a
value along with type information for that value.
"""
type Metafield implements LegacyInteroperability & Node {
  """The date and time when the metafield was created."""
  createdAt: DateTime!

  """The metafield definition that the metafield belongs to, if any."""
  definition: MetafieldDefinition

  """The description of the metafield."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """The unique identifier for the metafield within its namespace."""
  key: String!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """
  The container for a group of metafields that the metafield is associated with.
  """
  namespace: String!

  """The resource that the metafield is attached to."""
  owner: HasMetafields!

  """The type of resource that the metafield is attached to."""
  ownerType: MetafieldOwnerType!

  """
  Returns a reference object if the metafield definition's type is a resource reference.
  """
  reference: MetafieldReference

  """
  A list of reference objects if the metafield's type is a resource reference list.
  """
  references(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): MetafieldReferenceConnection

  """
  The type of data that is stored in the metafield.
  Refer to the list of [supported types](https://shopify.dev/apps/metafields/types).
  """
  type: String!

  """The date and time when the metafield was updated."""
  updatedAt: DateTime!

  """
  The data stored in the metafield. Always stored as a string, regardless of the metafield's type.
  """
  value: String!
}

"""The access settings for this metafield definition."""
type MetafieldAccess {
  """
  The admin access setting used for the metafields under this definition.
  """
  admin: MetafieldAdminAccess
}

"""
The input fields for the access settings for the metafields under the definition.
"""
input MetafieldAccessInput {
  """
  The admin access setting to use for the metafields under this definition.
  """
  admin: MetafieldAdminAccess!
}

"""Possible admin access settings for metafields."""
enum MetafieldAdminAccess {
  """Owner gets full access. No one else has access rights."""
  PRIVATE

  """
  Owner gets full access. The merchant has read-only access. No one else has access rights.
  """
  MERCHANT_READ

  """
  Owner gets full access. The merchant has read and write access. No one else has access rights.
  """
  MERCHANT_READ_WRITE
}

"""An auto-generated type for paginating through multiple Metafields."""
type MetafieldConnection {
  """A list of edges."""
  edges: [MetafieldEdge!]!

  """A list of the nodes contained in MetafieldEdge."""
  nodes: [Metafield!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
Metafield definitions enable you to define additional validation constraints for metafields, and enable the
merchant to edit metafield values in context.
"""
type MetafieldDefinition implements Node {
  """The access settings associated with the metafield definition."""
  access: MetafieldAccess!

  """The description of the metafield definition."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """
  The unique identifier for the metafield definition within its namespace.
  """
  key: String!

  """The metafields that belong to the metafield definition."""
  metafields(
    """Returns the metafields filtered by the validation status."""
    validationStatus: MetafieldValidationStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The count of the metafields that belong to the metafield definition."""
  metafieldsCount(
    """The current validation status."""
    validationStatus: MetafieldValidationStatus
  ): Int!

  """The human-readable name of the metafield definition."""
  name: String!

  """
  The container for a group of metafields that the metafield definition is associated with.
  """
  namespace: String!

  """The resource type that the metafield definition is attached to."""
  ownerType: MetafieldOwnerType!

  """The position of the metafield definition in the pinned list."""
  pinnedPosition: Int

  """
  The standard metafield definition template associated with the metafield definition.
  """
  standardTemplate: StandardMetafieldDefinitionTemplate

  """
  The type of data that each of the metafields that belong to the metafield definition will store.
  Refer to the list of [supported types](https://shopify.dev/apps/metafields/types).
  """
  type: MetafieldDefinitionType!

  """
  Whether the metafield definition can be used as a collection condition.
  """
  useAsCollectionCondition: Boolean!

  """
  The validation status for the metafields that belong to the metafield definition.
  """
  validationStatus: MetafieldDefinitionValidationStatus!

  """
  A list of [validation options](https://shopify.dev/apps/metafields/definitions/validation) for
  the metafields that belong to the metafield definition. For example, for a metafield definition with the
  type `date`, you can set a minimum date validation so that each of the metafields that belong to it can only
  store dates after the specified minimum.
  """
  validations: [MetafieldDefinitionValidation!]!

  """
  Whether each of the metafields that belong to the metafield definition are visible from the Storefront API.
  """
  visibleToStorefrontApi: Boolean!
}

"""
An auto-generated type for paginating through multiple MetafieldDefinitions.
"""
type MetafieldDefinitionConnection {
  """A list of edges."""
  edges: [MetafieldDefinitionEdge!]!

  """A list of the nodes contained in MetafieldDefinitionEdge."""
  nodes: [MetafieldDefinition!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `metafieldDefinitionCreate` mutation."""
type MetafieldDefinitionCreatePayload {
  """The metafield definition that was created."""
  createdDefinition: MetafieldDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldDefinitionCreateUserError!]!
}

"""
An error that occurs during the execution of `MetafieldDefinitionCreate`.
"""
type MetafieldDefinitionCreateUserError implements DisplayableError {
  """The error code."""
  code: MetafieldDefinitionCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MetafieldDefinitionCreateUserError`.
"""
enum MetafieldDefinitionCreateUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value isn't included in the list."""
  INCLUSION

  """The input value needs to be blank."""
  PRESENT

  """The input value is already taken."""
  TAKEN

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The definition limit per owner type has exceeded."""
  RESOURCE_TYPE_LIMIT_EXCEEDED

  """The maximum limit of definitions per owner type has exceeded."""
  LIMIT_EXCEEDED

  """An invalid option."""
  INVALID_OPTION

  """A duplicate option."""
  DUPLICATE_OPTION

  """
  This namespace and key combination is reserved for standard definitions.
  """
  RESERVED_NAMESPACE_KEY

  """The pinned limit has been reached for the owner type."""
  PINNED_LIMIT_REACHED

  """
  This namespace and key combination is already in use for a set of your metafields.
  """
  UNSTRUCTURED_ALREADY_EXISTS

  """A field contains an invalid character."""
  INVALID_CHARACTER

  """
  The definition type is not eligible to be used as collection condition.
  """
  TYPE_NOT_ALLOWED_FOR_CONDITIONS

  """
  You have reached the maximum allowed definitions for automated collections.
  """
  OWNER_TYPE_LIMIT_EXCEEDED_FOR_AUTOMATED_COLLECTIONS
}

"""Return type for `metafieldDefinitionDelete` mutation."""
type MetafieldDefinitionDeletePayload {
  """The ID of the deleted metafield definition."""
  deletedDefinitionId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldDefinitionDeleteUserError!]!
}

"""
An error that occurs during the execution of `MetafieldDefinitionDelete`.
"""
type MetafieldDefinitionDeleteUserError implements DisplayableError {
  """The error code."""
  code: MetafieldDefinitionDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MetafieldDefinitionDeleteUserError`.
"""
enum MetafieldDefinitionDeleteUserErrorCode {
  """The input value needs to be blank."""
  PRESENT

  """Definition not found."""
  NOT_FOUND

  """An internal error occurred."""
  INTERNAL_ERROR

  """
  Deleting a reference type metafield definition requires deletion of its associated metafields.
  """
  REFERENCE_TYPE_DELETION_ERROR

  """Action cannot proceed. Definition is currently in use."""
  METAFIELD_DEFINITION_IN_USE

  """Owner type can't be used in this mutation."""
  DISALLOWED_OWNER_TYPE
}

"""
An auto-generated type which holds one MetafieldDefinition and a cursor during pagination.
"""
type MetafieldDefinitionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetafieldDefinitionEdge."""
  node: MetafieldDefinition!
}

"""The input fields required to create a metafield definition."""
input MetafieldDefinitionInput {
  """
  The container for a group of metafields that the metafield definition will be associated with.
  
  Must be 3-255 characters long and only contain alphanumeric, hyphen, and underscore characters.
  """
  namespace: String!

  """
  The unique identifier for the metafield definition within its namespace.
  
  Must be 3-64 characters long and only contain alphanumeric, hyphen, and underscore characters.
  """
  key: String!

  """The human-readable name for the metafield definition."""
  name: String!

  """The description for the metafield definition."""
  description: String

  """The resource type that the metafield definition is attached to."""
  ownerType: MetafieldOwnerType!

  """
  The type of data that each of the metafields that belong to the metafield definition will store.
  Refer to the list of [supported types](https://shopify.dev/apps/metafields/types).
  """
  type: String!

  """
  A list of [validation options](https://shopify.dev/apps/metafields/definitions/validation) for
  the metafields that belong to the metafield definition. For example, for a metafield definition with the
  type `date`, you can set a minimum date validation so that each of the metafields that belong to it can only
  store dates after the specified minimum.
  """
  validations: [MetafieldDefinitionValidationInput!]

  """
  Whether metafields for the metafield definition are visible using the Storefront API.
  """
  visibleToStorefrontApi: Boolean = false

  """
  Whether the metafield definition can be used as a collection condition.
  """
  useAsCollectionCondition: Boolean = false

  """
  Whether to [pin](https://help.shopify.com/manual/custom-data/metafields/pinning-metafield-definitions)
  the metafield definition.
  """
  pin: Boolean = false

  """
  The access settings that apply to each of the metafields that belong to the metafield definition.
  """
  access: MetafieldAccessInput
}

"""Possible metafield definition pinned statuses."""
enum MetafieldDefinitionPinnedStatus {
  """All metafield definitions."""
  ANY

  """Only metafield definitions that are pinned."""
  PINNED

  """Only metafield definitions that are not pinned."""
  UNPINNED
}

"""Return type for `metafieldDefinitionPin` mutation."""
type MetafieldDefinitionPinPayload {
  """The metafield definition that was pinned."""
  pinnedDefinition: MetafieldDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldDefinitionPinUserError!]!
}

"""An error that occurs during the execution of `MetafieldDefinitionPin`."""
type MetafieldDefinitionPinUserError implements DisplayableError {
  """The error code."""
  code: MetafieldDefinitionPinUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MetafieldDefinitionPinUserError`.
"""
enum MetafieldDefinitionPinUserErrorCode {
  """The metafield definition was not found."""
  NOT_FOUND

  """The pinned limit has been reached for owner type."""
  PINNED_LIMIT_REACHED

  """The metafield definition is already pinned."""
  ALREADY_PINNED

  """An internal error occurred."""
  INTERNAL_ERROR

  """Owner type can't be used in this mutation."""
  DISALLOWED_OWNER_TYPE
}

"""The set of valid sort keys for the MetafieldDefinition query."""
enum MetafieldDefinitionSortKeys {
  """Sort by the `id` value."""
  ID

  """Sort by the `name` value."""
  NAME

  """Sort by the `pinned_position` value."""
  PINNED_POSITION

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
The type and name for the optional validation configuration of a metafield.

For example, a supported validation might consist of a `max` name and a `number_integer` type.
This validation can then be used to enforce a maximum character length for a `single_line_text_field` metafield.
"""
type MetafieldDefinitionSupportedValidation {
  """The name of the metafield definition validation."""
  name: String!

  """The type of input for the validation."""
  type: String!
}

"""
A metafield definition type provides basic foundation and validation for a metafield.
"""
type MetafieldDefinitionType {
  """The category associated with the metafield definition type."""
  category: String!

  """
  The name of the type for the metafield definition.
  See the list of [supported types](https://shopify.dev/apps/metafields/types).
  """
  name: String!

  """The supported validations for a metafield definition type."""
  supportedValidations: [MetafieldDefinitionSupportedValidation!]!

  """
  Whether metafields without a definition can be migrated to a definition of this type.
  """
  supportsDefinitionMigrations: Boolean!

  """The value type for a metafield created with this definition type."""
  valueType: MetafieldValueType! @deprecated(reason: "`valueType` is deprecated and `name` should be used for type information.")
}

"""Return type for `metafieldDefinitionUnpin` mutation."""
type MetafieldDefinitionUnpinPayload {
  """The metafield definition that was unpinned."""
  unpinnedDefinition: MetafieldDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldDefinitionUnpinUserError!]!
}

"""
An error that occurs during the execution of `MetafieldDefinitionUnpin`.
"""
type MetafieldDefinitionUnpinUserError implements DisplayableError {
  """The error code."""
  code: MetafieldDefinitionUnpinUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MetafieldDefinitionUnpinUserError`.
"""
enum MetafieldDefinitionUnpinUserErrorCode {
  """The metafield definition was not found."""
  NOT_FOUND

  """The metafield definition isn't pinned."""
  NOT_PINNED

  """An internal error occurred."""
  INTERNAL_ERROR

  """Owner type can't be used in this mutation."""
  DISALLOWED_OWNER_TYPE
}

"""The input fields required to update a metafield definition."""
input MetafieldDefinitionUpdateInput {
  """
  The container for a group of metafields that the metafield definition is associated with. Used to help identify
  the metafield definition, but cannot be updated itself.
  """
  namespace: String!

  """
  The unique identifier for the metafield definition within its namespace. Used to help identify the metafield
  definition, but can't be updated itself.
  """
  key: String!

  """The human-readable name for the metafield definition."""
  name: String

  """The description for the metafield definition."""
  description: String

  """
  The resource type that the metafield definition is attached to. Used to help identify the metafield definition,
  but can't be updated itself.
  """
  ownerType: MetafieldOwnerType!

  """Whether to pin the metafield definition."""
  pin: Boolean

  """
  Whether each of the metafields that belong to the metafield definition are visible from the Storefront API.
  """
  visibleToStorefrontApi: Boolean = false

  """
  Whether the metafield definition can be used as a collection condition.
  """
  useAsCollectionCondition: Boolean = false

  """
  The access settings that apply to each of the metafields that belong to the metafield definition.
  """
  access: MetafieldAccessInput
}

"""Return type for `metafieldDefinitionUpdate` mutation."""
type MetafieldDefinitionUpdatePayload {
  """The metafield definition that was updated."""
  updatedDefinition: MetafieldDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldDefinitionUpdateUserError!]!
}

"""
An error that occurs during the execution of `MetafieldDefinitionUpdate`.
"""
type MetafieldDefinitionUpdateUserError implements DisplayableError {
  """The error code."""
  code: MetafieldDefinitionUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `MetafieldDefinitionUpdateUserError`.
"""
enum MetafieldDefinitionUpdateUserErrorCode {
  """The input value needs to be blank."""
  PRESENT

  """The input value is too long."""
  TOO_LONG

  """The metafield definition wasn't found."""
  NOT_FOUND

  """An invalid input."""
  INVALID_INPUT

  """The pinned limit has been reached for the owner type."""
  PINNED_LIMIT_REACHED

  """An internal error occurred."""
  INTERNAL_ERROR

  """
  The definition type is not eligible to be used as collection condition.
  """
  TYPE_NOT_ALLOWED_FOR_CONDITIONS

  """Action cannot proceed. Definition is currently in use."""
  METAFIELD_DEFINITION_IN_USE

  """
  You have reached the maximum allowed definitions for automated collections.
  """
  OWNER_TYPE_LIMIT_EXCEEDED_FOR_AUTOMATED_COLLECTIONS
}

"""
A configured metafield definition validation.

For example, for a metafield definition of `number_integer` type, you can set a validation with the name `max`
and a value of `15`. This validation will ensure that the value of the metafield is a number less than or equal to 15.

Refer to the [list of supported validations](https://shopify.dev/api/admin/graphql/reference/common-objects/metafieldDefinitionTypes#examples-Fetch_all_metafield_definition_types).
"""
type MetafieldDefinitionValidation {
  """The validation name."""
  name: String!

  """The name for the metafield type of this validation."""
  type: String!

  """The validation value."""
  value: String
}

"""
The name and value for a metafield definition validation.

For example, for a metafield definition of `single_line_text_field` type, you
can set a validation with the name `min` and a value of `10`.
This validation will ensure that the value of the metafield is at least 10 characters.

Refer to the [list of supported validations](https://shopify.dev/api/admin/graphql/reference/common-objects/metafieldDefinitionTypes#examples-Fetch_all_metafield_definition_types).
"""
input MetafieldDefinitionValidationInput {
  """The name for the metafield definition validation."""
  name: String!

  """The value for the metafield definition validation."""
  value: String!
}

"""Possible metafield definition validation statuses."""
enum MetafieldDefinitionValidationStatus {
  """All of this definition's metafields are valid."""
  ALL_VALID

  """
  Asynchronous validation of this definition's metafields is in progress.
  """
  IN_PROGRESS

  """Some of this definition's metafields are invalid."""
  SOME_INVALID
}

"""The input fields to delete a metafield."""
input MetafieldDeleteInput {
  """The ID of the metafield to delete."""
  id: ID!
}

"""Return type for `metafieldDelete` mutation."""
type MetafieldDeletePayload {
  """The ID of the deleted metafield."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one Metafield and a cursor during pagination.
"""
type MetafieldEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetafieldEdge."""
  node: Metafield!
}

"""
The input fields to use to create or update a metafield through a mutation on the owning resource.
An alternative way to create or update a metafield is by using the
[metafieldsSet](https://shopify.dev/api/admin-graphql/latest/mutations/metafieldsSet) mutation.
"""
input MetafieldInput {
  """
  The unique ID of the metafield.
  
  Required when updating a metafield, but shouldn't be included when creating as it's created automatically.
  """
  id: ID

  """
  The container for a group of metafields that the metafield is or will be associated with. Used in tandem with
  `key` to lookup a metafield on a resource, preventing conflicts with other metafields with the same `key`.
  
  Required when creating a metafield, but optional when updating. Used to help identify the metafield when
  updating, but can't be updated itself.
  
  Must be 3-255 characters long and can contain alphanumeric, hyphen, and underscore characters.
  """
  namespace: String

  """
  The unique identifier for a metafield within its namespace.
  
  Required when creating a metafield, but optional when updating. Used to help identify the metafield when
  updating, but can't be updated itself.
  
  Must be 3-64 characters long and can contain alphanumeric, hyphen, and underscore characters.
  """
  key: String

  """
  The data stored in the metafield. Always stored as a string, regardless of the metafield's type.
  """
  value: String

  """
  The type of data that is stored in the metafield.
  Refer to the list of [supported types](https://shopify.dev/apps/metafields/types).
  
  Required when creating a metafield, but optional when updating.
  """
  type: String
}

"""Possible types of a metafield's owner resource."""
enum MetafieldOwnerType {
  """The Api Permission metafield owner type."""
  API_PERMISSION

  """The Company metafield owner type."""
  COMPANY

  """The Company Location metafield owner type."""
  COMPANY_LOCATION

  """The Customer metafield owner type."""
  CUSTOMER

  """The Draft Order metafield owner type."""
  DRAFTORDER

  """The Collection metafield owner type."""
  COLLECTION

  """The Product Image metafield owner type."""
  PRODUCTIMAGE @deprecated(reason: "`PRODUCTIMAGE` is deprecated. Use `MEDIA_IMAGE` instead.")

  """The Product metafield owner type."""
  PRODUCT

  """The Product Variant metafield owner type."""
  PRODUCTVARIANT

  """The Article metafield owner type."""
  ARTICLE

  """The Blog metafield owner type."""
  BLOG

  """The Page metafield owner type."""
  PAGE

  """The Discount metafield owner type."""
  DISCOUNT

  """The Order metafield owner type."""
  ORDER

  """The Location metafield owner type."""
  LOCATION

  """The Shop metafield owner type."""
  SHOP
}

"""The resource referenced by the metafield value."""
union MetafieldReference = Collection | GenericFile | MediaImage | Metaobject | OnlineStorePage | Product | ProductVariant | Video

"""
An auto-generated type for paginating through multiple MetafieldReferences.
"""
type MetafieldReferenceConnection {
  """A list of edges."""
  edges: [MetafieldReferenceEdge!]!

  """A list of the nodes contained in MetafieldReferenceEdge."""
  nodes: [MetafieldReference]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one MetafieldReference and a cursor during pagination.
"""
type MetafieldReferenceEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetafieldReferenceEdge."""
  node: MetafieldReference
}

"""
Types of resources that may use metafields to reference other resources.
"""
union MetafieldReferencer = AppInstallation | Collection | Customer | DiscountAutomaticNode | DiscountCodeNode | DiscountNode | DraftOrder | FulfillmentOrder | Location | Metaobject | OnlineStoreArticle | OnlineStoreBlog | OnlineStorePage | Order | Product | ProductVariant | Shop

"""
Defines a relation between two resources via a reference metafield.
The referencer owns the joining field with a given namespace and key,
while the target is referenced by the field.
"""
type MetafieldRelation {
  """The key of the field making the reference."""
  key: String!

  """The name of the field making the reference."""
  name: String!

  """
  The namespace of the metafield making the reference, or type of the metaobject.
  """
  namespace: String!

  """The resource making the reference."""
  referencer: MetafieldReferencer!

  """The referenced resource."""
  target: MetafieldReference!
}

"""
An auto-generated type for paginating through multiple MetafieldRelations.
"""
type MetafieldRelationConnection {
  """A list of edges."""
  edges: [MetafieldRelationEdge!]!

  """A list of the nodes contained in MetafieldRelationEdge."""
  nodes: [MetafieldRelation!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one MetafieldRelation and a cursor during pagination.
"""
type MetafieldRelationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetafieldRelationEdge."""
  node: MetafieldRelation!
}

"""The input fields for a metafield value to set."""
input MetafieldsSetInput {
  """The unique ID of the resource that the metafield is attached to."""
  ownerId: ID!

  """
  The container for a group of metafields that the metafield is or will be associated with. Used in tandem
  with `key` to lookup a metafield on a resource, preventing conflicts with other metafields with the
  same `key`.
  
  Must be 3-255 characters long and can contain alphanumeric, hyphen, and underscore characters.
  """
  namespace: String!

  """
  The unique identifier for a metafield within its namespace.
  
  Must be 3-64 characters long and can contain alphanumeric, hyphen, and underscore characters.
  """
  key: String!

  """
  The data stored in the metafield. Always stored as a string, regardless of the metafield's type.
  """
  value: String!

  """
  The type of data that is stored in the metafield.
  The type must be one of the [supported types](https://shopify.dev/apps/metafields/types).
  
  Required when there is no corresponding definition for the given `namespace`, `key`, and
  owner resource type (derived from `ownerId`).
  """
  type: String
}

"""Return type for `metafieldsSet` mutation."""
type MetafieldsSetPayload {
  """The list of metafields that were set."""
  metafields: [Metafield!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetafieldsSetUserError!]!
}

"""An error that occurs during the execution of `MetafieldsSet`."""
type MetafieldsSetUserError implements DisplayableError {
  """The error code."""
  code: MetafieldsSetUserErrorCode

  """The index of the array element that's causing the error."""
  elementIndex: Int

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `MetafieldsSetUserError`."""
enum MetafieldsSetUserErrorCode {
  """The input value is blank."""
  BLANK

  """The input value isn't included in the list."""
  INCLUSION

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value needs to be blank."""
  PRESENT

  """The input value is too short."""
  TOO_SHORT

  """The input value is too long."""
  TOO_LONG

  """The value is invalid for metafield type or for definition options."""
  INVALID_VALUE

  """The type is invalid."""
  INVALID_TYPE

  """
  ApiPermission metafields can only be created or updated by the app owner.
  """
  APP_NOT_AUTHORIZED
}

"""
By default, the Storefront API can't read metafields. To make specific metafields visible in the Storefront API,
you need to create a `MetafieldStorefrontVisibility` record. A `MetafieldStorefrontVisibility` record is a list
of the metafields, defined by the `owner_type`, `namespace`, and `key`, to make visible in the Storefront API.

Learn about [exposing metafields in the Storefront API]
(https://shopify.dev/custom-storefronts/products-collections/metafields)
for more details.
"""
type MetafieldStorefrontVisibility implements LegacyInteroperability & Node {
  """
  The date and time when the metafield was set to visible in the Storefront API.
  """
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The key of a metafield to make visible in the Storefront API."""
  key: String!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The namespace of a metafield to make visible in the Storefront API."""
  namespace: String!

  """The owner type of a metafield to make visible in the Storefront API."""
  ownerType: MetafieldOwnerType!

  """
  The date and time when the `MetafieldStorefrontVisilibty` record was updated.
  """
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple MetafieldStorefrontVisibilities.
"""
type MetafieldStorefrontVisibilityConnection {
  """A list of edges."""
  edges: [MetafieldStorefrontVisibilityEdge!]!

  """A list of the nodes contained in MetafieldStorefrontVisibilityEdge."""
  nodes: [MetafieldStorefrontVisibility!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `metafieldStorefrontVisibilityCreate` mutation."""
type MetafieldStorefrontVisibilityCreatePayload {
  """The `MetafieldStorefrontVisibility` that was created."""
  metafieldStorefrontVisibility: MetafieldStorefrontVisibility

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `metafieldStorefrontVisibilityDelete` mutation."""
type MetafieldStorefrontVisibilityDeletePayload {
  """The ID of the deleted `MetafieldStorefrontVisibility` record."""
  deletedMetafieldStorefrontVisibilityId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one MetafieldStorefrontVisibility and a cursor during pagination.
"""
type MetafieldStorefrontVisibilityEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetafieldStorefrontVisibilityEdge."""
  node: MetafieldStorefrontVisibility!
}

"""The input fields to create a MetafieldStorefrontVisibility record."""
input MetafieldStorefrontVisibilityInput {
  """The namespace of a metafield to make visible in the Storefront API."""
  namespace: String!

  """The key of a metafield to make visible in the Storefront API."""
  key: String!

  """The owner type of a metafield to make visible in the Storefront API."""
  ownerType: MetafieldOwnerType!
}

"""Possible metafield validation statuses."""
enum MetafieldValidationStatus {
  """Any validation status (valid or invalid)."""
  ANY

  """Valid (according to definition)."""
  VALID

  """Invalid (according to definition)."""
  INVALID
}

"""
Legacy type information for the stored value.
Replaced by `type`.
"""
enum MetafieldValueType {
  """A text field."""
  STRING

  """A whole number."""
  INTEGER

  """A JSON string."""
  JSON_STRING

  """A `true` or `false` value."""
  BOOLEAN
}

"""Provides an object instance represented by a MetaobjectDefinition."""
type Metaobject implements Node {
  """Metaobject capabilities for this Metaobject."""
  capabilities: MetaobjectCapabilityData!

  """The MetaobjectDefinition that models this object type."""
  definition: MetaobjectDefinition!

  """The preferred display name field value of the metaobject."""
  displayName: String!

  """
  The field for an object key, or null if the key has no field definition.
  """
  field(
    """The metaobject key to access."""
    key: String!
  ): MetaobjectField

  """
  All ordered fields of the metaobject with their definitions and values.
  """
  fields: [MetaobjectField!]!

  """The unique handle of the object, useful as a custom ID."""
  handle: String!

  """A globally-unique ID."""
  id: ID!

  """List of back references metafields that belong to the resource."""
  referencedBy(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldRelationConnection!

  """The staff member who created the metaobject."""
  staffMember: StaffMember

  """The type of the metaobject."""
  type: String!

  """When the object was last updated."""
  updatedAt: DateTime!
}

"""Provides metaobject definition's access configuration."""
type MetaobjectAccess {
  """
  Access configuration for Admin API surface areas, including the GraphQL Admin API.
  """
  admin: MetaobjectAdminAccess!

  """
  Access configuration for Storefront surface areas, including the GraphQL Storefront API and Liquid.
  """
  storefront: MetaobjectStorefrontAccess!
}

"""The input fields for configuring metaobject access controls."""
input MetaobjectAccessInput {
  """
  Access configuration for Admin API surface areas, including the GraphQL Admin API.
  """
  admin: MetaobjectAdminAccess

  """
  Access configuration for Storefront API surface areas, including the GraphQL Storefront API and Liquid.
  """
  storefront: MetaobjectStorefrontAccess
}

"""
Defines how the metaobjects of a definition can be accessed in admin API surface areas.
"""
enum MetaobjectAdminAccess {
  """Only the application that owns a metaobject can read and write to it."""
  PRIVATE

  """
  Applications that act on behalf of merchants can read metaobjects.
  Only the owning application can write metaobjects.
  """
  MERCHANT_READ

  """
  The owning application, as well as applications that act on behalf of merchants can read and write metaobjects.
  No other applications can read or write metaobjects.
  """
  MERCHANT_READ_WRITE

  """
  All applications with the `metaobjects` access scope can read metaobjects.
  Only the owning application can write metaobjects.
  """
  PUBLIC_READ

  """
  All applications with the `metaobjects` access scope can read and write metaobjects.
  """
  PUBLIC_READ_WRITE
}

"""Return type for `metaobjectBulkDelete` mutation."""
type MetaobjectBulkDeletePayload {
  """The asynchronous job that deletes the metaobjects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""
Specifies the condition by which metaobjects are deleted.
Exactly one field of input is required.
"""
input MetaobjectBulkDeleteWhereCondition {
  """Deletes all metaobjects with the specified `type`."""
  type: String

  """A list of metaobjects IDs to delete."""
  ids: [ID!]
}

"""Provides the capabilities of a metaobject definition."""
type MetaobjectCapabilities {
  """Indicate whether a metaobject definition is publishable."""
  publishable: MetaobjectCapabilitiesPublishable!
}

"""The publishable capability of a metaobject definition."""
type MetaobjectCapabilitiesPublishable {
  """Indicates if the capability is enabled."""
  enabled: Boolean!
}

"""The input fields for creating a metaobject capability."""
input MetaobjectCapabilityCreateInput {
  """The input for enabling the publishable capability."""
  publishable: MetaobjectCapabilityPublishableInput!
}

"""Provides the capabilities of a metaobject."""
type MetaobjectCapabilityData {
  """The publishable capability for this metaobject."""
  publishable: MetaobjectCapabilityDataPublishable
}

"""The input fields for metaobject capabilities."""
input MetaobjectCapabilityDataInput {
  """Publishable capability input."""
  publishable: MetaobjectCapabilityDataPublishableInput
}

"""The publishable capability for the parent metaobject."""
type MetaobjectCapabilityDataPublishable {
  """The visibility status of this metaobject across all channels."""
  status: MetaobjectStatus!
}

"""
The input fields for publishable capability to adjust visibility on channels.
"""
input MetaobjectCapabilityDataPublishableInput {
  """The visibility status of this metaobject across all channels."""
  status: MetaobjectStatus!
}

"""
The input fields for enabling and disabling the publishable capability.
"""
input MetaobjectCapabilityPublishableInput {
  """Indicates whether the capability should be enabled or disabled."""
  enabled: Boolean!
}

"""The input fields for updating a metaobject capability."""
input MetaobjectCapabilityUpdateInput {
  """The input for updating the publishable capability."""
  publishable: MetaobjectCapabilityPublishableInput!
}

"""An auto-generated type for paginating through multiple Metaobjects."""
type MetaobjectConnection {
  """A list of edges."""
  edges: [MetaobjectEdge!]!

  """A list of the nodes contained in MetaobjectEdge."""
  nodes: [Metaobject!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields for creating a metaobject."""
input MetaobjectCreateInput {
  """
  The type of the metaobject. Must match an existing metaobject definition type.
  """
  type: String!

  """
  A unique handle for the metaobject. This value is auto-generated when omitted.
  """
  handle: String

  """
  Values for fields. These are mapped by key to fields of the metaobject definition.
  """
  fields: [MetaobjectFieldInput!]

  """Capabilities for the metaobject."""
  capabilities: MetaobjectCapabilityDataInput
}

"""Return type for `metaobjectCreate` mutation."""
type MetaobjectCreatePayload {
  """The created metaobject."""
  metaobject: Metaobject

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""
Provides the definition of a generic object structure composed of metafields.
"""
type MetaobjectDefinition implements Node {
  """Access configuration for the metaobject definition."""
  access: MetaobjectAccess!

  """The capabilities of the metaobject definition."""
  capabilities: MetaobjectCapabilities!

  """The administrative description."""
  description: String

  """The key of a field to reference as the display name for each object."""
  displayNameKey: String

  """The fields defined for this object type."""
  fieldDefinitions: [MetaobjectFieldDefinition!]!

  """A globally-unique ID."""
  id: ID!

  """
  A paginated connection to the metaobjects associated with the definition.
  """
  metaobjects(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetaobjectConnection!

  """The count of metaobjects created for the definition."""
  metaobjectsCount: Int!

  """The human-readable name."""
  name: String!

  """
  The type of the object definition. Defines the namespace of associated metafields.
  """
  type: String!
}

"""
An auto-generated type for paginating through multiple MetaobjectDefinitions.
"""
type MetaobjectDefinitionConnection {
  """A list of edges."""
  edges: [MetaobjectDefinitionEdge!]!

  """A list of the nodes contained in MetaobjectDefinitionEdge."""
  nodes: [MetaobjectDefinition!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields for creating a metaobject definition."""
input MetaobjectDefinitionCreateInput {
  """
  A human-readable name for the definition. This can be changed at any time.
  """
  name: String

  """An administrative description of the definition."""
  description: String

  """
  The type of the metaobject definition. This can't be changed.
  
  Must be 3-255 characters long and only contain alphanumeric, hyphen, and underscore characters.
  """
  type: String!

  """A set of field definitions to create on this metaobject definition."""
  fieldDefinitions: [MetaobjectFieldDefinitionCreateInput!]!

  """Access configuration for the metaobjects created with this definition."""
  access: MetaobjectAccessInput

  """
  The key of a field to reference as the display name for metaobjects of this type.
  """
  displayNameKey: String

  """The capabilities of the metaobject definition."""
  capabilities: MetaobjectCapabilityCreateInput
}

"""Return type for `metaobjectDefinitionCreate` mutation."""
type MetaobjectDefinitionCreatePayload {
  """The created metaobject definition."""
  metaobjectDefinition: MetaobjectDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""Return type for `metaobjectDefinitionDelete` mutation."""
type MetaobjectDefinitionDeletePayload {
  """The ID of the deleted metaobjects definition."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""
An auto-generated type which holds one MetaobjectDefinition and a cursor during pagination.
"""
type MetaobjectDefinitionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetaobjectDefinitionEdge."""
  node: MetaobjectDefinition!
}

"""The input fields for updating a metaobject definition."""
input MetaobjectDefinitionUpdateInput {
  """A human-readable name for the definition."""
  name: String

  """An administrative description of the definition."""
  description: String

  """A set of operations for modifying field definitions."""
  fieldDefinitions: [MetaobjectFieldDefinitionOperationInput!]

  """Access configuration for the metaobjects created with this definition."""
  access: MetaobjectAccessInput

  """
  The key of a metafield to reference as the display name for objects of this type.
  """
  displayNameKey: String

  """
  Whether the field order should be reset while updating.
  If `true`, then the order is assigned based on submitted fields followed by alphabetized field omissions.
  If `false`, then no changes are made to the existing field order and new fields are appended at the end.
  """
  resetFieldOrder: Boolean = false

  """The capabilities of the metaobject definition."""
  capabilities: MetaobjectCapabilityUpdateInput
}

"""Return type for `metaobjectDefinitionUpdate` mutation."""
type MetaobjectDefinitionUpdatePayload {
  """The updated metaobject definition."""
  metaobjectDefinition: MetaobjectDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""Return type for `metaobjectDelete` mutation."""
type MetaobjectDeletePayload {
  """The ID of the deleted metaobject."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""
An auto-generated type which holds one Metaobject and a cursor during pagination.
"""
type MetaobjectEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of MetaobjectEdge."""
  node: Metaobject!
}

"""Provides a field definition and the data value assigned to it."""
type MetaobjectField {
  """The field definition for this object key."""
  definition: MetaobjectFieldDefinition!

  """The object key of this field."""
  key: String!

  """For resource reference fields, provides the referenced object."""
  reference: MetafieldReference

  """
  For resource reference list fields, provides the list of referenced objects.
  """
  references(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): MetafieldReferenceConnection

  """The type of the field."""
  type: String!

  """
  The assigned field value, always stored as a string regardless of the field type.
  """
  value: String
}

"""
Defines a field for a MetaobjectDefinition with properties
such as the field's data type and validations.
"""
type MetaobjectFieldDefinition {
  """The administrative description."""
  description: String

  """
  A key name used to identify the field within the metaobject composition.
  """
  key: String!

  """The human-readable name."""
  name: String!

  """Required status of the field within the metaobject composition."""
  required: Boolean!

  """The type of data that the field stores."""
  type: MetafieldDefinitionType!

  """
  A list of [validation options](https://shopify.dev/apps/metafields/definitions/validation) for
  the field. For example, a field with the type `date` can set a minimum date requirement.
  """
  validations: [MetafieldDefinitionValidation!]!
}

"""The input fields for creating a metaobject field definition."""
input MetaobjectFieldDefinitionCreateInput {
  """
  The key of the new field definition. This can't be changed.
  
  Must be 3-64 characters long and only contain alphanumeric, hyphen, and underscore characters.
  """
  key: String!

  """The metafield type applied to values of the field."""
  type: String!

  """A human-readable name for the field. This can be changed at any time."""
  name: String

  """An administrative description of the field."""
  description: String

  """Whether metaobjects require a saved value for the field."""
  required: Boolean = false

  """Custom validations that apply to values assigned to the field."""
  validations: [MetafieldDefinitionValidationInput!]
}

"""The input fields for deleting a metaobject field definition."""
input MetaobjectFieldDefinitionDeleteInput {
  """The key of the field definition to delete."""
  key: String!
}

"""
The input fields for possible operations for modifying field definitions. Exactly one option is required.
"""
input MetaobjectFieldDefinitionOperationInput {
  """The input fields for creating a metaobject field definition."""
  create: MetaobjectFieldDefinitionCreateInput

  """The input fields for updating a metaobject field definition."""
  update: MetaobjectFieldDefinitionUpdateInput

  """The input fields for deleting a metaobject field definition."""
  delete: MetaobjectFieldDefinitionDeleteInput
}

"""The input fields for updating a metaobject field definition."""
input MetaobjectFieldDefinitionUpdateInput {
  """The key of the field definition to update."""
  key: String!

  """A human-readable name for the field."""
  name: String

  """An administrative description of the field."""
  description: String

  """Whether metaobjects require a saved value for the field."""
  required: Boolean

  """Custom validations that apply to values assigned to the field."""
  validations: [MetafieldDefinitionValidationInput!]
}

"""The input fields for a metaobject field value."""
input MetaobjectFieldInput {
  """The key of the field."""
  key: String!

  """The value of the field."""
  value: String!
}

"""The input fields for retrieving a metaobject by handle."""
input MetaobjectHandleInput {
  """
  The type of the metaobject. Must match an existing metaobject definition type.
  """
  type: String!

  """The handle of the metaobject to create or update."""
  handle: String!
}

"""Defines visibility status for metaobjects."""
enum MetaobjectStatus {
  """The metaobjects is an internal record."""
  DRAFT

  """The metaobjects is active for public use."""
  ACTIVE
}

"""
Defines how the metaobjects of a definition can be accessed in Storefront API
surface areas, including Liquid and the GraphQL Storefront API.
"""
enum MetaobjectStorefrontAccess {
  """Metaobjects are not accessible in any Storefront API surface area."""
  NONE

  """
  Metaobjects are accessible in the GraphQL Storefront API by any application
  with the `unauthenticated_read_metaobjects` access scope.
  Metaobjects are accessible in online store Liquid templates.
  """
  PUBLIC_READ
}

"""The input fields for updating a metaobject."""
input MetaobjectUpdateInput {
  """A unique handle for the metaobject."""
  handle: String

  """
  Values for fields. These are mapped by key to fields of the metaobject definition.
  """
  fields: [MetaobjectFieldInput!]

  """Capabilities for the metaobject."""
  capabilities: MetaobjectCapabilityDataInput
}

"""Return type for `metaobjectUpdate` mutation."""
type MetaobjectUpdatePayload {
  """The updated metaobject."""
  metaobject: Metaobject

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""The input fields for upserting a metaobject."""
input MetaobjectUpsertInput {
  """The handle of the metaobject."""
  handle: String

  """
  Values for fields. These are mapped by key to fields of the metaobject definition.
  """
  fields: [MetaobjectFieldInput!]

  """Capabilities for the metaobject."""
  capabilities: MetaobjectCapabilityDataInput
}

"""Return type for `metaobjectUpsert` mutation."""
type MetaobjectUpsertPayload {
  """The created or updated metaobject."""
  metaobject: Metaobject

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""Defines errors encountered while managing metaobject resources."""
type MetaobjectUserError implements DisplayableError {
  """The error code."""
  code: MetaobjectUserErrorCode

  """The index of the failing list element in an array."""
  elementIndex: Int

  """The key of the failing object element."""
  elementKey: String

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `MetaobjectUserError`."""
enum MetaobjectUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value isn't included in the list."""
  INCLUSION

  """The input value is already taken."""
  TAKEN

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The input value needs to be blank."""
  PRESENT

  """The input value is blank."""
  BLANK

  """The metafield type is invalid."""
  INVALID_TYPE

  """The value is invalid for the metafield type or the definition options."""
  INVALID_VALUE

  """The value for the metafield definition option was invalid."""
  INVALID_OPTION

  """Duplicate inputs were provided for this field key."""
  DUPLICATE_FIELD_INPUT

  """No metaobject definition found for this type."""
  UNDEFINED_OBJECT_TYPE

  """No field definition found for this key."""
  UNDEFINED_OBJECT_FIELD

  """The specified field key is already in use."""
  OBJECT_FIELD_TAKEN

  """Missing required fields were found for this object."""
  OBJECT_FIELD_REQUIRED

  """The requested record couldn't be found."""
  RECORD_NOT_FOUND

  """An unexpected error occurred."""
  INTERNAL_ERROR

  """The maximum number of metaobjects definitions has been exceeded."""
  MAX_DEFINITIONS_EXCEEDED

  """The maximum number of metaobjects per shop has been exceeded."""
  MAX_OBJECTS_EXCEEDED

  """The targeted object cannot be modified."""
  IMMUTABLE

  """Not authorized."""
  NOT_AUTHORIZED

  """The provided name is reserved for system use."""
  RESERVED_NAME

  """The capability you are using is not enabled."""
  CAPABILITY_NOT_ENABLED
}

"""The set of valid sort keys for the MethodDefinition query."""
enum MethodDefinitionSortKeys {
  """Sort by the `rate_provider_type` value."""
  RATE_PROVIDER_TYPE

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Represents a Shopify hosted 3D model."""
type Model3d implements Media & Node {
  """A word or phrase to share the nature or contents of a media."""
  alt: String

  """The 3d model's bounding box information."""
  boundingBox: Model3dBoundingBox

  """The 3d model's filename."""
  filename: String!

  """A globally-unique ID."""
  id: ID!

  """The media content type."""
  mediaContentType: MediaContentType!

  """Any errors which have occurred on the media."""
  mediaErrors: [MediaError!]!

  """The warnings attached to the media."""
  mediaWarnings: [MediaWarning!]!

  """The 3d model's original source."""
  originalSource: Model3dSource

  """The preview image for the media."""
  preview: MediaPreviewImage

  """The 3d model's sources."""
  sources: [Model3dSource!]!

  """Current status of the media."""
  status: MediaStatus!
}

"""Bounding box information of a 3d model."""
type Model3dBoundingBox {
  """Size in meters of the smallest volume which contains the 3d model."""
  size: Vector3!
}

"""
A source for a Shopify-hosted 3d model.

Types of sources include GLB and USDZ formatted 3d models, where the former
is an original 3d model and the latter has been converted from the original.

If the original source is in GLB format and over 15 MBs in size, then both the
original and the USDZ formatted source are optimized to reduce the file size.
"""
type Model3dSource {
  """The 3d model source's filesize."""
  filesize: Int!

  """The 3d model source's format."""
  format: String!

  """The 3d model source's MIME type."""
  mimeType: String!

  """The 3d model source's URL."""
  url: String!
}

"""
A monetary value string without a currency symbol or code. Example value: `"100.57"`.
"""
scalar Money

"""
A collection of monetary values in their respective currencies. Typically used
in the context of multi-currency pricing and transactions,
when an amount in the shop's currency is converted to the customer's currency of choice (the presentment currency).
"""
type MoneyBag {
  """Amount in presentment currency."""
  presentmentMoney: MoneyV2!

  """Amount in shop currency."""
  shopMoney: MoneyV2!
}

"""The input fields for a monetary value with currency."""
input MoneyInput {
  """Decimal money amount."""
  amount: Decimal!

  """Currency of the money."""
  currencyCode: CurrencyCode!
}

"""A monetary value with currency."""
type MoneyV2 {
  """Decimal money amount."""
  amount: Decimal!

  """Currency of the money."""
  currencyCode: CurrencyCode!
}

"""
The input fields for a single move of an object to a specific position in a set, using a zero-based index.
"""
input MoveInput {
  """The ID of the object to be moved."""
  id: ID!

  """The new position of the object in the set."""
  newPosition: UnsignedInt64!
}

"""The schema's entry point for all mutation operations."""
type Mutation {
  """Updates the email state value for an abandonment."""
  abandonmentEmailStateUpdate(
    """The ID of the abandonment that needs to be updated."""
    id: ID!

    """The new email state of the abandonment."""
    emailState: AbandonmentEmailState!

    """The date and time for when the email was sent, if that is the case."""
    emailSentAt: DateTime

    """The reason why the email was or was not sent."""
    emailStateChangeReason: String
  ): AbandonmentEmailStateUpdatePayload @deprecated(reason: "Use `abandonmentUpdateActivitiesDeliveryStatuses` instead.")

  """
  Allows an app to create a credit for a shop that can be used towards future app purchases.
  """
  appCreditCreate(
    """The description of the app credit."""
    description: String!

    """The amount that can be used towards future app purchases in Shopify."""
    amount: MoneyInput!

    """Specifies whether the app credit is a test transaction."""
    test: Boolean = false
  ): AppCreditCreatePayload @deprecated(reason: "This mutation will be removed in a future version. App credit creation will continue to be available through the Partner API.")

  """
  Charges a shop for features or services one time.
  This type of charge is recommended for apps that aren't billed on a recurring basis.
  Test and demo shops aren't charged.
  """
  appPurchaseOneTimeCreate(
    """The name of the one-time purchase from the app."""
    name: String!

    """The amount to be charged to the store for the app one-time purchase."""
    price: MoneyInput!

    """
    The URL where the merchant is redirected after approving the app one-time purchase.
    """
    returnUrl: URL!

    """
    Whether the app one-time purchase is a test transaction. The default value is `false`.
    """
    test: Boolean = false
  ): AppPurchaseOneTimeCreatePayload

  """
  Creates a record of the attributed revenue for the app. This mutation should
  only be used to capture transactions that are not managed by the Billing API.
  """
  appRevenueAttributionRecordCreate(
    """The app revenue attribution record to be created."""
    appRevenueAttributionRecord: AppRevenueAttributionRecordInput!
  ): AppRevenueAttributionRecordCreatePayload @deprecated(reason: "This mutation will be removed in a future version.")

  """Deletes a record of the attributed revenue for the app."""
  appRevenueAttributionRecordDelete(
    """The unique identifier of the revenue attribution record."""
    id: ID!
  ): AppRevenueAttributionRecordDeletePayload @deprecated(reason: "This mutation will be removed in a future version.")

  """Cancels an app subscription on a store."""
  appSubscriptionCancel(
    """The ID of the app subscription to be cancelled."""
    id: ID!

    """
    Whether to issue prorated credits for the unused portion of the app subscription.  There will
    be a corresponding deduction (based on revenue share) to your Partner account.
    For example, if a $10.00 app subscription (with 0% revenue share) is cancelled and prorated half way
    through the billing cycle, then the merchant will be credited $5.00 and that amount will be deducted
    from your Partner account.
    """
    prorate: Boolean = false
  ): AppSubscriptionCancelPayload

  """
  Allows an app to charge a store for features or services on a recurring basis.
  """
  appSubscriptionCreate(
    """A descriptive name for the app subscription."""
    name: String!

    """
    Attaches one or more pricing plans to an app subscription. Only one pricing plan can be defined for each available type.
    """
    lineItems: [AppSubscriptionLineItemInput!]!

    """
    Whether the app subscription is a test transaction. The default value is `false`.
    """
    test: Boolean

    """
    The number of days of the free trial period, beginning on the day that the merchant approves the app charges.
    """
    trialDays: Int

    """
    The URL pointing to the page where the merchant is redirected after approving the app subscription.
    """
    returnUrl: URL!

    """
    The replacement behavior when creating an app subscription for a merchant with an already existing app subscription.
    """
    replacementBehavior: AppSubscriptionReplacementBehavior = STANDARD
  ): AppSubscriptionCreatePayload

  """
  Updates the capped amount on the usage pricing plan of an app subscription line item.
  """
  appSubscriptionLineItemUpdate(
    """The ID of the app subscription line item to be updated."""
    id: ID!

    """
    The new maximum amount of usage charges that can be incurred within a subscription billing interval.
    """
    cappedAmount: MoneyInput!
  ): AppSubscriptionLineItemUpdatePayload

  """Extends the trial of an app subscription."""
  appSubscriptionTrialExtend(
    """The ID of the app subscription to extend the trial for."""
    id: ID!

    """
    The number of days to extend the trial. The value must be greater than 0 and less than or equal to 1000.
    """
    days: Int!
  ): AppSubscriptionTrialExtendPayload

  """
  Enables an app to charge a store for features or services on a per-use basis.
  The usage charge value is counted towards the `cappedAmount` limit that was
  specified in the `appUsagePricingDetails` field when the app subscription was created.
  If you create an app usage charge that causes the total usage charges in a
  billing interval to exceed the capped amount, then a `Total price exceeds
  balance remaining` error is returned.
  """
  appUsageRecordCreate(
    """
    The ID of the app subscription line item to create the usage record under.
    This app subscription line item must have a usage pricing plan.
    """
    subscriptionLineItemId: ID!

    """The price of the app usage record."""
    price: MoneyInput!

    """The description of the app usage record."""
    description: String!
  ): AppUsageRecordCreatePayload

  """
  Starts the cancelation process of a running bulk operation.
  
  There may be a short delay from when a cancelation starts until the operation is actually canceled.
  """
  bulkOperationCancel(
    """The ID of the bulk operation to cancel."""
    id: ID!
  ): BulkOperationCancelPayload

  """
  Creates and runs a bulk operation mutation.
  
  To learn how to bulk import large volumes of data asynchronously, refer to the
  [bulk import data guide](https://shopify.dev/api/usage/bulk-operations/imports).
  """
  bulkOperationRunMutation(
    """The mutation to be executed in bulk."""
    mutation: String!

    """The staged upload path of the file containing mutation variables."""
    stagedUploadPath: String!

    """An optional identifier which may be used for querying."""
    clientIdentifier: String
  ): BulkOperationRunMutationPayload

  """
  Creates and runs a bulk operation query.
  
  See the [bulk operations guide](https://shopify.dev/api/usage/bulk-operations/imports) for more details.
  """
  bulkOperationRunQuery(
    """The query to be executed in bulk."""
    query: String!
  ): BulkOperationRunQueryPayload

  """Creates product feedback for multiple products."""
  bulkProductResourceFeedbackCreate(
    """An array of inputs to create the feedback. Limited to 50."""
    feedbackInput: [ProductResourceFeedbackInput!]!
  ): BulkProductResourceFeedbackCreatePayload

  """Adds products to a collection."""
  collectionAddProducts(
    """
    The ID of the collection that's being updated. This can't be a smart collection.
    """
    id: ID!

    """
    The IDs of the products that are being added to the collection.
    If any of the products is already present in the input collection,
    then an error is raised and no products are added.
    """
    productIds: [ID!]!
  ): CollectionAddProductsPayload

  """
  Asynchronously adds a set of products to a given collection. It can take a
  long time to run. Instead of returning a collection, it returns a job which
  should be polled.
  """
  collectionAddProductsV2(
    """The ID of the collection that's being updated."""
    id: ID!

    """
    The IDs of the products that are being added to the collection. If the
    collection's sort order is manual, the products will be added in the order
    in which they are provided.
    """
    productIds: [ID!]!
  ): CollectionAddProductsV2Payload

  """Creates a collection."""
  collectionCreate(
    """The properties to use when creating the collection."""
    input: CollectionInput!
  ): CollectionCreatePayload

  """Deletes a collection."""
  collectionDelete(
    """The collection to delete."""
    input: CollectionDeleteInput!
  ): CollectionDeletePayload

  """Publishes a collection to a channel."""
  collectionPublish(
    """
    Specify a collection to publish and the sales channels to publish it to.
    """
    input: CollectionPublishInput!
  ): CollectionPublishPayload @deprecated(reason: "Use `publishablePublish` instead.")

  """
  Removes a set of products from a given collection. The mutation can take a
  long time to run. Instead of returning an updated collection the mutation
  returns a job, which should be
  [polled](https://shopify.dev/api/admin-graphql/latest/queries/job). For use
  with manual collections only.
  """
  collectionRemoveProducts(
    """
    The ID of the collection to remove products from. The ID must reference an existing manual collection.
    """
    id: ID!

    """
    The IDs of products to remove from the collection. The mutation doesn't
    validate that the products belong to the collection or whether the products exist.
    """
    productIds: [ID!]!
  ): CollectionRemoveProductsPayload

  """
  Asynchronously reorders a set of products within a specified collection.
  Instead of returning an updated collection, this mutation returns a job, which
  should be [polled](https://shopify.dev/api/admin-graphql/latest/queries/job). The [`Collection.sortOrder`](https://shopify.dev/api/admin-graphql/latest/objects/Collection#field-collection-sortorder)
  must be `MANUAL`. Displaced products will have their position altered in a
  consistent manner, with no gaps.
  """
  collectionReorderProducts(
    """The ID of the collection on which to reorder products."""
    id: ID!

    """
    A list of moves to perform, which will be evaluated in order. Up to 250
    moves are supported, the `newPosition` does not have to be unique.
    """
    moves: [MoveInput!]!
  ): CollectionReorderProductsPayload

  """Unpublishes a collection."""
  collectionUnpublish(
    """
    Specify a collection to unpublish and the sales channels to remove it from.
    """
    input: CollectionUnpublishInput!
  ): CollectionUnpublishPayload @deprecated(reason: "Use `publishableUnpublish` instead.")

  """Updates a collection."""
  collectionUpdate(
    """The updated properties for the collection."""
    input: CollectionInput!
  ): CollectionUpdatePayload

  """Deletes a list of companies."""
  companiesDelete(
    """A list of IDs of companies to delete."""
    companyIds: [ID!]!
  ): CompaniesDeletePayload

  """Deletes a company address."""
  companyAddressDelete(
    """The ID of the address to delete."""
    addressId: ID!
  ): CompanyAddressDeletePayload

  """Assigns the customer as a company contact."""
  companyAssignCustomerAsContact(
    """The ID of the company to assign the contact to."""
    companyId: ID!

    """The ID of the customer to assign as the contact."""
    customerId: ID!
  ): CompanyAssignCustomerAsContactPayload

  """Assigns the main contact for the company."""
  companyAssignMainContact(
    """The ID of the company to assign the main contact to."""
    companyId: ID!

    """The ID of the company contact to be assigned as the main contact."""
    companyContactId: ID!
  ): CompanyAssignMainContactPayload

  """Assigns a role to a contact for a location."""
  companyContactAssignRole(
    """The ID of the contact to assign a role to."""
    companyContactId: ID!

    """The ID of the role to assign to a contact."""
    companyContactRoleId: ID!

    """The ID of the location to assign a role to a contact."""
    companyLocationId: ID!
  ): CompanyContactAssignRolePayload

  """Assigns roles on a company contact."""
  companyContactAssignRoles(
    """The contact whose roles are being assigned."""
    companyContactId: ID!

    """The new roles to assign."""
    rolesToAssign: [CompanyContactRoleAssign!]!
  ): CompanyContactAssignRolesPayload

  """Creates a company contact."""
  companyContactCreate(
    """The ID of the company that the company contact belongs to."""
    companyId: ID!

    """The fields to use to create the company contact."""
    input: CompanyContactInput!
  ): CompanyContactCreatePayload

  """Deletes a company contact."""
  companyContactDelete(
    """The ID of the company contact to delete."""
    companyContactId: ID!
  ): CompanyContactDeletePayload

  """Revokes a role on a company contact."""
  companyContactRevokeRole(
    """The ID of the contact to revoke a role from."""
    companyContactId: ID!

    """The ID of the role assignment to revoke from a contact."""
    companyContactRoleAssignmentId: ID!
  ): CompanyContactRevokeRolePayload

  """Revokes roles on a company contact."""
  companyContactRevokeRoles(
    """The contact whose roles are being revoked."""
    companyContactId: ID!

    """The current role assignment IDs to revoke."""
    roleAssignmentIds: [ID!]

    """Flag to revoke all roles on the contact."""
    revokeAll: Boolean = false
  ): CompanyContactRevokeRolesPayload

  """Updates a company contact."""
  companyContactUpdate(
    """The ID of the company contact to be updated."""
    companyContactId: ID!

    """The fields to use to update the company contact."""
    input: CompanyContactInput!
  ): CompanyContactUpdatePayload

  """Deletes one or more company contacts."""
  companyContactsDelete(
    """The list of IDs of the company contacts to delete."""
    companyContactIds: [ID!]!
  ): CompanyContactsDeletePayload

  """Creates a company."""
  companyCreate(
    """The fields to use when creating the company."""
    input: CompanyCreateInput!
  ): CompanyCreatePayload

  """Deletes a company."""
  companyDelete(
    """The ID of the company to delete."""
    id: ID!
  ): CompanyDeletePayload

  """Updates an address on a company location."""
  companyLocationAssignAddress(
    """The ID of the company location to update addresses on."""
    locationId: ID!

    """The input fields to use to update the address."""
    address: CompanyAddressInput!

    """The list of address types on the location to update."""
    addressTypes: [CompanyAddressType!]!
  ): CompanyLocationAssignAddressPayload

  """Assigns roles on a company location."""
  companyLocationAssignRoles(
    """The location whose roles are being assigned."""
    companyLocationId: ID!

    """The roles to assign."""
    rolesToAssign: [CompanyLocationRoleAssign!]!
  ): CompanyLocationAssignRolesPayload

  """Assigns tax exemptions to the company location."""
  companyLocationAssignTaxExemptions(
    """The location to which the tax exemptions will be assigned."""
    companyLocationId: ID!

    """The tax exemptions that are being assigned to the location."""
    taxExemptions: [TaxExemption!]!
  ): CompanyLocationAssignTaxExemptionsPayload

  """Creates a company location."""
  companyLocationCreate(
    """The ID of the company that the company location belongs to."""
    companyId: ID!

    """The fields to use to create the company location."""
    input: CompanyLocationInput!
  ): CompanyLocationCreatePayload

  """Creates a tax registration for a company location."""
  companyLocationCreateTaxRegistration(
    """
    The ID of the company location that the tax registration gets assigned to.
    """
    locationId: ID!

    """The unique tax id for the tax registration."""
    taxId: String!
  ): CompanyLocationCreateTaxRegistrationPayload

  """Deletes a company location."""
  companyLocationDelete(
    """The ID of the company location to delete."""
    companyLocationId: ID!
  ): CompanyLocationDeletePayload

  """Revokes roles on a company location."""
  companyLocationRevokeRoles(
    """The location whose roles are being revoked."""
    companyLocationId: ID!

    """The current roles to revoke."""
    rolesToRevoke: [ID!]!
  ): CompanyLocationRevokeRolesPayload

  """Revokes tax exemptions from the company location."""
  companyLocationRevokeTaxExemptions(
    """The location from which the tax exemptions will be revoked."""
    companyLocationId: ID!

    """The tax exemptions that are being revoked from the location."""
    taxExemptions: [TaxExemption!]!
  ): CompanyLocationRevokeTaxExemptionsPayload

  """Revokes tax registration on a company location."""
  companyLocationRevokeTaxRegistration(
    """The location whose tax registration is being revoked."""
    companyLocationId: ID!
  ): CompanyLocationRevokeTaxRegistrationPayload

  """Updates a company location."""
  companyLocationUpdate(
    """The ID of the company location to update."""
    companyLocationId: ID!

    """The input fields to update in the company location."""
    input: CompanyLocationUpdateInput!
  ): CompanyLocationUpdatePayload

  """Deletes a list of company locations."""
  companyLocationsDelete(
    """A list of IDs of company locations to delete."""
    companyLocationIds: [ID!]!
  ): CompanyLocationsDeletePayload

  """Revokes the main contact from the company."""
  companyRevokeMainContact(
    """The ID of the company to revoke the main contact from."""
    companyId: ID!
  ): CompanyRevokeMainContactPayload

  """Updates a company."""
  companyUpdate(
    """The ID of the company to be updated."""
    companyId: ID!

    """The input fields to update the company."""
    input: CompanyInput!
  ): CompanyUpdatePayload

  """Add tax exemptions for the customer."""
  customerAddTaxExemptions(
    """The ID of the customer to update."""
    customerId: ID!

    """
    The list of tax exemptions to add for the customer, in the format of an
    array or a comma-separated list. Example values:
    `["CA_BC_RESELLER_EXEMPTION", "CA_STATUS_CARD_EXEMPTION"]`,
    `"CA_BC_RESELLER_EXEMPTION, CA_STATUS_CARD_EXEMPTION"`.
    """
    taxExemptions: [TaxExemption!]!
  ): CustomerAddTaxExemptionsPayload

  """
  Create a new customer. As of API version 2022-10, apps using protected
  customer data must meet the protected customer data [requirements](https://shopify.dev/apps/store/data-protection/protected-customer-data).
  """
  customerCreate(
    """The input fields to create a customer."""
    input: CustomerInput!
  ): CustomerCreatePayload

  """
  Delete a customer. As of API version 2022-10, apps using protected customer
  data must meet the protected customer data [requirements](https://shopify.dev/apps/store/data-protection/protected-customer-data).
  """
  customerDelete(
    """Specifies the customer to delete."""
    input: CustomerDeleteInput!
  ): CustomerDeletePayload

  """Update a customer's email marketing information information."""
  customerEmailMarketingConsentUpdate(
    """
    Specifies the input fields to update a customer's email marketing consent information.
    """
    input: CustomerEmailMarketingConsentUpdateInput!
  ): CustomerEmailMarketingConsentUpdatePayload

  """Generate an account activation URL for a customer."""
  customerGenerateAccountActivationUrl(
    """The ID of the customer that the URL is generated for."""
    customerId: ID!
  ): CustomerGenerateAccountActivationUrlPayload

  """Creates a credit card payment method for a customer."""
  customerPaymentMethodCreditCardCreate(
    """The ID of the customer."""
    customerId: ID!

    """The billing address."""
    billingAddress: MailingAddressInput!

    """The Cardserver session ID."""
    sessionId: String!
  ): CustomerPaymentMethodCreditCardCreatePayload

  """Updates the credit card payment method for a customer."""
  customerPaymentMethodCreditCardUpdate(
    """The ID of the customer payment method."""
    id: ID!

    """The billing address."""
    billingAddress: MailingAddressInput!

    """The Cardserver session ID."""
    sessionId: String!
  ): CustomerPaymentMethodCreditCardUpdatePayload

  """
  Returns a URL that allows the customer to update a specific payment method.
  
  Currently, `customerPaymentMethodGetUpdateUrl` only supports Shop Pay.
  """
  customerPaymentMethodGetUpdateUrl(
    """The payment method to be updated."""
    customerPaymentMethodId: ID!
  ): CustomerPaymentMethodGetUpdateUrlPayload

  """Creates a PayPal billing agreement for a customer."""
  customerPaymentMethodPaypalBillingAgreementCreate(
    """The ID of the customer."""
    customerId: ID!

    """The billing address."""
    billingAddress: MailingAddressInput

    """
    The billing agreement ID from PayPal that starts with 'B-' (for example, `B-1234XXXXX`).
    """
    billingAgreementId: String!

    """Whether the PayPal billing agreement is inactive."""
    inactive: Boolean = false
  ): CustomerPaymentMethodPaypalBillingAgreementCreatePayload

  """Updates a PayPal billing agreement for a customer."""
  customerPaymentMethodPaypalBillingAgreementUpdate(
    """The ID of the customer payment method."""
    id: ID!

    """The billing address."""
    billingAddress: MailingAddressInput!
  ): CustomerPaymentMethodPaypalBillingAgreementUpdatePayload

  """Create a payment method from remote gateway identifiers."""
  customerPaymentMethodRemoteCreate(
    """The ID of the customer."""
    customerId: ID!

    """Remote gateway payment method details."""
    remoteReference: CustomerPaymentMethodRemoteInput!
  ): CustomerPaymentMethodRemoteCreatePayload

  """Create a payment method from a credit card stored by Stripe."""
  customerPaymentMethodRemoteCreditCardCreate(
    """The ID of the customer."""
    customerId: ID!

    """The Stripe Customer ID."""
    stripeCustomerId: String!

    """The Stripe Payment Method ID."""
    stripePaymentMethodId: String
  ): CustomerPaymentMethodRemoteCreditCardCreatePayload @deprecated(reason: "Use `customerPaymentMethodRemoteCreate` instead.")

  """Revokes a customer's payment method."""
  customerPaymentMethodRevoke(
    """The ID of the customer payment method to be revoked."""
    customerPaymentMethodId: ID!
  ): CustomerPaymentMethodRevokePayload

  """
  Sends a link to the customer so they can update a specific payment method.
  """
  customerPaymentMethodSendUpdateEmail(
    """The payment method to be updated."""
    customerPaymentMethodId: ID!

    """Specifies the payment method update email fields."""
    email: EmailInput
  ): CustomerPaymentMethodSendUpdateEmailPayload

  """Remove tax exemptions from a customer."""
  customerRemoveTaxExemptions(
    """The ID of the customer to update."""
    customerId: ID!

    """
    The list of tax exemptions to remove for the customer, in the format of an
    array or a comma-separated list. Example values:
    `["CA_BC_RESELLER_EXEMPTION", "A_STATUS_CARD_EXEMPTION"]`,
    `"CA_BC_RESELLER_EXEMPTION, CA_STATUS_CARD_EXEMPTION"`.
    """
    taxExemptions: [TaxExemption!]!
  ): CustomerRemoveTaxExemptionsPayload

  """Replace tax exemptions for a customer."""
  customerReplaceTaxExemptions(
    """The ID of the customer to update."""
    customerId: ID!

    """
    The list of tax exemptions that will replace the current exemptions for a
    customer. Can be an array or a comma-separated list.
      Example values: `["CA_BC_RESELLER_EXEMPTION", "A_STATUS_CARD_EXEMPTION"]`,
    `"CA_BC_RESELLER_EXEMPTION, CA_STATUS_CARD_EXEMPTION"`.
    """
    taxExemptions: [TaxExemption!]!
  ): CustomerReplaceTaxExemptionsPayload

  """Creates a customer segment members query."""
  customerSegmentMembersQueryCreate(
    """The input fields to create a customer segment members query."""
    input: CustomerSegmentMembersQueryInput!
  ): CustomerSegmentMembersQueryCreatePayload

  """Update a customer's SMS marketing consent information."""
  customerSmsMarketingConsentUpdate(
    """
    Specifies the input fields to update a customer's SMS marketing consent information.
    """
    input: CustomerSmsMarketingConsentUpdateInput!
  ): CustomerSmsMarketingConsentUpdatePayload

  """
  Update a customer's attributes. As of API version 2022-10, apps using
  protected customer data must meet the protected customer data [requirements](https://shopify.dev/apps/store/data-protection/protected-customer-data).
  """
  customerUpdate(
    """Provides updated fields for the customer."""
    input: CustomerInput!
  ): CustomerUpdatePayload

  """Updates a customer's default address."""
  customerUpdateDefaultAddress(
    """The ID of the customer whose default address is being updated."""
    customerId: ID!

    """The ID of the customer's new default address."""
    addressId: ID!
  ): CustomerUpdateDefaultAddressPayload

  """
  Creates a delegate access token.
  
  To learn more about creating delegate access tokens, refer to
  [Delegate OAuth access tokens to subsystems]
  (https://shopify.dev/apps/auth/oauth/delegate-access-tokens).
  """
  delegateAccessTokenCreate(
    """The input fields for creating a delegate access token."""
    input: DelegateAccessTokenInput!
  ): DelegateAccessTokenCreatePayload

  """Create a delivery profile."""
  deliveryProfileCreate(
    """Specifies the input fields for a delivery profile."""
    profile: DeliveryProfileInput!
  ): deliveryProfileCreatePayload

  """Enqueue the removal of a delivery profile."""
  deliveryProfileRemove(
    """The ID of the delivery profile to remove."""
    id: ID!
  ): deliveryProfileRemovePayload

  """Update a delivery profile."""
  deliveryProfileUpdate(
    """The ID of the delivery profile to update."""
    id: ID!

    """Specifies the input fields for a delivery profile."""
    profile: DeliveryProfileInput!

    """Whether this delivery profile should leave legacy mode."""
    leaveLegacyModeProfiles: Boolean
  ): deliveryProfileUpdatePayload

  """Set the delivery settings for a shop."""
  deliverySettingUpdate(
    """Specifies the input fields for the delivery shop level settings."""
    setting: DeliverySettingInput!
  ): DeliverySettingUpdatePayload

  """
  Assigns a location as the shipping origin while using legacy compatibility mode for multi-location delivery profiles.
  """
  deliveryShippingOriginAssign(
    """The ID of the location to assign as the shipping origin."""
    locationId: ID!
  ): DeliveryShippingOriginAssignPayload

  """Activates an automatic discount."""
  discountAutomaticActivate(
    """The ID of the automatic discount to activate."""
    id: ID!
  ): DiscountAutomaticActivatePayload

  """Creates an app discount."""
  discountAutomaticAppCreate(
    """The input data used to create the app discount."""
    automaticAppDiscount: DiscountAutomaticAppInput!
  ): DiscountAutomaticAppCreatePayload

  """Updates an automatic app discount."""
  discountAutomaticAppUpdate(
    """The ID of the automatic app discount to update."""
    id: ID!

    """The input fields required to update the automatic app discount."""
    automaticAppDiscount: DiscountAutomaticAppInput!
  ): DiscountAutomaticAppUpdatePayload

  """Creates a basic automatic discount."""
  discountAutomaticBasicCreate(
    """The input data used to create the automatic discount."""
    automaticBasicDiscount: DiscountAutomaticBasicInput!
  ): DiscountAutomaticBasicCreatePayload

  """Updates a basic automatic discount."""
  discountAutomaticBasicUpdate(
    """The ID of the automatic discount to update."""
    id: ID!

    """The input data used to update the automatic discount."""
    automaticBasicDiscount: DiscountAutomaticBasicInput!
  ): DiscountAutomaticBasicUpdatePayload

  """
  Asynchronously delete automatic discounts in bulk if a `search` or `saved_search_id` argument is provided or if a
  maximum discount threshold is reached (1,000). Otherwise, deletions will occur inline.
  **Warning:** All automatic discounts will be deleted if a blank `search` argument is provided.
  """
  discountAutomaticBulkDelete(
    """
    The search query for filtering automatic discounts to delete.
    
    For more information on the list of supported fields and search syntax,
    refer to the [AutomaticDiscountNodes query section](https://shopify.dev/api/admin-graphql/latest/queries/automaticDiscountNodes#argument-automaticdiscountnodes-query).
    """
    search: String

    """
    The ID of the saved search to use for filtering automatic discounts to delete.
    """
    savedSearchId: ID

    """The IDs of the automatic discounts to delete."""
    ids: [ID!]
  ): DiscountAutomaticBulkDeletePayload

  """Creates a BXGY automatic discount."""
  discountAutomaticBxgyCreate(
    """The input data used to create the automatic discount."""
    automaticBxgyDiscount: DiscountAutomaticBxgyInput!
  ): DiscountAutomaticBxgyCreatePayload

  """Updates an existing Buy X, Get Y (BXGY) automatic discount."""
  discountAutomaticBxgyUpdate(
    """The ID of the automatic discount to update."""
    id: ID!

    """The input data used to update the automatic discount."""
    automaticBxgyDiscount: DiscountAutomaticBxgyInput!
  ): DiscountAutomaticBxgyUpdatePayload

  """Deactivates an automatic discount."""
  discountAutomaticDeactivate(
    """The ID of the automatic discount to deactivate."""
    id: ID!
  ): DiscountAutomaticDeactivatePayload

  """Deletes an automatic discount."""
  discountAutomaticDelete(
    """The ID of the automatic discount to delete."""
    id: ID!
  ): DiscountAutomaticDeletePayload

  """Activates a code discount."""
  discountCodeActivate(
    """The ID of the code discount to activate."""
    id: ID!
  ): DiscountCodeActivatePayload

  """Creates a code app discount."""
  discountCodeAppCreate(
    """The input data used to create the app discount."""
    codeAppDiscount: DiscountCodeAppInput!
  ): DiscountCodeAppCreatePayload

  """Updates a code app discount."""
  discountCodeAppUpdate(
    """The ID of the code app discount to update."""
    id: ID!

    """The input fields required to update the code app discount."""
    codeAppDiscount: DiscountCodeAppInput!
  ): DiscountCodeAppUpdatePayload

  """Creates a basic code discount."""
  discountCodeBasicCreate(
    """The input data used to create the code discount."""
    basicCodeDiscount: DiscountCodeBasicInput!
  ): DiscountCodeBasicCreatePayload

  """Updates a basic code discount."""
  discountCodeBasicUpdate(
    """The ID of the code discount to update."""
    id: ID!

    """The input data used to update the code discount."""
    basicCodeDiscount: DiscountCodeBasicInput!
  ): DiscountCodeBasicUpdatePayload

  """
  Asynchronously activate code discounts in bulk using a search query, a saved search ID, or a list of code discount IDs.
  """
  discountCodeBulkActivate(
    """
    The search query for filtering code discounts.
    
    For more information on the list of supported fields and search syntax,
    refer to the [CodeDiscountNodes query section](https://shopify.dev/api/admin-graphql/latest/queries/codeDiscountNodes#argument-codediscountnodes-query).
    """
    search: String

    """The ID of the saved search."""
    savedSearchId: ID

    """The IDs of the code discounts to activate."""
    ids: [ID!]
  ): DiscountCodeBulkActivatePayload

  """
  Asynchronously deactivate code discounts in bulk using a search query, a saved search ID, or a list of code discount IDs.
  """
  discountCodeBulkDeactivate(
    """
    The search query for filtering code discounts.
    
    For more information on the list of supported fields and search syntax,
    refer to the [CodeDiscountNodes query section](https://shopify.dev/api/admin-graphql/latest/queries/codeDiscountNodes#argument-codediscountnodes-query).
    """
    search: String

    """The ID of the saved search."""
    savedSearchId: ID

    """The IDs of the code discounts to deactivate."""
    ids: [ID!]
  ): DiscountCodeBulkDeactivatePayload

  """
  Asynchronously delete code discounts in bulk using a search query, a saved search ID, or a list of code discount IDs.
  """
  discountCodeBulkDelete(
    """
    The search query for filtering code discounts to delete.
    
    For more information on the list of supported fields and search syntax,
    refer to the [CodeDiscountNodes query section](https://shopify.dev/api/admin-graphql/latest/queries/codeDiscountNodes#argument-codediscountnodes-query).
    """
    search: String

    """
    The ID of the saved search to use for filtering code discounts to delete.
    """
    savedSearchId: ID

    """The IDs of the code discounts to delete."""
    ids: [ID!]
  ): DiscountCodeBulkDeletePayload

  """Creates a Buy X get Y (BXGY) code discount."""
  discountCodeBxgyCreate(
    """The input data used to create the code discount."""
    bxgyCodeDiscount: DiscountCodeBxgyInput!
  ): DiscountCodeBxgyCreatePayload

  """Updates a Buy X, Get Y (BXGY) code discount."""
  discountCodeBxgyUpdate(
    """The ID of the code discount to update."""
    id: ID!

    """The input data used to update the code discount."""
    bxgyCodeDiscount: DiscountCodeBxgyInput!
  ): DiscountCodeBxgyUpdatePayload

  """Deactivates a code discount."""
  discountCodeDeactivate(
    """The ID of the code discount to deactivate."""
    id: ID!
  ): DiscountCodeDeactivatePayload

  """Deletes a code discount."""
  discountCodeDelete(
    """The ID of the code discount to delete."""
    id: ID!
  ): DiscountCodeDeletePayload

  """Creates a free shipping code discount."""
  discountCodeFreeShippingCreate(
    """The input data used to create the code discount."""
    freeShippingCodeDiscount: DiscountCodeFreeShippingInput!
  ): DiscountCodeFreeShippingCreatePayload

  """Updates a free shipping code discount."""
  discountCodeFreeShippingUpdate(
    """The ID of the code discount to update."""
    id: ID!

    """The input data used to update the code discount."""
    freeShippingCodeDiscount: DiscountCodeFreeShippingInput!
  ): DiscountCodeFreeShippingUpdatePayload

  """
  Asynchronously delete discount redeem codes in bulk. Specify the redeem codes to delete by providing a
  search query, a saved search ID, or a list of redeem code IDs.
  """
  discountCodeRedeemCodeBulkDelete(
    """The ID of the redeem code's discount."""
    discountId: ID!

    """The search query for filtering discount redeem codes."""
    search: String

    """The ID of the saved search."""
    savedSearchId: ID

    """The IDs of the discount redeem codes to delete."""
    ids: [ID!]
  ): DiscountCodeRedeemCodeBulkDeletePayload

  """
  Asynchronously add discount redeem codes in bulk. Specify the codes to add
  and the discount code ID that the codes will belong to.
  """
  discountRedeemCodeBulkAdd(
    """The ID of the code discount that the codes will be added to."""
    discountId: ID!

    """
    The list of codes that will be added to the code discount. Maximum 100 codes permitted.
    """
    codes: [DiscountRedeemCodeInput!]!
  ): DiscountRedeemCodeBulkAddPayload

  """Updates a dispute evidence."""
  disputeEvidenceUpdate(
    """The ID of the dispute evidence to be updated."""
    id: ID!

    """The updated properties for a dispute evidence."""
    input: ShopifyPaymentsDisputeEvidenceUpdateInput!
  ): DisputeEvidenceUpdatePayload

  """Adds tags to multiple draft orders."""
  draftOrderBulkAddTags(
    """
    The conditions for filtering draft orders on.
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax).
    """
    search: String

    """The ID of the draft order saved search for filtering draft orders on."""
    savedSearchId: ID

    """The IDs of the draft orders to add tags to."""
    ids: [ID!]

    """List of tags to be added."""
    tags: [String!]!
  ): DraftOrderBulkAddTagsPayload

  """Deletes multiple draft orders."""
  draftOrderBulkDelete(
    """
    The conditions for filtering draft orders on.
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax).
    """
    search: String

    """The ID of the draft order saved search for filtering draft orders on."""
    savedSearchId: ID

    """The IDs of the draft orders to delete."""
    ids: [ID!]
  ): DraftOrderBulkDeletePayload

  """Removes tags from multiple draft orders."""
  draftOrderBulkRemoveTags(
    """
    The conditions for filtering draft orders on.
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax).
    """
    search: String

    """The ID of the draft order saved search for filtering draft orders on."""
    savedSearchId: ID

    """The IDs of the draft orders to remove tags from."""
    ids: [ID!]

    """List of tags to be removed."""
    tags: [String!]!
  ): DraftOrderBulkRemoveTagsPayload

  """
  Calculates the properties of a draft order. Useful for determining information
  such as total taxes or price without actually creating a draft order.
  """
  draftOrderCalculate(
    """The fields for the draft order."""
    input: DraftOrderInput!
  ): DraftOrderCalculatePayload

  """Completes a draft order and creates an order."""
  draftOrderComplete(
    """The draft order to complete."""
    id: ID!

    """Whether the payment is pending."""
    paymentPending: Boolean = false

    """The gateway for the completed draft order."""
    paymentGatewayId: ID

    """A channel definition handle used for sales channel attribution."""
    sourceName: String
  ): DraftOrderCompletePayload

  """Creates a draft order."""
  draftOrderCreate(
    """The fields used to create the draft order."""
    input: DraftOrderInput!
  ): DraftOrderCreatePayload

  """Creates a Draft Order from Order."""
  draftOrderCreateFromOrder(
    """Specifies the Order's id that we create the Draft Order from."""
    orderId: ID!
  ): DraftOrderCreateFromOrderPayload

  """Creates a merchant checkout for the given draft order."""
  draftOrderCreateMerchantCheckout(
    """Specifies the Draft order's id that we create the checkout for."""
    id: ID!
  ): DraftOrderCreateMerchantCheckoutPayload

  """Deletes a draft order."""
  draftOrderDelete(
    """Specify the draft order to delete by its ID."""
    input: DraftOrderDeleteInput!
  ): DraftOrderDeletePayload

  """Duplicates a draft order."""
  draftOrderDuplicate(
    """The ID of the draft order to duplicate."""
    id: ID
  ): DraftOrderDuplicatePayload

  """Previews a draft order invoice email."""
  draftOrderInvoicePreview(
    """Specifies the draft order invoice email to preview."""
    id: ID!

    """Specifies the draft order invoice email fields."""
    email: EmailInput
  ): DraftOrderInvoicePreviewPayload

  """Sends an email invoice for a draft order."""
  draftOrderInvoiceSend(
    """Specifies the draft order to send the invoice for."""
    id: ID!

    """Specifies the draft order invoice email fields."""
    email: EmailInput
  ): DraftOrderInvoiceSendPayload

  """
  Updates a draft order.
  
  If a checkout has been started for a draft order, any update to the draft will unlink the checkout. Checkouts
  are created but not immediately completed when opening the merchant credit card modal in the admin, and when a
  buyer opens the invoice URL. This is usually fine, but there is an edge case where a checkout is in progress
  and the draft is updated before the checkout completes. This will not interfere with the checkout and order
  creation, but if the link from draft to checkout is broken the draft will remain open even after the order is
  created.
  """
  draftOrderUpdate(
    """Specifies the draft order to update."""
    id: ID!

    """The draft order properties to update."""
    input: DraftOrderInput!
  ): DraftOrderUpdatePayload

  """Creates a new Amazon EventBridge webhook subscription."""
  eventBridgeWebhookSubscriptionCreate(
    """The type of event that triggers the webhook."""
    topic: WebhookSubscriptionTopic!

    """Specifies the input fields for an EventBridge webhook subscription."""
    webhookSubscription: EventBridgeWebhookSubscriptionInput!
  ): EventBridgeWebhookSubscriptionCreatePayload

  """Updates an Amazon EventBridge webhook subscription."""
  eventBridgeWebhookSubscriptionUpdate(
    """The ID of the webhook subscription to update."""
    id: ID!

    """Specifies the input fields for an EventBridge webhook subscription."""
    webhookSubscription: EventBridgeWebhookSubscriptionInput!
  ): EventBridgeWebhookSubscriptionUpdatePayload

  """
  Creates file assets using an external URL or for files that were previously uploaded using the
  [stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stageduploadscreate).
  These files are added to the [Files page](https://shopify.com/admin/settings/files) in Shopify admin.
  """
  fileCreate(
    """List of new files to be created."""
    files: [FileCreateInput!]!
  ): FileCreatePayload

  """Deletes existing file assets that were uploaded to Shopify."""
  fileDelete(
    """The IDs of the files to be deleted."""
    fileIds: [ID!]!
  ): FileDeletePayload

  """Updates an existing file asset that was uploaded to Shopify."""
  fileUpdate(
    """List of files to be updated."""
    files: [FileUpdateInput!]!
  ): FileUpdatePayload

  """
  Triggers any workflows that begin with the trigger specified in the request
  body. To learn more, refer to [_Create Shopify Flow
  triggers_](https://shopify.dev/apps/flow/triggers).
  """
  flowTriggerReceive(
    """The payload needed to run the Trigger."""
    body: String!
  ): FlowTriggerReceivePayload

  """Cancels a fulfillment."""
  fulfillmentCancel(
    """The ID of the fulfillment to be canceled."""
    id: ID!
  ): FulfillmentCancelPayload

  """
  Creates a fulfillment for one or many fulfillment orders.
  The fulfillment orders are associated with the same order and are assigned to the same location.
  """
  fulfillmentCreateV2(
    """The input fields used to create a fulfillment from fulfillment orders."""
    fulfillment: FulfillmentV2Input!

    """An optional message for the fulfillment request."""
    message: String
  ): FulfillmentCreateV2Payload

  """Creates a fulfillment event for a specified fulfillment."""
  fulfillmentEventCreate(
    """The input fields used to create a fulfillment event for a fulfillment."""
    fulfillmentEvent: FulfillmentEventInput!
  ): FulfillmentEventCreatePayload

  """
  Accept a cancellation request sent to a fulfillment service for a fulfillment order.
  """
  fulfillmentOrderAcceptCancellationRequest(
    """
    The ID of the fulfillment order associated with the cancellation request.
    """
    id: ID!

    """An optional reason for accepting the cancellation request."""
    message: String
  ): FulfillmentOrderAcceptCancellationRequestPayload

  """
  Accepts a fulfillment request sent to a fulfillment service for a fulfillment order.
  """
  fulfillmentOrderAcceptFulfillmentRequest(
    """
    The ID of the fulfillment order associated with the fulfillment request.
    """
    id: ID!

    """An optional reason for accepting the fulfillment request."""
    message: String
  ): FulfillmentOrderAcceptFulfillmentRequestPayload

  """Marks a fulfillment order as canceled."""
  fulfillmentOrderCancel(
    """The ID of the fulfillment order to mark as canceled."""
    id: ID!
  ): FulfillmentOrderCancelPayload

  """
  Marks an in-progress fulfillment order as incomplete, indicating the
  fulfillment service is unable to ship any remaining items and intends to close
  the fulfillment order.
  """
  fulfillmentOrderClose(
    """The ID of the fulfillment order to mark as incomplete."""
    id: ID!

    """An optional reason for marking the fulfillment order as incomplete."""
    message: String
  ): FulfillmentOrderClosePayload

  """Applies a fulfillment hold on an open fulfillment order."""
  fulfillmentOrderHold(
    """
    The ID of the fulfillment order on which a fulfillment hold is applied.
    """
    id: ID!

    """The details of the fulfillment hold applied on the fulfillment order."""
    fulfillmentHold: FulfillmentOrderHoldInput!
  ): FulfillmentOrderHoldPayload

  """
  Mark line items associated with a fulfillment order as being ready for pickup by a customer.
  
  Sends a Ready For Pickup notification to the customer to let them know that their order is ready
  to be picked up.
  """
  fulfillmentOrderLineItemsPreparedForPickup(
    """
    The input for marking fulfillment order line items as ready for pickup.
    """
    input: FulfillmentOrderLineItemsPreparedForPickupInput!
  ): FulfillmentOrderLineItemsPreparedForPickupPayload

  """
  Changes the location which is assigned to fulfill a number of unfulfilled fulfillment order line items.
  
  Line items which have already been fulfilled can't be re-assigned
  and will always remain assigned to the original location.
  
  You can't change the assigned location while a fulfillment order has a
  [request status](https://shopify.dev/docs/api/admin-graphql/latest/enums/FulfillmentOrderRequestStatus)
  of `SUBMITTED`, `ACCEPTED`, `CANCELLATION_REQUESTED`, or `CANCELLATION_REJECTED`.
  These request statuses mean that a fulfillment order is awaiting action by a fulfillment service
  and can't be re-assigned without first having the fulfillment service accept a cancellation request.
  This behavior is intended to prevent items from being fulfilled by multiple locations or fulfillment services.
  
  ### How re-assigning line items affects fulfillment orders
  
  **First scenario:** Re-assign all line items belonging to a fulfillment order to a new location.
  
  In this case, the
  [assignedLocation](https://shopify.dev/docs/api/admin-graphql/latest/objects/fulfillmentorder#field-fulfillmentorder-assignedlocation)
  of the original fulfillment order will be updated to the new location.
  
  **Second scenario:** Re-assign a subset of the line items belonging to a fulfillment order to a new location.
  You can specify a subset of line items using the `fulfillmentOrderLineItems` parameter
  (available as of the `2023-04` API version),
  or specify that the original fulfillment order contains line items which have already been fulfilled.
  
  If the new location is already assigned to another active fulfillment order, on the same order,
  then the line items are moved to the existing fulfillment order.
  Otherwise, a new fulfillment order is created for the new location, and the line items are moved to the new location.
  """
  fulfillmentOrderMove(
    """The ID of the fulfillment order to be moved."""
    id: ID!

    """The ID of the location where the fulfillment order will be moved."""
    newLocationId: ID!
  ): FulfillmentOrderMovePayload

  """Marks a scheduled fulfillment order as open."""
  fulfillmentOrderOpen(
    """The ID of the fulfillment order to mark as open."""
    id: ID!
  ): FulfillmentOrderOpenPayload

  """
  Rejects a cancellation request sent to a fulfillment service for a fulfillment order.
  """
  fulfillmentOrderRejectCancellationRequest(
    """
    The ID of the fulfillment order associated with the cancellation request.
    """
    id: ID!

    """An optional reason for rejecting the cancellation request."""
    message: String
  ): FulfillmentOrderRejectCancellationRequestPayload

  """
  Rejects a fulfillment request sent to a fulfillment service for a fulfillment order.
  """
  fulfillmentOrderRejectFulfillmentRequest(
    """
    The ID of the fulfillment order associated with the fulfillment request.
    """
    id: ID!

    """The reason for the fulfillment order rejection."""
    reason: FulfillmentOrderRejectionReason

    """An optional reason for rejecting the fulfillment request."""
    message: String

    """
    An optional array of line item rejection details. If none are provided, all
    line items will be assumed to be unfulfillable.
    
    **Note**: After the fulfillment request has been rejected, none of the line
    items will be able to be fulfilled. This field documents which line items
    specifically were unable to be fulfilled and why.
    """
    lineItems: [IncomingRequestLineItemInput!]
  ): FulfillmentOrderRejectFulfillmentRequestPayload

  """Releases the fulfillment hold on a fulfillment order."""
  fulfillmentOrderReleaseHold(
    """
    The ID of the fulfillment order for which to release the fulfillment hold.
    """
    id: ID!

    """
    A configurable ID used to track the automation system releasing this hold.
    """
    externalId: String
  ): FulfillmentOrderReleaseHoldPayload

  """Reschedules a scheduled fulfillment order."""
  fulfillmentOrderReschedule(
    """The ID of the fulfillment order to reschedule."""
    id: ID!

    """The new fulfill at date of the fulfillment order."""
    fulfillAt: DateTime!
  ): FulfillmentOrderReschedulePayload

  """
  Sends a cancellation request to the fulfillment service of a fulfillment order.
  """
  fulfillmentOrderSubmitCancellationRequest(
    """
    The ID of the fulfillment order associated with the cancellation request.
    """
    id: ID!

    """An optional reason for the cancellation request."""
    message: String
  ): FulfillmentOrderSubmitCancellationRequestPayload

  """
  Sends a fulfillment request to the fulfillment service of a fulfillment order.
  """
  fulfillmentOrderSubmitFulfillmentRequest(
    """The ID of the fulfillment order associated with fulfillment request."""
    id: ID!

    """An optional message for the fulfillment request."""
    message: String

    """
    Whether the customer should be notified when fulfillments are created for this fulfillment order.
    """
    notifyCustomer: Boolean

    """
    The fulfillment order line items to be requested for fulfillment.
    If left blank, all line items of the fulfillment order are requested for fulfillment.
    """
    fulfillmentOrderLineItems: [FulfillmentOrderLineItemInput!]

    """
    A reference to the [ShippingMethod](https://shopify.dev/api/admin-graphql/latest/objects/shippingmethod)
    code, such as `FREE_SHIPPING`.
    """
    shippingMethod: String
  ): FulfillmentOrderSubmitFulfillmentRequestPayload

  """Releases the fulfillment holds on a list of fulfillment orders."""
  fulfillmentOrdersReleaseHolds(
    """
    The IDs of the fulfillment orders for which to release the fulfillment holds.
    """
    ids: [ID!]!

    """
    A configurable ID used to track the automation system releasing these holds.
    """
    externalId: String
  ): FulfillmentOrdersReleaseHoldsPayload

  """
  Sets the latest date and time by which the fulfillment orders need to be fulfilled.
  """
  fulfillmentOrdersSetFulfillmentDeadline(
    """The IDs of the fulfillment orders for which the deadline is being set."""
    fulfillmentOrderIds: [ID!]!

    """The new fulfillment deadline of the fulfillment orders."""
    fulfillmentDeadline: DateTime!
  ): FulfillmentOrdersSetFulfillmentDeadlinePayload

  """Creates a fulfillment service."""
  fulfillmentServiceCreate(
    """The name of the fulfillment service."""
    name: String!

    """
    The URL to send requests for the fulfillment service. The following considerations apply:
    
    - Shopify queries the <code>callback_url/fetch_tracking_numbers</code> endpoint to retrieve tracking numbers
        for orders, if `trackingSupport` is set to `true`.
    - Shopify queries the <code>callback_url/fetch_stock</code> endpoint to retrieve inventory levels,
        if `inventoryManagement` is set to `true`.
    - Shopify uses the <code>callback_url/fulfillment_order_notification</code> endpoint to send
        [fulfillment and cancellation requests](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-2-receive-fulfillment-requests-and-cancellations).
    """
    callbackUrl: URL!

    """
    Whether the fulfillment service provides tracking numbers for packages.
    """
    trackingSupport: Boolean = false

    """
    Whether the fulfillment service uses the [fulfillment order based workflow](
      https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments
    ) for managing fulfillments.
    
    [As of 2022-07 API version](https://shopify.dev/changelog/legacy-fulfillment-api-deprecation),
    the fulfillment order based workflow is the only way to manage fulfillments,
    and `fulfillmentOrdersOptIn` must be set to `true`.
    """
    fulfillmentOrdersOptIn: Boolean!

    """
    Whether the fulfillment service can stock inventory alongside other locations.
    """
    permitsSkuSharing: Boolean = false

    """
    Whether the fulfillment service manages product inventory and provides updates to Shopify.
    """
    inventoryManagement: Boolean = false
  ): FulfillmentServiceCreatePayload

  """Deletes a fulfillment service."""
  fulfillmentServiceDelete(
    """The ID of the fulfillment service to delete."""
    id: ID!

    """
    The ID of the location where inventory and commitments will be relocated
    after the fulfillment service is deleted.
    """
    destinationLocationId: ID
  ): FulfillmentServiceDeletePayload

  """Updates a fulfillment service."""
  fulfillmentServiceUpdate(
    """The id of the fulfillment service."""
    id: ID!

    """The name of the fulfillment service."""
    name: String

    """
    The URL to send requests for the fulfillment service. The following considerations apply:
    
    - Shopify queries the <code>callback_url/fetch_tracking_numbers</code> endpoint to retrieve tracking numbers
        for orders, if `trackingSupport` is set to `true`.
    - Shopify queries the <code>callback_url/fetch_stock</code> endpoint to retrieve inventory levels,
        if `inventoryManagement` is set to `true`.
    - Shopify uses the <code>callback_url/fulfillment_order_notification</code> endpoint to send
        [fulfillment and cancellation requests](https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments#step-2-receive-fulfillment-requests-and-cancellations).
    """
    callbackUrl: URL

    """
    Whether the fulfillment service provides tracking numbers for packages.
    """
    trackingSupport: Boolean

    """
    Whether the fulfillment service uses the [fulfillment order based workflow](
      https://shopify.dev/apps/fulfillment/fulfillment-service-apps/manage-fulfillments
    ) for managing fulfillments.
    
    [As of 2022-07 API version](https://shopify.dev/changelog/legacy-fulfillment-api-deprecation),
    the fulfillment order based workflow is the only way to manage fulfillments,
    and `true` is the only valid value for `fulfillmentOrdersOptIn`.
    """
    fulfillmentOrdersOptIn: Boolean

    """
    Whether the fulfillment service can stock inventory alongside other locations.
    """
    permitsSkuSharing: Boolean
  ): FulfillmentServiceUpdatePayload

  """Updates tracking information for a fulfillment."""
  fulfillmentTrackingInfoUpdateV2(
    """The ID of the fulfillment."""
    fulfillmentId: ID!

    """
    The tracking input for the mutation, including tracking URL, number, and company.
    """
    trackingInfoInput: FulfillmentTrackingInput!

    """
    Whether the customer will be notified of this update and future updates for the fulfillment.
    If this field is left blank, then notifications won't be sent to the customer when the fulfillment is updated.
    """
    notifyCustomer: Boolean
  ): FulfillmentTrackingInfoUpdateV2Payload

  """Create a gift card."""
  giftCardCreate(
    """The input fields to create a gift card."""
    input: GiftCardCreateInput!
  ): GiftCardCreatePayload

  """
  Disable a gift card. A disabled gift card cannot be used by a customer. A disabled gift card cannot be re-enabled.
  """
  giftCardDisable(
    """The ID of the gift card to disable."""
    id: ID!
  ): GiftCardDisablePayload

  """Update a gift card."""
  giftCardUpdate(
    """The ID of the gift card to be updated."""
    id: ID!

    """The input fields to update the gift card."""
    input: GiftCardUpdateInput!
  ): GiftCardUpdatePayload

  """Activate an inventory item at a location."""
  inventoryActivate(
    """The ID of the inventory item to activate."""
    inventoryItemId: ID!

    """The ID of the location of the inventory item being activated."""
    locationId: ID!

    """
    The initial available quantity of the inventory item being activated at the location.
    """
    available: Int

    """
    The initial on_hand quantity of the inventory item being activated at the location.
    """
    onHand: Int
  ): InventoryActivatePayload

  """Apply changes to inventory quantities."""
  inventoryAdjustQuantities(
    """The information required to adjust inventory quantities."""
    input: InventoryAdjustQuantitiesInput!
  ): InventoryAdjustQuantitiesPayload

  """Adjusts the inventory by a certain quantity."""
  inventoryAdjustQuantity(
    """Provides the input fields required to update an inventory level."""
    input: InventoryAdjustQuantityInput!
  ): InventoryAdjustQuantityPayload @deprecated(reason: "Use `inventoryAdjustQuantities` instead.")

  """Adjusts the inventory at a location for multiple inventory items."""
  inventoryBulkAdjustQuantityAtLocation(
    """Specifies adjustments for items."""
    inventoryItemAdjustments: [InventoryAdjustItemInput!]!

    """Specifies where the item should be adjusted."""
    locationId: ID!
  ): InventoryBulkAdjustQuantityAtLocationPayload @deprecated(reason: "Use `inventoryAdjustQuantities` instead.")

  """
  Modify the activation status of an inventory item at locations. Activating an
  inventory item at a particular location allows that location to stock that
  inventory item. Deactivating an inventory item at a location removes the
  inventory item's quantities and turns off the inventory item from that location.
  """
  inventoryBulkToggleActivation(
    """
    The ID of the inventory item to modify the activation status locations for.
    """
    inventoryItemId: ID!

    """
    A list of pairs of locations and activate status to update for the specified inventory item.
    """
    inventoryItemUpdates: [InventoryBulkToggleActivationInput!]!
  ): InventoryBulkToggleActivationPayload

  """
  Removes an inventory item's quantities from a location, and turns off inventory at the location.
  """
  inventoryDeactivate(
    """The ID of the inventory level to deactivate."""
    inventoryLevelId: ID!
  ): InventoryDeactivatePayload

  """Updates an inventory item."""
  inventoryItemUpdate(
    """The ID of the inventory item to update."""
    id: ID!

    """
    The input fields that update an [`inventoryItem`](https://shopify.dev/api/admin-graphql/latest/queries/inventoryitem).
    """
    input: InventoryItemUpdateInput!
  ): InventoryItemUpdatePayload

  """Moves inventory between inventory quantity names at a single location."""
  inventoryMoveQuantities(
    """The information required to move inventory quantities."""
    input: InventoryMoveQuantitiesInput!
  ): InventoryMoveQuantitiesPayload

  """Set inventory on-hand quantities using absolute values."""
  inventorySetOnHandQuantities(
    """The information required to set inventory on hand quantities."""
    input: InventorySetOnHandQuantitiesInput!
  ): InventorySetOnHandQuantitiesPayload

  """Activates a location."""
  locationActivate(
    """The ID of a location to activate."""
    locationId: ID!
  ): LocationActivatePayload

  """Adds a new location."""
  locationAdd(
    """The properties of the location to add."""
    input: LocationAddInput!
  ): LocationAddPayload

  """
  Deactivates a location and moves inventory, pending orders, and moving transfers to a destination location.
  """
  locationDeactivate(
    """The ID of a location to deactivate."""
    locationId: ID!

    """
    The ID of a destination location to which inventory, pending orders and
    moving transfers will be moved from the location to deactivate.
    """
    destinationLocationId: ID
  ): LocationDeactivatePayload

  """Deletes a location."""
  locationDelete(
    """The ID of a location to delete."""
    locationId: ID!
  ): LocationDeletePayload

  """Edits an existing location."""
  locationEdit(
    """The ID of a location to edit."""
    id: ID!

    """The updated properties for the location."""
    input: LocationEditInput!
  ): LocationEditPayload

  """Disables local pickup for a location."""
  locationLocalPickupDisable(
    """The ID of the location to disable local pickup for."""
    locationId: ID!
  ): LocationLocalPickupDisablePayload

  """Enables local pickup for a location."""
  locationLocalPickupEnable(
    """The settings required to enable local pickup for a location."""
    localPickupSettings: DeliveryLocationLocalPickupEnableInput!
  ): LocationLocalPickupEnablePayload

  """Creates a new market."""
  marketCreate(
    """The properties of the new market."""
    input: MarketCreateInput!
  ): MarketCreatePayload

  """Updates currency settings of a market."""
  marketCurrencySettingsUpdate(
    """The ID of the market definition to target."""
    marketId: ID!

    """Properties to update for the market currency settings."""
    input: MarketCurrencySettingsUpdateInput!
  ): MarketCurrencySettingsUpdatePayload

  """Deletes a market definition."""
  marketDelete(
    """The ID of the market to delete."""
    id: ID!
  ): MarketDeletePayload

  """Creates or updates market localizations."""
  marketLocalizationsRegister(
    """
    The ID of the resource that is being localized within the context of a market.
    """
    resourceId: ID!

    """The input fields for a market localization."""
    marketLocalizations: [MarketLocalizationRegisterInput!]!
  ): MarketLocalizationsRegisterPayload

  """Deletes market localizations."""
  marketLocalizationsRemove(
    """
    The ID of the resource for which market localizations are being deleted.
    """
    resourceId: ID!

    """The list of market localization keys."""
    marketLocalizationKeys: [String!]!

    """The list of market IDs."""
    marketIds: [ID!]!
  ): MarketLocalizationsRemovePayload

  """Deletes a market region."""
  marketRegionDelete(
    """The ID of the market region to delete."""
    id: ID!
  ): MarketRegionDeletePayload

  """Creates regions that belong to an existing market."""
  marketRegionsCreate(
    """The ID of the market to add the regions to."""
    marketId: ID!

    """The regions to be created."""
    regions: [MarketRegionCreateInput!]!
  ): MarketRegionsCreatePayload

  """Updates the properties of a market."""
  marketUpdate(
    """The ID of the market to update."""
    id: ID!

    """The properties to update."""
    input: MarketUpdateInput!
  ): MarketUpdatePayload

  """Creates a web presence for a market."""
  marketWebPresenceCreate(
    """The ID of the market for which to create a web presence."""
    marketId: ID!

    """The details of the web presence to be created."""
    webPresence: MarketWebPresenceCreateInput!
  ): MarketWebPresenceCreatePayload

  """Deletes a market web presence."""
  marketWebPresenceDelete(
    """The ID of the market for which to delete the web presence."""
    marketId: ID!
  ): MarketWebPresenceDeletePayload

  """Updates a market web presence."""
  marketWebPresenceUpdate(
    """The ID of the market for which to update the web presence."""
    marketId: ID!

    """The web_presence fields used to update the market's web presence."""
    webPresence: MarketWebPresenceUpdateInput!
  ): MarketWebPresenceUpdatePayload

  """Create new marketing activity."""
  marketingActivityCreate(
    """The Input of marketing activity create."""
    input: MarketingActivityCreateInput!
  ): MarketingActivityCreatePayload

  """Creates a new external marketing activity."""
  marketingActivityCreateExternal(
    """The input field for creating a external marketing activity."""
    input: MarketingActivityCreateExternalInput!
  ): MarketingActivityCreateExternalPayload

  """Updates a marketing activity with the latest information."""
  marketingActivityUpdate(
    """The Input of the marketing activity."""
    input: MarketingActivityUpdateInput!
  ): MarketingActivityUpdatePayload

  """Update an external marketing activity."""
  marketingActivityUpdateExternal(
    """The input to update the external marketing activity."""
    input: MarketingActivityUpdateExternalInput!

    """
    The ID of the marketing activity. You must provide one of the following
    values: marketing activity ID, remote ID, or UTM must be provided.
    """
    marketingActivityId: ID

    """
    The remote ID of the marketing event associated with the marketing activity.
    You must provide one of the following values: marketing activity ID, remote
    ID, or UTM must be provided.
    """
    remoteId: String

    """
    The UTM parameters associated with marketing activities to filter by.You
    must provide one of the following values: marketing activity ID, remote ID,
    or UTM must be provided.
    """
    utm: UTMInput
  ): MarketingActivityUpdateExternalPayload

  """
  Creates a new marketing event engagement for a marketing activity or a marketing channel.
  """
  marketingEngagementCreate(
    """
    The identifier of the marketing activity created using one of the MarketingActivity APIs.
    """
    marketingActivityId: ID!

    """The marketing engagement's attributes."""
    marketingEngagement: MarketingEngagementInput!
  ): MarketingEngagementCreatePayload

  """Creates a metafield definition."""
  metafieldDefinitionCreate(
    """Specifies the input fields for a metafield definition."""
    definition: MetafieldDefinitionInput!
  ): MetafieldDefinitionCreatePayload

  """
  Delete a metafield definition.
  Optionally deletes all associated metafields asynchronously when specified.
  """
  metafieldDefinitionDelete(
    """The id of the metafield definition to delete."""
    id: ID!

    """Whether to delete all associated metafields."""
    deleteAllAssociatedMetafields: Boolean = false
  ): MetafieldDefinitionDeletePayload

  """
  You can organize your metafields in your Shopify admin by pinning/unpinning metafield definitions.
  The order of your pinned metafield definitions determines the order in which your metafields are displayed
  on the corresponding pages in your Shopify admin. By default, only pinned metafields are automatically displayed.
  """
  metafieldDefinitionPin(
    """The ID of the metafield definition to pin."""
    definitionId: ID!
  ): MetafieldDefinitionPinPayload

  """
  You can organize your metafields in your Shopify admin by pinning/unpinning metafield definitions.
  The order of your pinned metafield definitions determines the order in which your metafields are displayed
  on the corresponding pages in your Shopify admin. By default, only pinned metafields are automatically displayed.
  """
  metafieldDefinitionUnpin(
    """The ID of the metafield definition to unpin."""
    definitionId: ID!
  ): MetafieldDefinitionUnpinPayload

  """Updates a metafield definition."""
  metafieldDefinitionUpdate(
    """The input fields for the metafield definition update."""
    definition: MetafieldDefinitionUpdateInput!
  ): MetafieldDefinitionUpdatePayload

  """Deletes a metafield."""
  metafieldDelete(input: MetafieldDeleteInput!): MetafieldDeletePayload

  """
  Creates a `MetafieldStorefrontVisibility` record to make all metafields that belong to the specified resource
  and have the established `namespace` and `key` combination visible in the Storefront API.
  """
  metafieldStorefrontVisibilityCreate(
    """
    Specifies the input fields for a `MetafieldStorefrontVisibility` record.
    """
    input: MetafieldStorefrontVisibilityInput!
  ): MetafieldStorefrontVisibilityCreatePayload

  """
  Deletes a `MetafieldStorefrontVisibility` record. All metafields that belongs to the specified record will no
  longer be visible in the Storefront API.
  """
  metafieldStorefrontVisibilityDelete(
    """The ID of the `MetafieldStorefrontVisibility` record to delete."""
    id: ID!
  ): MetafieldStorefrontVisibilityDeletePayload

  """
  Sets metafield values. Metafield values will be set regardless if they were previously created or not.
  
  Allows a maximum of 25 metafields to be set at a time.
  
  Note that this operation is atomic as of `2023-01`, meaning no changes are persisted if any error is
  encountered.
  """
  metafieldsSet(
    """The list of metafield values to set. Maximum of 25."""
    metafields: [MetafieldsSetInput!]!
  ): MetafieldsSetPayload

  """
  Asynchronously delete metaobjects and their associated metafields in bulk.
  """
  metaobjectBulkDelete(
    """
    Specifies the condition by which metaobjects are deleted.
    Exactly one field of input is required.
    """
    where: MetaobjectBulkDeleteWhereCondition!
  ): MetaobjectBulkDeletePayload

  """Creates a new metaobject."""
  metaobjectCreate(
    """The parameters for the metaobject to create."""
    metaobject: MetaobjectCreateInput!
  ): MetaobjectCreatePayload

  """Creates a new metaobject definition."""
  metaobjectDefinitionCreate(
    """The input fields for creating a metaobject definition."""
    definition: MetaobjectDefinitionCreateInput!
  ): MetaobjectDefinitionCreatePayload

  """
  Deletes the specified metaobject definition.
  Also deletes all related metafield definitions, metaobjects, and metafields asynchronously.
  """
  metaobjectDefinitionDelete(
    """The ID of the metaobjects definition to delete."""
    id: ID!
  ): MetaobjectDefinitionDeletePayload

  """
  Updates a metaobject definition with new settings and metafield definitions.
  """
  metaobjectDefinitionUpdate(
    """The ID of the metaobject definition to update."""
    id: ID!

    """The input fields for updating a metaobject definition."""
    definition: MetaobjectDefinitionUpdateInput!
  ): MetaobjectDefinitionUpdatePayload

  """Deletes the specified metaobject and its associated metafields."""
  metaobjectDelete(
    """The ID of the metaobject to delete."""
    id: ID!
  ): MetaobjectDeletePayload

  """Updates an existing metaobject."""
  metaobjectUpdate(
    """The ID of the metaobject to update."""
    id: ID!

    """Specifies parameters to update on the metaobject."""
    metaobject: MetaobjectUpdateInput!
  ): MetaobjectUpdatePayload

  """
  Retrieves a metaobject by handle, then updates it with the provided input values.
  If no matching metaobject is found, a new metaobject is created with the provided input values.
  """
  metaobjectUpsert(
    """The identifier of the metaobject to upsert."""
    handle: MetaobjectHandleInput!

    """The parameters to upsert the metaobject."""
    metaobject: MetaobjectUpsertInput!
  ): MetaobjectUpsertPayload

  """
  Captures payment for an authorized transaction on an order. An order can only
  be captured if it has a successful authorization transaction. Capturing an
  order will claim the money reserved by the authorization.
  """
  orderCapture(
    """The input for the mutation."""
    input: OrderCaptureInput!
  ): OrderCapturePayload

  """Closes an open order."""
  orderClose(
    """The input for the mutation."""
    input: OrderCloseInput!
  ): OrderClosePayload

  """Creates a payment for an order by mandate."""
  orderCreateMandatePayment(
    """The ID of the order to collect the balance for."""
    id: ID!

    """The ID of the payment schedule to collect the balance for."""
    paymentScheduleId: ID

    """A unique key to identify the payment request."""
    idempotencyKey: String!

    """The mandate ID used for payment."""
    mandateId: ID!

    """
    Whether the payment should be authorized or captured. If `false`, then the authorization of
                the payment is triggered.
    """
    autoCapture: Boolean = true
  ): OrderCreateMandatePaymentPayload

  """
  Adds a custom line item to an existing order. For example, you could add a
  gift wrapping service as a [custom line item](https://shopify.dev/apps/fulfillment/order-management-apps/order-editing#add-a-custom-line-item).
  To learn how to edit existing orders, refer to [Edit an existing order with Admin API](https://shopify.dev/apps/fulfillment/order-management-apps/order-editing).
  """
  orderEditAddCustomItem(
    """
    The ID of the [calculated order](https://shopify.dev/api/admin-graphql/latest/objects/calculatedorder)
    to which the custom item is added.
    """
    id: ID!

    """The name of the custom item to add."""
    title: String!

    """
    The ID of the retail [location](https://shopify.dev/api/admin-graphql/latest/objects/location)
    (if applicable) from which the custom item is sold. Used for tax
    calculations. A default location will be chosen automatically if none is provided.
    """
    locationId: ID

    """The unit price of the custom item. This value can't be negative."""
    price: MoneyInput!

    """The quantity of the custom item. This value must be greater than zero."""
    quantity: Int!

    """Whether the custom item is taxable. Defaults to `true`."""
    taxable: Boolean

    """Whether the custom item requires shipping. Defaults to `false`."""
    requiresShipping: Boolean
  ): OrderEditAddCustomItemPayload

  """
  Adds a discount to a newly added line item on the current order edit. More
  information on how to use the GraphQL Admin API to edit an existing order,
  refer to [Edit existing orders](https://shopify.dev/apps/fulfillment/order-management-apps/order-editing).
  """
  orderEditAddLineItemDiscount(
    """The ID of the calculated order to update."""
    id: ID!

    """The ID of a newly added calculated line item to add the discount to."""
    lineItemId: ID!

    """The discount to add to the line item."""
    discount: OrderEditAppliedDiscountInput!
  ): OrderEditAddLineItemDiscountPayload

  """Adds a line item from an existing product variant."""
  orderEditAddVariant(
    """
    The ID of the [calculated order](https://shopify.dev/api/admin-graphql/latest/objects/calculatedorder)
    to edit.
    """
    id: ID!

    """The ID of the variant to add."""
    variantId: ID!

    """
    The ID of the [location](https://shopify.dev/api/admin-graphql/latest/objects/location)
    to check for inventory availability. A default location ID is chosen automatically if none is provided.
    """
    locationId: ID

    """
    The quantity of the item to add to the order. Must be a positive value.
    """
    quantity: Int!

    """
    Whether the mutation can create a line item for a variant that's already on the calculated order.
    """
    allowDuplicates: Boolean = false
  ): OrderEditAddVariantPayload

  """
  Starts editing an order. Mutations are operating on `OrderEdit`.
  All order edits start with `orderEditBegin`, have any number of `orderEdit`*
  mutations made, and end with `orderEditCommit`.
  """
  orderEditBegin(
    """The ID of the order to begin editing."""
    id: ID!
  ): OrderEditBeginPayload

  """
  Applies and saves staged changes to an order. Mutations are operating on `OrderEdit`.
  All order edits start with `orderEditBegin`, have any number of `orderEdit`*
  mutations made, and end with `orderEditCommit`.
  """
  orderEditCommit(
    """
    The ID of the calculated order that will have its changes applied to the order.
    """
    id: ID!

    """Whether to notify the customer or not."""
    notifyCustomer: Boolean

    """Note for staff members."""
    staffNote: String
  ): OrderEditCommitPayload

  """
  Removes a line item discount that was applied as part of an order edit.
  """
  orderEditRemoveLineItemDiscount(
    """
    The ID of the [calculated order](https://shopify.dev/api/admin-graphql/latest/objects/calculatedorder)
    from which to remove the discount.
    """
    id: ID!

    """
    The ID of the [calculated discount application](https://shopify.dev/api/admin-graphql/latest/interfaces/calculateddiscountapplication)
    to remove.
    """
    discountApplicationId: ID!
  ): OrderEditRemoveLineItemDiscountPayload

  """
  Sets the quantity of a line item on an order that is being edited. More
  information on how to use the GraphQL Admin API to edit an existing order,
  refer to [Edit existing orders](https://shopify.dev/apps/fulfillment/order-management-apps/order-editing).
  """
  orderEditSetQuantity(
    """
    The ID of the calculated order to edit. The edit changes the quantity on the line item.
    """
    id: ID!

    """The ID of the line item to edit."""
    lineItemId: ID!

    """
    The new quantity to set for the line item. This value cannot be negative.
    """
    quantity: Int!

    """
    Whether or not to restock the line item when the updated quantity is less than the original quantity.
    """
    restock: Boolean
  ): OrderEditSetQuantityPayload

  """Sends an email invoice for an order."""
  orderInvoiceSend(
    """The order associated with the invoice."""
    id: ID!

    """
    The email input fields for the order invoice. The `bcc` and `from` fields should be store or staff account emails.
    """
    email: EmailInput
  ): OrderInvoiceSendPayload

  """
  Marks an order as paid. You can only mark an order as paid if it isn't already fully paid.
  """
  orderMarkAsPaid(
    """The input for the mutation."""
    input: OrderMarkAsPaidInput!
  ): OrderMarkAsPaidPayload

  """Opens a closed order."""
  orderOpen(
    """The input for the mutation."""
    input: OrderOpenInput!
  ): OrderOpenPayload

  """Updates the fields of an order."""
  orderUpdate(
    """The input for the mutation."""
    input: OrderInput!
  ): OrderUpdatePayload

  """Sends an email payment reminder for a payment schedule."""
  paymentReminderSend(
    """The payment schedule id associated with the reminder."""
    paymentScheduleId: ID!
  ): PaymentReminderSendPayload

  """
  Create payment terms on an order. To create payment terms on a draft order,
  use a draft order mutation and include the request with the `DraftOrderInput`.
  """
  paymentTermsCreate(
    """Specifies the reference orderId to add the payment terms for."""
    referenceId: ID!

    """The attributes used to create the payment terms."""
    paymentTermsAttributes: PaymentTermsCreateInput!
  ): PaymentTermsCreatePayload

  """
  Delete payment terms for an order. To delete payment terms on a draft order,
  use a draft order mutation and include the request with the `DraftOrderInput`.
  """
  paymentTermsDelete(
    """The input fields used to delete the payment terms."""
    input: PaymentTermsDeleteInput!
  ): PaymentTermsDeletePayload

  """
  Update payment terms on an order. To update payment terms on a draft order,
  use a draft order mutation and include the request with the `DraftOrderInput`.
  """
  paymentTermsUpdate(
    """The input fields used to update the payment terms."""
    input: PaymentTermsUpdateInput!
  ): PaymentTermsUpdatePayload

  """
  Creates a price list. You can use the `priceListCreate` mutation to create a
  new price list for a country. This enables you to sell your products with
  international pricing.
  """
  priceListCreate(
    """The properties of the new price list."""
    input: PriceListCreateInput!
  ): PriceListCreatePayload

  """
  Deletes a price list. For example, you can delete a price list so that it no
  longer applies for products in the associated market.
  """
  priceListDelete(
    """The ID of the price list to be deleted."""
    id: ID!
  ): PriceListDeletePayload

  """
  Creates or updates fixed prices on a price list. You can use the
  `priceListFixedPricesAdd` mutation to set a fixed price for specific product
  variants. This lets you change product variant pricing on a per country basis.
  Any existing fixed price list prices for these variants will be overwritten.
  """
  priceListFixedPricesAdd(
    """
    The ID of the price list to which the fixed prices will be added or updated.
    """
    priceListId: ID!

    """The list of fixed prices to add or update in the price list."""
    prices: [PriceListPriceInput!]!
  ): PriceListFixedPricesAddPayload

  """
  Deletes specific fixed prices from a price list using a product variant ID.
  You can use the `priceListFixedPricesDelete` mutation to delete a set of fixed
  prices from a price list. After deleting the set of fixed prices from the
  price list, the price of each product variant reverts to the original price
  that was determined by the price list adjustment.
  """
  priceListFixedPricesDelete(
    """The ID of the price list from which the fixed prices will be removed."""
    priceListId: ID!

    """
    A list of product variant IDs whose fixed prices will be removed from the price list.
    """
    variantIds: [ID!]!
  ): PriceListFixedPricesDeletePayload

  """
  Updates a price list.
  If you modify the currency, then any fixed prices set on the price list will be deleted.
  """
  priceListUpdate(
    """The ID of the price list to update."""
    id: ID!

    """The input data used to update the price list."""
    input: PriceListUpdateInput!
  ): PriceListUpdatePayload

  """Activate a price rule."""
  priceRuleActivate(
    """ID of the price rule to update."""
    id: ID!
  ): PriceRuleActivatePayload @deprecated(reason: "Use `discountCodeActivate` instead.")

  """Create a price rule using the input."""
  priceRuleCreate(
    """The input fields to create a price rule."""
    priceRule: PriceRuleInput!

    """The input fields to create a discount code for the price rule."""
    priceRuleDiscountCode: PriceRuleDiscountCodeInput
  ): PriceRuleCreatePayload @deprecated(reason: "Use `discountCodeBasicCreate` instead.")

  """Deactivate a price rule."""
  priceRuleDeactivate(
    """ID of the price rule to update."""
    id: ID!
  ): PriceRuleDeactivatePayload @deprecated(reason: "Use `discountCodeDeactivate` instead.")

  """Delete a price rule."""
  priceRuleDelete(
    """The ID of the price rule object."""
    id: ID!
  ): PriceRuleDeletePayload @deprecated(reason: "Use `discountCodeDelete` instead.")

  """Create a discount code for a price rule."""
  priceRuleDiscountCodeCreate(
    """The ID of the price rule object."""
    priceRuleId: ID!

    """The code to create for the price rule."""
    code: String!
  ): PriceRuleDiscountCodeCreatePayload @deprecated(reason: "Use `discountRedeemCodeBulkAdd` instead.")

  """Update a discount code for a price rule."""
  priceRuleDiscountCodeUpdate(
    """The ID of the price rule object."""
    priceRuleId: ID!

    """The new code of a price rule."""
    code: String!
  ): PriceRuleDiscountCodeUpdatePayload @deprecated(reason: "Use `discountCodeBasicUpdate` instead.")

  """Updates a price rule using its ID and an input."""
  priceRuleUpdate(
    """ID of the price rule to update."""
    id: ID!

    """The input fields to update a price rule."""
    priceRule: PriceRuleInput!

    """The input fields to update the discount code of the price rule."""
    priceRuleDiscountCode: PriceRuleDiscountCodeInput
  ): PriceRuleUpdatePayload @deprecated(reason: "Use `discountCodeBasicUpdate` instead.")

  """
  Deletes a private metafield.
  Private metafields are automatically deleted when the app that created them is uninstalled.
  """
  privateMetafieldDelete(
    """The input fields for the private metafield to delete."""
    input: PrivateMetafieldDeleteInput!
  ): PrivateMetafieldDeletePayload @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """
  Creates or updates a private metafield. Use private metafields when you don't
  want the metafield data to be accessible by merchants or other apps.
  Private metafields are accessible only by the application that created them and only from the GraphQL Admin API.
  
  An application can create a maximum of 10 private metafields per shop resource.
  """
  privateMetafieldUpsert(
    """Specifies the input fields for the private metafield."""
    input: PrivateMetafieldInput!
  ): PrivateMetafieldUpsertPayload @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """Appends images to a product."""
  productAppendImages(
    """Specifies the new images and the product that they're being added to."""
    input: ProductAppendImagesInput!
  ): ProductAppendImagesPayload @deprecated(reason: "Use `productCreateMedia` instead.")

  """
  Changes the status of a product. This allows you to set the availability of the product across all channels.
  """
  productChangeStatus(
    """The ID of the product."""
    productId: ID!

    """The status to be assigned to the product."""
    status: ProductStatus!
  ): ProductChangeStatusPayload

  """
  Creates a product.
  
  If you need to create a product with many
  [variants](https://shopify.dev/api/admin-graphql/latest/input-objects/ProductVariantInput)
  that are active at several
  [locations](https://shopify.dev/api/admin-graphql/latest/input-objects/InventoryLevelInput),
  especially with a lot of
  [collections](https://shopify.dev/api/admin-graphql/latest/mutations/productCreate#field-productinput-collectionstojoin)
  and
  [tags](https://shopify.dev/api/admin-graphql/latest/mutations/productCreate#field-productinput-tags),
  then you should first create the product with just the variants.
  
  After the product is created, you can activate the variants at locations
  and add the other related objects to the product. This reduces the size of
  each mutation and increases the likelihood that it will
  complete before the operation times out.
  
  The following example shows how you might break up product creation and object association into multiple steps:
  
  1. Create the product with variants. Don't specify any tags or collections on the product, and don't specify
  [inventory quantities](https://shopify.dev/api/admin-graphql/latest/input-objects/ProductVariantInput#field-productvariantinput-inventoryquantities)
  for each variant.
  
  2. After the product is created, add tags to the product using the
  [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsAdd) mutation, and add collections using the
  [collectionsAddProducts](https://shopify.dev/api/admin-graphql/latest/mutations/collectionAddProducts) mutation.
  
  3. Use the [inventoryBulkToggleActivation](https://shopify.dev/api/admin-graphql/latest/mutations/inventoryBulkToggleActivation) mutation
  on each [inventory
  item](https://shopify.dev/api/admin-graphql/latest/objects/InventoryItem) to
  activate it at the appropriate locations.
  
  4. After activating the variants at the locations, adjust inventory quantities at each location using the
  [inventoryBulkAdjustQuantityAtLocation](https://shopify.dev/api/admin-graphql/latest/mutations/inventoryBulkAdjustQuantityAtLocation) mutation.
  """
  productCreate(
    """The properties of the new product."""
    input: ProductInput!

    """List of new media to be added to the product."""
    media: [CreateMediaInput!]
  ): ProductCreatePayload

  """Creates media for a product."""
  productCreateMedia(
    """Specifies the product associated with the media."""
    productId: ID!

    """List of new media to be added to a product."""
    media: [CreateMediaInput!]!
  ): ProductCreateMediaPayload

  """
  Deletes a product, including all associated variants and media.
  
  As of API version `2023-01`, if you need to delete a large product, such as one that has many
  [variants](https://shopify.dev/api/admin-graphql/latest/input-objects/ProductVariantInput)
  that are active at several
  [locations](https://shopify.dev/api/admin-graphql/latest/input-objects/InventoryLevelInput),
  you may encounter timeout errors. To avoid these timeout errors, you can instead use the asynchronous
  [ProductDeleteAsync](https://shopify.dev/api/admin-graphql/latest/mutations/productDeleteAsync)
  mutation.
  """
  productDelete(
    """Specifies the product to delete by its ID."""
    input: ProductDeleteInput!
  ): ProductDeletePayload

  """
  Deletes a product asynchronously, including all associated variants and media.
  """
  productDeleteAsync(
    """The ID of the product to be deleted."""
    productId: ID!
  ): ProductDeleteAsyncPayload

  """Removes product images from the product."""
  productDeleteImages(
    """This is the ID of the product."""
    id: ID!

    """This is the array of image IDs to delete from the product."""
    imageIds: [ID!]!
  ): ProductDeleteImagesPayload @deprecated(reason: "Use `productDeleteMedia` instead.")

  """Deletes media for a product."""
  productDeleteMedia(
    """Specifies the product ID from which the media will be deleted."""
    productId: ID!

    """The media IDs to be deleted."""
    mediaIds: [ID!]!
  ): ProductDeleteMediaPayload

  """
  Duplicates a product.
  
  As of API version `2023-01`, if you need to duplicate a large product, such as one that has many
  [variants](https://shopify.dev/api/admin-graphql/latest/input-objects/ProductVariantInput)
  that are active at several
  [locations](https://shopify.dev/api/admin-graphql/latest/input-objects/InventoryLevelInput),
  you may encounter timeout errors. To avoid these timeout errors, you can instead use the asynchronous
  [ProductDuplicateAsyncV2](https://shopify.dev/api/admin-graphql/latest/mutations/productDuplicateAsyncV2)
  mutation.
  """
  productDuplicate(
    """The ID of the product to be duplicated."""
    productId: ID!

    """The new title of the product."""
    newTitle: String!

    """
    The new status of the product. If no value is provided the status will be inherited from the original product.
    """
    newStatus: ProductStatus

    """Specifies whether or not to duplicate images."""
    includeImages: Boolean = false
  ): ProductDuplicatePayload

  """Asynchronously duplicate a single product."""
  productDuplicateAsync(
    """The params for duplicating the product."""
    input: ProductDuplicateAsyncInput!
  ): ProductDuplicateAsyncPayload @deprecated(reason: "Use `productDuplicateAsyncV2` instead.")

  """Updates an image of a product."""
  productImageUpdate(
    """The ID of the product on which to update the image."""
    productId: ID!

    """Image to be updated."""
    image: ImageInput!
  ): ProductImageUpdatePayload @deprecated(reason: "Use `productUpdateMedia` instead.")

  """Adds multiple selling plan groups to a product."""
  productJoinSellingPlanGroups(
    """The ID of the product."""
    id: ID!

    """The IDs of the selling plan groups to add."""
    sellingPlanGroupIds: [ID!]!
  ): ProductJoinSellingPlanGroupsPayload

  """Removes multiple groups from a product."""
  productLeaveSellingPlanGroups(
    """The ID of the product."""
    id: ID!

    """The IDs of the selling plan groups to add."""
    sellingPlanGroupIds: [ID!]!
  ): ProductLeaveSellingPlanGroupsPayload

  """
  Publishes a product. Products that are sold exclusively on subscription
  (`requiresSellingPlan: true`) can only be published on online stores.
  """
  productPublish(
    """Specifies the product to publish and the channels to publish it to."""
    input: ProductPublishInput!
  ): ProductPublishPayload @deprecated(reason: "Use `publishablePublish` instead.")

  """Asynchronously reorders a set of images for a given product."""
  productReorderImages(
    """The ID of the product on which to reorder images."""
    id: ID!

    """A list of moves to perform which will be evaluated in order."""
    moves: [MoveInput!]!
  ): ProductReorderImagesPayload @deprecated(reason: "Use `productReorderMedia` instead.")

  """Asynchronously reorders the media attached to a product."""
  productReorderMedia(
    """The ID of the product on which to reorder medias."""
    id: ID!

    """A list of moves to perform which will be evaluated in order."""
    moves: [MoveInput!]!
  ): ProductReorderMediaPayload

  """Unpublishes a product."""
  productUnpublish(
    """
    Specifies the product to unpublish and the channel to unpublish it from.
    """
    input: ProductUnpublishInput!
  ): ProductUnpublishPayload @deprecated(reason: "Use `publishableUnpublish` instead.")

  """
  Updates a product. If you update a product and only include some variants in the update,
  then any variants not included will be deleted. To safely manage variants without the risk of
  deleting excluded variants, use
  [productVariantsBulkUpdate](https://shopify.dev/api/admin-graphql/latest/mutations/productvariantsbulkupdate).
  If you want to update a single variant, then use
  [productVariantUpdate](https://shopify.dev/api/admin-graphql/latest/mutations/productvariantupdate).
  """
  productUpdate(
    """The updated properties for a product."""
    input: ProductInput!
  ): ProductUpdatePayload

  """Updates media for a product."""
  productUpdateMedia(
    """Specifies the product on which media will be updated."""
    productId: ID!

    """A list of media updates."""
    media: [UpdateMediaInput!]!
  ): ProductUpdateMediaPayload

  """Appends media from a product to variants of the product."""
  productVariantAppendMedia(
    """Specifies the product associated to the media."""
    productId: ID!

    """A list of pairs of variants and media to be attached to the variants."""
    variantMedia: [ProductVariantAppendMediaInput!]!
  ): ProductVariantAppendMediaPayload

  """Creates a product variant."""
  productVariantCreate(
    """The properties for the new product variant."""
    input: ProductVariantInput!
  ): ProductVariantCreatePayload

  """Deletes a product variant."""
  productVariantDelete(
    """The ID of the product variant to be deleted."""
    id: ID!
  ): ProductVariantDeletePayload

  """Detaches media from product variants."""
  productVariantDetachMedia(
    """Specifies the product to which the variants and media are associated."""
    productId: ID!

    """A list of pairs of variants and media to be deleted from the variants."""
    variantMedia: [ProductVariantDetachMediaInput!]!
  ): ProductVariantDetachMediaPayload

  """Adds multiple selling plan groups to a product variant."""
  productVariantJoinSellingPlanGroups(
    """The ID of the product variant."""
    id: ID!

    """The IDs of the selling plan groups to add."""
    sellingPlanGroupIds: [ID!]!
  ): ProductVariantJoinSellingPlanGroupsPayload

  """Remove multiple groups from a product variant."""
  productVariantLeaveSellingPlanGroups(
    """The ID of the product variant."""
    id: ID!

    """The IDs of the selling plan groups to leave."""
    sellingPlanGroupIds: [ID!]!
  ): ProductVariantLeaveSellingPlanGroupsPayload

  """Updates a product variant."""
  productVariantUpdate(
    """The updated properties for the product variant."""
    input: ProductVariantInput!
  ): ProductVariantUpdatePayload

  """
  Creates product variants in bulk. If you want to create a single variant, then use
  [productVariantCreate](https://shopify.dev/api/admin-graphql/latest/mutations/productvariantcreate).
  """
  productVariantsBulkCreate(
    """An array of product variants to be created."""
    variants: [ProductVariantsBulkInput!]!

    """The ID of the product on which to create the variants."""
    productId: ID!
  ): ProductVariantsBulkCreatePayload

  """
  Deletes product variants in bulk. If you want to delete a single variant, then use
  [productVariantDelete](https://shopify.dev/api/admin-graphql/latest/mutations/productvariantdelete).
  """
  productVariantsBulkDelete(
    """An array of product variants IDs to delete."""
    variantsIds: [ID!]!

    """The ID of the product with the variants to update."""
    productId: ID!
  ): ProductVariantsBulkDeletePayload

  """Reorder product variants in bulk."""
  productVariantsBulkReorder(
    """The product ID of the variants to be reordered."""
    productId: ID!

    """An array of variant positions."""
    positions: [ProductVariantPositionInput!]!
  ): ProductVariantsBulkReorderPayload

  """
  Updates product variants in bulk. If you want to update a single variant, then use
  [productVariantUpdate](https://shopify.dev/api/admin-graphql/latest/mutations/productvariantupdate).
  """
  productVariantsBulkUpdate(
    """An array of product variants to update."""
    variants: [ProductVariantsBulkInput!]!

    """The ID of the product associated with the variants to update."""
    productId: ID!
  ): ProductVariantsBulkUpdatePayload

  """Creates a new Google Cloud Pub/Sub webhook subscription."""
  pubSubWebhookSubscriptionCreate(
    """The type of event that triggers the webhook."""
    topic: WebhookSubscriptionTopic!

    """
    Specifies the input fields for a Google Cloud Pub/Sub webhook subscription.
    """
    webhookSubscription: PubSubWebhookSubscriptionInput!
  ): PubSubWebhookSubscriptionCreatePayload

  """Updates a Google Cloud Pub/Sub webhook subscription."""
  pubSubWebhookSubscriptionUpdate(
    """The ID of the webhook subscription to update."""
    id: ID!

    """
    Specifies the input fields for a Google Cloud Pub/Sub webhook subscription.
    """
    webhookSubscription: PubSubWebhookSubscriptionInput
  ): PubSubWebhookSubscriptionUpdatePayload

  """
  Publishes a resource to a channel. If the resource is a product, then it's
  visible in the channel only if the product status is `active`. Products that
  are sold exclusively on subscription (`requiresSellingPlan: true`) can be
  published only on online stores.
  """
  publishablePublish(
    """The resource to create or update publications for."""
    id: ID!

    """Specifies the input fields required to publish a resource."""
    input: [PublicationInput!]!
  ): PublishablePublishPayload

  """
  Publishes a resource to current channel. If the resource is a product, then
  it's visible in the channel only if the product status is `active`. Products
  that are sold exclusively on subscription (`requiresSellingPlan: true`) can be
  published only on online stores.
  """
  publishablePublishToCurrentChannel(
    """The resource to create or update publications for."""
    id: ID!
  ): PublishablePublishToCurrentChannelPayload

  """
  Unpublishes a resource from a channel. If the resource is a product, then it's
  visible in the channel only if the product status is `active`.
  """
  publishableUnpublish(
    """The resource to delete or update publications for."""
    id: ID!

    """Specifies the input fields required to unpublish a resource."""
    input: [PublicationInput!]!
  ): PublishableUnpublishPayload

  """
  Unpublishes a resource from the current channel. If the resource is a product,
  then it's visible in the channel only if the product status is `active`.
  """
  publishableUnpublishToCurrentChannel(
    """The resource to delete or update publications for."""
    id: ID!
  ): PublishableUnpublishToCurrentChannelPayload

  """Creates a refund."""
  refundCreate(
    """The input fields that are used in the mutation for creating a refund."""
    input: RefundInput!
  ): RefundCreatePayload

  """
  Approves a customer's return request.
  If this mutation is successful, then the `Return.status` field of the
  approved return is set to `OPEN`.
  """
  returnApproveRequest(
    """The input fields to approve a return."""
    input: ReturnApproveRequestInput!
  ): ReturnApproveRequestPayload

  """
  Cancels a return and restores the items back to being fulfilled.
  Canceling a return is only available before any work has been done
  on the return (such as an inspection or refund).
  """
  returnCancel(
    """The ID of the return to cancel."""
    id: ID!

    """
    Whether the customer receives an email notification regarding the canceled return.
    """
    notifyCustomer: Boolean = false
  ): ReturnCancelPayload

  """
  Indicates a return is complete, either when a refund has been made and items restocked,
  or simply when it has been marked as returned in the system.
  """
  returnClose(
    """The ID of the return to close."""
    id: ID!
  ): ReturnClosePayload

  """Creates a return."""
  returnCreate(
    """Specifies the input fields for a return."""
    returnInput: ReturnInput!
  ): ReturnCreatePayload

  """
  Declines a return on an order.
  When a return is declined, each `ReturnLineItem.fulfillmentLineItem` can be associated to a new return.
  Use the `ReturnCreate` or `ReturnRequest` mutation to initiate a new return.
  """
  returnDeclineRequest(
    """The input fields for declining a customer's return request."""
    input: ReturnDeclineRequestInput!
  ): ReturnDeclineRequestPayload

  """Refunds a return and associates it with the related return request."""
  returnRefund(
    """The input fields to refund a return."""
    returnRefundInput: ReturnRefundInput!
  ): ReturnRefundPayload

  """Reopens a closed return."""
  returnReopen(
    """The ID of the return to reopen."""
    id: ID!
  ): ReturnReopenPayload

  """
  A customer's return request that hasn't been approved or declined.
  This mutation sets the value of the `Return.status` field to `REQUESTED`.
  To create a return that has the `Return.status` field set to `OPEN`, use the `returnCreate` mutation.
  """
  returnRequest(
    """The input fields for requesting a return."""
    input: ReturnRequestInput!
  ): ReturnRequestPayload

  """
  Creates a new reverse delivery with associated external shipping information.
  """
  reverseDeliveryCreateWithShipping(
    """
    The ID of the reverse fulfillment order that's associated to the reverse delivery.
    """
    reverseFulfillmentOrderId: ID!

    """
    The reverse delivery line items to be created. If an empty array is provided, then this mutation
              will create a reverse delivery line item for each reverse fulfillment order line item, with its quantity equal
              to the reverse fulfillment order line item total quantity.
    """
    reverseDeliveryLineItems: [ReverseDeliveryLineItemInput!]!

    """The tracking information for the reverse delivery."""
    trackingInput: ReverseDeliveryTrackingInput = null

    """The return label file information for the reverse delivery."""
    labelInput: ReverseDeliveryLabelInput = null

    """
    When `true` the customer is notified with delivery instructions if the `ReverseFulfillmentOrder.order.email` is present.
    """
    notifyCustomer: Boolean = true
  ): ReverseDeliveryCreateWithShippingPayload

  """
  Disposes reverse delivery line items for a reverse delivery on the same shop.
  """
  reverseDeliveryDispose(
    """The input parameters required to dispose reverse delivery line items."""
    dispositionInputs: [ReverseDeliveryDisposeInput!]!
  ): ReverseDeliveryDisposePayload

  """
  Updates a reverse delivery with associated external shipping information.
  """
  reverseDeliveryShippingUpdate(
    """The ID of the reverse delivery to update."""
    reverseDeliveryId: ID!

    """The tracking information for the reverse delivery."""
    trackingInput: ReverseDeliveryTrackingInput = null

    """The return label file information for the reverse delivery."""
    labelInput: ReverseDeliveryLabelInput = null

    """
    If `true` and an email address exists on the
    `ReverseFulfillmentOrder.order`, then the customer is notified with the
    updated delivery instructions.
    """
    notifyCustomer: Boolean = true
  ): ReverseDeliveryShippingUpdatePayload

  """Disposes reverse fulfillment order line items."""
  reverseFulfillmentOrderDispose(
    """
    The input parameters required to dispose reverse fulfillment order line items.
    """
    dispositionInputs: [ReverseFulfillmentOrderDisposeInput!]!
  ): ReverseFulfillmentOrderDisposePayload

  """Creates a saved search."""
  savedSearchCreate(
    """Specifies the input fields for a saved search."""
    input: SavedSearchCreateInput!
  ): SavedSearchCreatePayload

  """Delete a saved search."""
  savedSearchDelete(
    """The input fields to delete a saved search."""
    input: SavedSearchDeleteInput!
  ): SavedSearchDeletePayload

  """Updates a saved search."""
  savedSearchUpdate(
    """The input fields to update a saved search."""
    input: SavedSearchUpdateInput!
  ): SavedSearchUpdatePayload

  """
  <div class="note"><h4>Theme app extensions</h4>
    <p>Your app might not pass App Store review if it uses script tags instead of
  theme app extensions. All new apps, and apps that integrate with Online Store
  2.0 themes, should use theme app extensions, such as app blocks or app embed
  blocks. Script tags are an alternative you can use with only vintage themes.
  <a href="/apps/online-store#what-integration-method-should-i-use"
  target="_blank">Learn more</a>.</p></div>
  
  
  Creates a new script tag.
  """
  scriptTagCreate(
    """The input fields for a script tag."""
    input: ScriptTagInput!
  ): ScriptTagCreatePayload

  """
  <div class="note"><h4>Theme app extensions</h4>
    <p>Your app might not pass App Store review if it uses script tags instead of
  theme app extensions. All new apps, and apps that integrate with Online Store
  2.0 themes, should use theme app extensions, such as app blocks or app embed
  blocks. Script tags are an alternative you can use with only vintage themes.
  <a href="/apps/online-store#what-integration-method-should-i-use"
  target="_blank">Learn more</a>.</p></div>
  
  
  Deletes a script tag.
  """
  scriptTagDelete(
    """The ID of the script tag to delete."""
    id: ID!
  ): ScriptTagDeletePayload

  """
  <div class="note"><h4>Theme app extensions</h4>
    <p>Your app might not pass App Store review if it uses script tags instead of
  theme app extensions. All new apps, and apps that integrate with Online Store
  2.0 themes, should use theme app extensions, such as app blocks or app embed
  blocks. Script tags are an alternative you can use with only vintage themes.
  <a href="/apps/online-store#what-integration-method-should-i-use"
  target="_blank">Learn more</a>.</p></div>
  
  
  Updates a script tag.
  """
  scriptTagUpdate(
    """The ID of the script tag to update."""
    id: ID!

    """Specifies the input fields for a script tag."""
    input: ScriptTagInput!
  ): ScriptTagUpdatePayload

  """Creates a segment."""
  segmentCreate(
    """The name of the segment to be created. Segment names must be unique."""
    name: String!

    """
    A precise definition of the segment. The definition is composed of a
    combination of conditions on facts about customers such as
    `email_subscription_status = 'SUBSCRIBED'` with [this
    syntax](https://shopify.dev/api/shopifyql/segment-query-language-reference).
    """
    query: String!
  ): SegmentCreatePayload

  """Deletes a segment."""
  segmentDelete(
    """Specifies the segment to delete."""
    id: ID!
  ): SegmentDeletePayload

  """Updates a segment."""
  segmentUpdate(
    """Specifies the segment to be updated."""
    id: ID!

    """The new name for the segment."""
    name: String

    """
    A precise definition of the segment. The definition is composed of a
    combination of conditions on facts about customers such as
    `email_subscription_status = 'SUBSCRIBED'` with [this
    syntax](https://shopify.dev/api/shopifyql/segment-query-language-reference).
    """
    query: String
  ): SegmentUpdatePayload

  """Adds multiple product variants to a selling plan group."""
  sellingPlanGroupAddProductVariants(
    """The ID of the selling plan group."""
    id: ID!

    """The IDs of the product variants to add."""
    productVariantIds: [ID!]!
  ): SellingPlanGroupAddProductVariantsPayload

  """Adds multiple products to a selling plan group."""
  sellingPlanGroupAddProducts(
    """The ID of the selling plan group."""
    id: ID!

    """The IDs of the products to add."""
    productIds: [ID!]!
  ): SellingPlanGroupAddProductsPayload

  """Creates a Selling Plan Group."""
  sellingPlanGroupCreate(
    """The properties of the new Selling Plan Group."""
    input: SellingPlanGroupInput!

    """The resources this Selling Plan Group should be applied to."""
    resources: SellingPlanGroupResourceInput
  ): SellingPlanGroupCreatePayload

  """Delete a Selling Plan Group."""
  sellingPlanGroupDelete(
    """The id of the selling plan group to delete."""
    id: ID!
  ): SellingPlanGroupDeletePayload

  """Removes multiple product variants from a selling plan group."""
  sellingPlanGroupRemoveProductVariants(
    """The ID of the selling plan group."""
    id: ID!

    """The IDs of the product variants to remove."""
    productVariantIds: [ID!]!
  ): SellingPlanGroupRemoveProductVariantsPayload

  """Removes multiple products from a selling plan group."""
  sellingPlanGroupRemoveProducts(
    """The ID of the selling plan group."""
    id: ID!

    """The IDs of the products to remove."""
    productIds: [ID!]!
  ): SellingPlanGroupRemoveProductsPayload

  """Update a Selling Plan Group."""
  sellingPlanGroupUpdate(
    """The Selling Plan Group to update."""
    id: ID!

    """The properties of the Selling Plan Group to update."""
    input: SellingPlanGroupInput
  ): SellingPlanGroupUpdatePayload

  """Deletes a shipping package."""
  shippingPackageDelete(
    """The ID of the shipping package to remove."""
    id: ID!
  ): ShippingPackageDeletePayload

  """
  Set a shipping package as the default.
  The default shipping package is the one used to calculate shipping costs on checkout.
  """
  shippingPackageMakeDefault(
    """The ID of the shipping package to set as the default."""
    id: ID!
  ): ShippingPackageMakeDefaultPayload

  """Updates a shipping package."""
  shippingPackageUpdate(
    """The ID of the shipping package to update."""
    id: ID!

    """Specifies the input fields for a shipping package."""
    shippingPackage: CustomShippingPackageInput!
  ): ShippingPackageUpdatePayload

  """
  Deletes a locale for a shop. This also deletes all translations of this locale.
  """
  shopLocaleDisable(
    """ISO code of the locale to delete."""
    locale: String!
  ): ShopLocaleDisablePayload

  """
  Adds a locale for a shop. The newly added locale is in the unpublished state.
  """
  shopLocaleEnable(
    """ISO code of the locale to enable."""
    locale: String!

    """The list of markets web presences to add the locale to."""
    marketWebPresenceIds: [ID!]
  ): ShopLocaleEnablePayload

  """Updates a locale for a shop."""
  shopLocaleUpdate(
    """ISO code of the locale to update."""
    locale: String!

    """Specifies the input fields for a shop locale."""
    shopLocale: ShopLocaleInput!
  ): ShopLocaleUpdatePayload

  """Updates a shop policy."""
  shopPolicyUpdate(
    """The properties to use when updating the shop policy."""
    shopPolicy: ShopPolicyInput!
  ): ShopPolicyUpdatePayload

  """
  The `ResourceFeedback` object lets your app report the status of shops and their resources. For example, if
  your app is a marketplace channel, then you can use resource feedback to alert
  merchants that they need to connect their marketplace account by signing in.
  
  Resource feedback notifications are displayed to the merchant on the home
  screen of their Shopify admin, and in the product details view for any
  products that are published to your app.
  
  This resource should be used only in cases where you're describing steps that
  a merchant is required to complete. If your app offers optional or promotional
  set-up steps, or if it makes recommendations, then don't use resource feedback
  to let merchants know about them.
  
  ## Sending feedback on a shop
  
  You can send resource feedback on a shop to let the merchant know what steps
  they need to take to make sure that your app is set up correctly. Feedback can
  have one of two states: `requires_action` or `success`. You need to send a
  `requires_action` feedback request for each step that the merchant is required to complete.
  
  If there are multiple set-up steps that require merchant action, then send
  feedback with a state of `requires_action` as merchants complete prior steps.
  And to remove the feedback message from the Shopify admin, send a `success`
  feedback request.
  
  #### Important
  Sending feedback replaces previously sent feedback for the shop. Send a new
  `shopResourceFeedbackCreate` mutation to push the latest state of a shop or
  its resources to Shopify.
  """
  shopResourceFeedbackCreate(
    """The fields required to create shop feedback."""
    input: ResourceFeedbackCreateInput!
  ): ShopResourceFeedbackCreatePayload

  """
  Generates the URL and signed paramaters needed to upload an asset to Shopify.
  """
  stagedUploadTargetGenerate(
    """The input fields for generating a staged upload."""
    input: StagedUploadTargetGenerateInput!
  ): StagedUploadTargetGeneratePayload @deprecated(reason: "Use `stagedUploadsCreate` instead.")

  """Uploads multiple images."""
  stagedUploadTargetsGenerate(
    """The input fields for generating staged uploads."""
    input: [StageImageInput!]!
  ): StagedUploadTargetsGeneratePayload @deprecated(reason: "Use `stagedUploadsCreate` instead.")

  """
  Creates staged upload targets for each input. This is the first step in the upload process.
  The returned staged upload targets' URL and parameter fields can be used to send a request
  to upload the file described in the corresponding input.
  
  For more information on the upload process, refer to
  [Upload media to Shopify](https://shopify.dev/apps/online-store/media/products#step-1-upload-media-to-shopify).
  """
  stagedUploadsCreate(
    """The information required to generate staged upload targets."""
    input: [StagedUploadInput!]!
  ): StagedUploadsCreatePayload

  """
  Activates the specified standard metafield definition from its template.
  
  Refer to the [list of standard metafield definition templates](https://shopify.dev/apps/metafields/definitions/standard-definitions).
  """
  standardMetafieldDefinitionEnable(
    """The resource type that the metafield definition is scoped to."""
    ownerType: MetafieldOwnerType!

    """The ID of the standard metafield definition template to enable."""
    id: ID

    """
    The namespace of the standard metafield to enable. Used in combination with `key`.
    """
    namespace: String

    """
    The key of the standard metafield to enable. Used in combination with `namespace`.
    """
    key: String

    """Whether to pin the metafield definition."""
    pin: Boolean! = false

    """
    Whether metafields for the definition are visible using the Storefront API.
    """
    visibleToStorefrontApi: Boolean = null

    """
    Whether the metafield definition can be used as a collection condition.
    """
    useAsCollectionCondition: Boolean = false
  ): StandardMetafieldDefinitionEnablePayload

  """
  Enables the specified standard metaobject definition from its template.
  """
  standardMetaobjectDefinitionEnable(
    """The type of the metaobject definition to enable."""
    type: String!
  ): StandardMetaobjectDefinitionEnablePayload

  """
  Creates a storefront access token. An app can have a maximum of 100 active storefront access tokens for each shop.
  """
  storefrontAccessTokenCreate(
    """Provides the input fields for creating a storefront access token."""
    input: StorefrontAccessTokenInput!
  ): StorefrontAccessTokenCreatePayload

  """Deletes a storefront access token."""
  storefrontAccessTokenDelete(
    """
    Provides the input fields required to delete a storefront access token.
    """
    input: StorefrontAccessTokenDeleteInput!
  ): StorefrontAccessTokenDeletePayload

  """
  Creates a new subscription billing attempt. For more information, refer to
  [Create a subscription contract](https://shopify.dev/docs/apps/selling-strategies/subscriptions/contracts/create#step-4-create-a-billing-attempt).
  """
  subscriptionBillingAttemptCreate(
    """The ID of the subscription contract."""
    subscriptionContractId: ID!

    """The information to apply as a billing attempt."""
    subscriptionBillingAttemptInput: SubscriptionBillingAttemptInput!
  ): SubscriptionBillingAttemptCreatePayload

  """Commits the updates of a Subscription Billing Cycle Contract draft."""
  subscriptionBillingCycleContractDraftCommit(
    """The gid of the Subscription Contract draft to commit."""
    draftId: ID!
  ): SubscriptionBillingCycleContractDraftCommitPayload

  """Concatenates a contract to a Subscription Draft."""
  subscriptionBillingCycleContractDraftConcatenate(
    """The gid of the Subscription Contract draft to update."""
    draftId: ID!

    """
    An array of Subscription Contracts with their selected billing cycles to concatenate to the subscription draft.
    """
    concatenatedBillingCycleContracts: [SubscriptionBillingCycleInput!]!
  ): SubscriptionBillingCycleContractDraftConcatenatePayload

  """
  Edit the contents of a subscription contract for the specified billing cycle.
  """
  subscriptionBillingCycleContractEdit(
    """Input object for selecting and using billing cycles."""
    billingCycleInput: SubscriptionBillingCycleInput!
  ): SubscriptionBillingCycleContractEditPayload

  """
  Delete the schedule and contract edits of the selected subscription billing cycle.
  """
  subscriptionBillingCycleEditDelete(
    """Input object used to select and use billing cycles."""
    billingCycleInput: SubscriptionBillingCycleInput!
  ): SubscriptionBillingCycleEditDeletePayload

  """
  Delete the current and future schedule and contract edits of a list of subscription billing cycles.
  """
  subscriptionBillingCycleEditsDelete(
    """
    The globally-unique identifier of the subscription contract that the billing cycle belongs to.
    """
    contractId: ID!

    """Select billing cycles to be deleted."""
    targetSelection: SubscriptionBillingCyclesTargetSelection!
  ): SubscriptionBillingCycleEditsDeletePayload

  """Modify the schedule of a specific billing cycle."""
  subscriptionBillingCycleScheduleEdit(
    """Input object for selecting and using billing cycles."""
    billingCycleInput: SubscriptionBillingCycleInput!

    """Data used to create or modify billing cycle schedule edit."""
    input: SubscriptionBillingCycleScheduleEditInput!
  ): SubscriptionBillingCycleScheduleEditPayload

  """Creates a Subscription Contract."""
  subscriptionContractCreate(
    """The properties of the new Subscription Contract."""
    input: SubscriptionContractCreateInput!
  ): SubscriptionContractCreatePayload

  """Sets the next billing date of a Subscription Contract."""
  subscriptionContractSetNextBillingDate(
    """The gid of the Subscription Contract to set the next billing date for."""
    contractId: ID!

    """The next billing date."""
    date: DateTime!
  ): SubscriptionContractSetNextBillingDatePayload

  """Updates a Subscription Contract."""
  subscriptionContractUpdate(
    """The gid of the Subscription Contract to update."""
    contractId: ID!
  ): SubscriptionContractUpdatePayload

  """Commits the updates of a Subscription Contract draft."""
  subscriptionDraftCommit(
    """The gid of the Subscription Contract draft to commit."""
    draftId: ID!
  ): SubscriptionDraftCommitPayload

  """Adds a subscription discount to a subscription draft."""
  subscriptionDraftDiscountAdd(
    """
    The ID of the Subscription Contract draft to add a subscription discount to.
    """
    draftId: ID!

    """The properties of the new Subscription Discount."""
    input: SubscriptionManualDiscountInput!
  ): SubscriptionDraftDiscountAddPayload

  """Applies a code discount on the subscription draft."""
  subscriptionDraftDiscountCodeApply(
    """
    The gid of the subscription contract draft to apply a subscription code discount on.
    """
    draftId: ID!

    """Code discount redeem code."""
    redeemCode: String!
  ): SubscriptionDraftDiscountCodeApplyPayload

  """Removes a subscription discount from a subscription draft."""
  subscriptionDraftDiscountRemove(
    """
    The gid of the subscription contract draft to remove a subscription discount from.
    """
    draftId: ID!

    """The gid of the subscription draft discount to remove."""
    discountId: ID!
  ): SubscriptionDraftDiscountRemovePayload

  """Updates a subscription discount on a subscription draft."""
  subscriptionDraftDiscountUpdate(
    """
    The ID of the Subscription Contract draft to update a subscription discount on.
    """
    draftId: ID!

    """The gid of the Subscription Discount to update."""
    discountId: ID!

    """The properties to update on the Subscription Discount."""
    input: SubscriptionManualDiscountInput!
  ): SubscriptionDraftDiscountUpdatePayload

  """Adds a subscription free shipping discount to a subscription draft."""
  subscriptionDraftFreeShippingDiscountAdd(
    """
    The ID of the subscription contract draft to add a subscription free shipping discount to.
    """
    draftId: ID!

    """The properties of the new subscription free shipping discount."""
    input: SubscriptionFreeShippingDiscountInput!
  ): SubscriptionDraftFreeShippingDiscountAddPayload

  """Updates a subscription free shipping discount on a subscription draft."""
  subscriptionDraftFreeShippingDiscountUpdate(
    """
    The ID of the Subscription Contract draft to update a subscription discount on.
    """
    draftId: ID!

    """The gid of the Subscription Discount to update."""
    discountId: ID!

    """The properties to update on the Subscription Free Shipping Discount."""
    input: SubscriptionFreeShippingDiscountInput!
  ): SubscriptionDraftFreeShippingDiscountUpdatePayload

  """Adds a subscription line to a subscription draft."""
  subscriptionDraftLineAdd(
    """
    The gid of the Subscription Contract draft to add a subscription line to.
    """
    draftId: ID!

    """The properties of the new Subscription Line."""
    input: SubscriptionLineInput!
  ): SubscriptionDraftLineAddPayload

  """Removes a subscription line from a subscription draft."""
  subscriptionDraftLineRemove(
    """
    The gid of the Subscription Contract draft to remove a subscription line from.
    """
    draftId: ID!

    """The gid of the Subscription Line to remove."""
    lineId: ID!
  ): SubscriptionDraftLineRemovePayload

  """Updates a subscription line on a subscription draft."""
  subscriptionDraftLineUpdate(
    """
    The gid of the Subscription Contract draft to update a subscription line from.
    """
    draftId: ID!

    """The gid of the Subscription Line to update."""
    lineId: ID!

    """The properties of the new Subscription Line."""
    input: SubscriptionLineUpdateInput!
  ): SubscriptionDraftLineUpdatePayload

  """Updates a Subscription Draft."""
  subscriptionDraftUpdate(
    """The gid of the Subscription Draft to update."""
    draftId: ID!

    """The properties of the new Subscription Contract."""
    input: SubscriptionDraftInput!
  ): SubscriptionDraftUpdatePayload

  """
  Add tags to an order, a draft order, a customer, a product, or an online store article.
  """
  tagsAdd(
    """The ID of a resource to add tags to."""
    id: ID!

    """
    A list of tags to add to the resource. Can be an array of strings or a
    single string composed of a comma-separated list of values. Example values:
    `["tag1", "tag2", "tag3"]`, `"tag1, tag2, tag3"`.
    """
    tags: [String!]!
  ): TagsAddPayload

  """
  Remove tags from an order, a draft order, a customer, a product, or an online store article.
  """
  tagsRemove(
    """The ID of the resource to remove tags from."""
    id: ID!

    """
    A list of tags to remove from the resource in the form of an array of
    strings. Example value: `["tag1", "tag2", "tag3"]`.
    """
    tags: [String!]!
  ): TagsRemovePayload

  """Creates or updates translations."""
  translationsRegister(
    """ID of the resource that is being translated."""
    resourceId: ID!

    """Specifies the input fields for a translation."""
    translations: [TranslationInput!]!
  ): TranslationsRegisterPayload

  """Deletes translations."""
  translationsRemove(
    """
    ID of the translatable resource for which translations are being deleted.
    """
    resourceId: ID!

    """The list of translation keys."""
    translationKeys: [String!]!

    """
    The list of translation locales. Only locales returned in `shopLocales` are valid.
    """
    locales: [String!]!

    """The list of market IDs."""
    marketIds: [ID!]
  ): TranslationsRemovePayload

  """
  Asynchronously delete [URL redirects](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirect) in bulk.
  """
  urlRedirectBulkDeleteAll: UrlRedirectBulkDeleteAllPayload

  """
  Asynchronously delete [URLRedirect](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirect) 
  objects in bulk by IDs.
  Learn more about [URLRedirect](https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect) 
  objects.
  """
  urlRedirectBulkDeleteByIds(
    """
    A list of [`URLRedirect`](
                https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect
              ) object IDs to delete.
    """
    ids: [ID!]!
  ): UrlRedirectBulkDeleteByIdsPayload

  """Asynchronously delete redirects in bulk."""
  urlRedirectBulkDeleteBySavedSearch(
    """The ID of the URL redirect saved search for filtering."""
    savedSearchId: ID!
  ): UrlRedirectBulkDeleteBySavedSearchPayload

  """Asynchronously delete redirects in bulk."""
  urlRedirectBulkDeleteBySearch(
    """
    Search query for filtering redirects on (both Redirect from and Redirect to fields).
    """
    search: String!
  ): UrlRedirectBulkDeleteBySearchPayload

  """
  Creates a [`UrlRedirect`](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirect) object.
  """
  urlRedirectCreate(
    """The fields to use when creating the redirect."""
    urlRedirect: UrlRedirectInput!
  ): UrlRedirectCreatePayload

  """
  Deletes a [`UrlRedirect`](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirect) object.
  """
  urlRedirectDelete(
    """The ID of the redirect to delete."""
    id: ID!
  ): UrlRedirectDeletePayload

  """
  Creates a [`UrlRedirectImport`](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirectImport) object.
  
  After creating the `UrlRedirectImport` object, the `UrlRedirectImport` request
  can be performed using the [`urlRedirectImportSubmit`](https://shopify.dev/api/admin-graphql/latest/mutations/urlRedirectImportSubmit) mutation.
  """
  urlRedirectImportCreate(
    """
    The staged upload URL of the CSV file.
    You can download [a sample URL redirect CSV file](https://help.shopify.com/csv/sample-redirect-template.csv)).
    """
    url: URL!
  ): UrlRedirectImportCreatePayload

  """
  Submits a `UrlRedirectImport` request to be processed.
  
  The `UrlRedirectImport` request is first created with the [`urlRedirectImportCreate`](https://shopify.dev/api/admin-graphql/latest/mutations/urlRedirectImportCreate) mutation.
  """
  urlRedirectImportSubmit(
    """
    The ID of the [`UrlRedirectImport`](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirectImport) object.
    """
    id: ID!
  ): UrlRedirectImportSubmitPayload

  """Updates a URL redirect."""
  urlRedirectUpdate(
    """The ID of the URL redirect to update."""
    id: ID!

    """The input fields required to update the URL redirect."""
    urlRedirect: UrlRedirectInput!
  ): UrlRedirectUpdatePayload

  """Creates a new web pixel settings."""
  webPixelCreate(
    """The web pixel settings in JSON format."""
    webPixel: WebPixelInput!
  ): WebPixelCreatePayload

  """Deletes the web pixel shop settings."""
  webPixelDelete(
    """The ID of the web pixel to delete."""
    id: ID!
  ): WebPixelDeletePayload

  """Updates the web pixel settings."""
  webPixelUpdate(
    """The ID of the web pixel to update."""
    id: ID!

    """The web pixel settings in JSON format."""
    webPixel: WebPixelInput!
  ): WebPixelUpdatePayload

  """Creates a new webhook subscription."""
  webhookSubscriptionCreate(
    """The type of event that triggers the webhook."""
    topic: WebhookSubscriptionTopic!

    """Specifies the input fields for a webhook subscription."""
    webhookSubscription: WebhookSubscriptionInput!
  ): WebhookSubscriptionCreatePayload

  """Deletes a webhook subscription."""
  webhookSubscriptionDelete(
    """The ID of the webhook subscription to delete."""
    id: ID!
  ): WebhookSubscriptionDeletePayload

  """Updates a webhook subscription."""
  webhookSubscriptionUpdate(
    """The ID of the webhook subscription to update."""
    id: ID!

    """Specifies the input fields for a webhook subscription."""
    webhookSubscription: WebhookSubscriptionInput!
  ): WebhookSubscriptionUpdatePayload
}

"""
A signed upload parameter for uploading an asset to Shopify.

Deprecated in favor of
[StagedUploadParameter](https://shopify.dev/api/admin-graphql/latest/objects/StagedUploadParameter),
which is used in
[StagedMediaUploadTarget](https://shopify.dev/api/admin-graphql/latest/objects/StagedMediaUploadTarget)
and returned by the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stagedUploadsCreate).
"""
type MutationsStagedUploadTargetGenerateUploadParameter {
  """The upload parameter name."""
  name: String!

  """The upload parameter value."""
  value: String!
}

"""
A default cursor that you can use in queries to paginate your results. Each edge in a connection can
return a cursor, which is a reference to the edge's position in the connection. You can use an edge's cursor as
the starting point to retrieve the nodes before or after it in a connection.

To learn more about using cursor-based pagination, refer to
[Paginating results with GraphQL](https://shopify.dev/api/usage/pagination-graphql).
"""
interface Navigable {
  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!
}

"""A navigation item, holding basic link attributes."""
type NavigationItem {
  """The unique identifier of the navigation item."""
  id: String!

  """The name of the navigation item."""
  title: String!

  """The URL of the page that the navigation item links to."""
  url: URL!
}

"""
An object with an ID field to support global identification, in accordance with the
[Relay specification](https://relay.dev/graphql/objectidentification.htm#sec-Node-Interface).
This interface is used by the [node](https://shopify.dev/api/admin-graphql/unstable/queries/node)
and [nodes](https://shopify.dev/api/admin-graphql/unstable/queries/nodes) queries.
"""
interface Node {
  """A globally-unique ID."""
  id: ID!
}

"""The input fields for dimensions of an object."""
input ObjectDimensionsInput {
  """The length in `unit`s."""
  length: Float!

  """The width in `unit`s."""
  width: Float!

  """The height in `unit`s."""
  height: Float!

  """Unit of measurement for `length`, `width`, and `height`."""
  unit: LengthUnit!
}

"""
An article in the blogging system. You can query articles from
[the REST API](https://shopify.dev/api/admin-rest/latest/resources/article)
if you need to access more information about an article. Currently, `OnlineStoreArticle` is
only useful to pass an article `id` to the `tagsAdd` mutation. For more information, refer to
the [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsadd) mutation.
"""
type OnlineStoreArticle implements HasPublishedTranslations & Navigable & Node {
  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """A globally-unique ID."""
  id: ID!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!
}

"""
Shopify stores come with a built-in blogging engine, allowing a shop to have one or more blogs.  Blogs are meant
to be used as a type of magazine or newsletter for the shop, with content that changes over time.
"""
type OnlineStoreBlog implements HasPublishedTranslations & Node {
  """A globally-unique ID."""
  id: ID!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!
}

"""A custom page on the Online Store."""
type OnlineStorePage implements HasPublishedTranslations & Navigable & Node {
  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """A globally-unique ID."""
  id: ID!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!
}

"""Online Store preview URL of the object."""
interface OnlineStorePreviewable {
  """The online store preview URL."""
  onlineStorePreviewUrl: URL
}

"""
An order is a customer's request to purchase one or more products from a shop.
You can retrieve and update orders using the `Order` object.
Learn more about
[editing an existing order with the GraphQL Admin
API](https://shopify.dev/apps/fulfillment/order-management-apps/order-editing).

Only the last 60 days' worth of orders from a store are accessible from the
`Order` object by default. If you want to access older orders,
then you need to [request access to all
orders](https://shopify.dev/api/usage/access-scopes#orders-permissions). If your app is granted
access, then you can add the `read_all_orders` scope to your app along with `read_orders` or `write_orders`.
[Private apps](https://shopify.dev/apps/auth/basic-http) are not affected by
this change and are automatically granted the scope.

**Caution:** Only use this data if it's required for your app's functionality.
Shopify will restrict [access to
scopes](https://shopify.dev/api/usage/access-scopes) for apps that don't have a
legitimate use for the associated data.
"""
type Order implements CommentEventSubject & HasEvents & HasLocalizationExtensions & HasMetafieldDefinitions & HasMetafields & LegacyInteroperability & Node {
  """A list of sales agreements associated with the order."""
  agreements(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `happened_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): SalesAgreementConnection!

  """A list of messages that appear on the order page in the Shopify admin."""
  alerts: [ResourceAlert!]!

  """The application that created the order."""
  app: OrderApp

  """The billing address of the customer."""
  billingAddress: MailingAddress

  """Whether the billing address matches the shipping address."""
  billingAddressMatchesShippingAddress: Boolean!

  """Whether the order can be manually marked as paid."""
  canMarkAsPaid: Boolean!

  """Whether a customer email exists for the order."""
  canNotifyCustomer: Boolean!

  """
  The reason provided when the order was canceled.
  Returns `null` if the order wasn't canceled.
  """
  cancelReason: OrderCancelReason

  """
  The date and time when the order was canceled.
  Returns `null` if the order wasn't canceled.
  """
  cancelledAt: DateTime

  """Whether payment for the order can be captured."""
  capturable: Boolean!

  """
  The total order-level discount amount, before returns, in shop currency.
  """
  cartDiscountAmount: Money @deprecated(reason: "Use `cartDiscountAmountSet` instead.")

  """
  The total order-level discount amount, before returns, in shop and presentment currencies.
  """
  cartDiscountAmountSet: MoneyBag

  """The channel that created the order."""
  channel: Channel @deprecated(reason: "Use `publication` instead.")

  """Details about the channel that created the order."""
  channelInformation: ChannelInformation

  """The IP address of the API client that created the order."""
  clientIp: String

  """Whether the order is closed."""
  closed: Boolean!

  """
  The date and time when the order was closed.
  Returns `null` if the order isn't closed.
  """
  closedAt: DateTime

  """Whether inventory has been reserved for the order."""
  confirmed: Boolean!

  """Date and time when the order was created in Shopify."""
  createdAt: DateTime!

  """The shop currency when the order was placed."""
  currencyCode: CurrencyCode!

  """
  The current order-level discount amount after all order updates, in shop and presentment currencies.
  """
  currentCartDiscountAmountSet: MoneyBag!

  """
  The sum of the quantities for all line items that contribute to the order's current subtotal price.
  """
  currentSubtotalLineItemsQuantity: Int!

  """
  The sum of the prices for all line items after discounts and returns, in shop and presentment currencies.
  If `taxesIncluded` is `true`, then the subtotal also includes tax.
  """
  currentSubtotalPriceSet: MoneyBag!

  """
  A list of all tax lines applied to line items on the order, after returns.
  Tax line prices represent the total price for all tax lines with the same `rate` and `title`.
  """
  currentTaxLines: [TaxLine!]!

  """
  The total amount discounted on the order after returns, in shop and presentment currencies.
  This includes both order and line level discounts.
  """
  currentTotalDiscountsSet: MoneyBag!

  """
  The total amount of duties after returns, in shop and presentment currencies.
  Returns `null` if duties aren't applicable.
  """
  currentTotalDutiesSet: MoneyBag

  """
  The total price of the order, after returns, in shop and presentment currencies.
  This includes taxes and discounts.
  """
  currentTotalPriceSet: MoneyBag!

  """
  The sum of the prices of all tax lines applied to line items on the order,
  after returns, in shop and presentment currencies.
  """
  currentTotalTaxSet: MoneyBag!

  """The total weight of the order after returns, in grams."""
  currentTotalWeight: UnsignedInt64!

  """A list of the custom attributes added to the order."""
  customAttributes: [Attribute!]!

  """The customer that placed the order."""
  customer: Customer

  """Whether the customer agreed to receive marketing materials."""
  customerAcceptsMarketing: Boolean!

  """
  The customer's visits and interactions with the online store before placing the order.
  """
  customerJourney: CustomerJourney @deprecated(reason: "Use `customerJourneySummary` instead.")

  """
  The customer's visits and interactions with the online store before placing the order.
  """
  customerJourneySummary: CustomerJourneySummary

  """
  A two-letter or three-letter language code, optionally followed by a region modifier.
  """
  customerLocale: String

  """
  A list of discounts that are applied to the order, not including order edits and refunds.
  """
  discountApplications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DiscountApplicationConnection!

  """The discount code used for the order."""
  discountCode: String

  """The discount codes used for the order."""
  discountCodes: [String!]!

  """
  The primary address of the customer.
  Returns `null` if neither the shipping address nor the billing address was provided.
  """
  displayAddress: MailingAddress

  """
  The financial status of the order that can be shown to the merchant.
  This field doesn't capture all the details of an order's financial state. It
  should only be used for display summary purposes.
  """
  displayFinancialStatus: OrderDisplayFinancialStatus

  """
  The fulfillment status for the order that can be shown to the merchant.
  This field does not capture all the details of an order's fulfillment state.
  It should only be used for display summary purposes.
  For a more granular view of the fulfillment status, refer to the [FulfillmentOrder](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder) object.
  """
  displayFulfillmentStatus: OrderDisplayFulfillmentStatus!

  """A list of the disputes associated with the order."""
  disputes: [OrderDisputeSummary!]!

  """Whether the order has had any edits applied."""
  edited: Boolean!

  """The email address associated with the customer."""
  email: String

  """
  Whether taxes on the order are estimated.
  This field returns `false` when taxes on the order are finalized and aren't subject to any changes.
  """
  estimatedTaxes: Boolean!

  """A list of events associated with the order."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """
  Whether there are line items that can be fulfilled.
  This field returns `false` when the order has no fulfillable line items.
  For a more granular view of the fulfillment status, refer to the [FulfillmentOrder](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder) object.
  """
  fulfillable: Boolean!

  """
  A list of fulfillment orders for a specific order.
  
  [FulfillmentOrder API access scopes](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder#api-access-scopes)
  govern which fulfillments orders are returned.
  An API client will only receive a subset of the fulfillment orders which belong to an order
  if they don't have the necessary access scopes to view all of the fulfillment orders.
  In the case that an API client does not have the access scopes necessary to view
  any of the fulfillment orders that belong to an order, an empty array will be returned.
  """
  fulfillmentOrders(
    """
    Whether fulfillment orders that are hidden from the merchant are included.
    For example, fulfillment orders that were closed after being combined or moved are hidden.
    """
    displayable: Boolean = false

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `assigned_location_id`
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): FulfillmentOrderConnection!

  """List of shipments for the order."""
  fulfillments(
    """Truncate the array result to this size."""
    first: Int
  ): [Fulfillment!]!

  """Whether the order has been paid in full."""
  fullyPaid: Boolean!

  """Whether the merchant added a timeline comment to the order."""
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!

  """
  The URL of the first page of the online store that the customer visited before they submitted the order.
  """
  landingPageDisplayText: String @deprecated(reason: "Use `customerJourneySummary.lastVisit.landingPageHtml` instead")

  """
  The first page of the online store that the customer visited before they submitted the order.
  """
  landingPageUrl: URL @deprecated(reason: "Use `customerJourneySummary.lastVisit.landingPage` instead")

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """A list of the order's line items."""
  lineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LineItemConnection!

  """A list of the order's line items."""
  lineItemsMutable(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LineItemMutableConnection! @deprecated(reason: "Use `lineItems` instead.")

  """List of localization extensions for the resource."""
  localizationExtensions(
    """The country codes of the extensions."""
    countryCodes: [CountryCode!]

    """The purpose of the extensions."""
    purposes: [LocalizationExtensionPurpose!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LocalizationExtensionConnection!

  """
  The fulfillment location that was assigned when the order was created.
  Orders can have multiple fulfillment orders. These fulfillment orders can each
  be assigned to a different location which is responsible for fulfilling a
  subset of the items in an order. The `Order.location` field will only point to
  one of these locations.
  Use the [`FulfillmentOrder`](https://shopify.dev/api/admin-graphql/latest/objects/fulfillmentorder)
  object for up-to-date fulfillment location information.
  """
  location: String @deprecated(reason: "Use `physicalLocation` instead.")

  """
  Whether the order can be edited by the merchant. For example, canceled orders can’t be edited.
  """
  merchantEditable: Boolean!

  """
  A list of reasons why the order can't be edited. For example, "Canceled orders can’t be edited".
  """
  merchantEditableErrors: [String!]!

  """The application acting as the Merchant of Record for the order."""
  merchantOfRecordApp: OrderApp

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  The unique identifier for the order that appears on the order page in the Shopify admin and the order status page.
  For example, "#1001", "EN1001", or "1001-A".
  This value isn't unique across multiple stores.
  """
  name: String!

  """
  The net payment for the order, based on the total amount received minus the total amount refunded, in shop currency.
  """
  netPayment: Money! @deprecated(reason: "Use `netPaymentSet` instead.")

  """
  The net payment for the order, based on the total amount received minus the
  total amount refunded, in shop and presentment currencies.
  """
  netPaymentSet: MoneyBag!

  """
  A list of line items that can't be fulfilled.
  For example, tips and fully refunded line items can't be fulfilled.
  For a more granular view of the fulfillment status, refer to the [FulfillmentOrder](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentOrder) object.
  """
  nonFulfillableLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LineItemConnection!

  """The contents of the note associated with the order."""
  note: String

  """
  The total amount of duties before returns, in shop and presentment currencies.
  Returns `null` if duties aren't applicable.
  """
  originalTotalDutiesSet: MoneyBag

  """
  The total price of the order at the time of order creation, in shop and presentment currencies.
  """
  originalTotalPriceSet: MoneyBag!

  """The payment collection details for the order."""
  paymentCollectionDetails: OrderPaymentCollectionDetails!

  """
  A list of the names of all payment gateways used for the order.
  For example, "Shopify Payments" and "Cash on Delivery (COD)".
  """
  paymentGatewayNames: [String!]!

  """The payment terms associated with the order."""
  paymentTerms: PaymentTerms

  """The phone number associated with the customer."""
  phone: String

  """
  The fulfillment location that was assigned when the order was created.
  Orders can have multiple fulfillment orders. These fulfillment orders can each
  be assigned to a different location which is responsible for fulfilling a
  subset of the items in an order. The `Order.physicalLocation` field will only
  point to one of these locations.
  Use the [`FulfillmentOrder`](https://shopify.dev/api/admin-graphql/latest/objects/fulfillmentorder)
  object for up to date fulfillment location information.
  """
  physicalLocation: Location

  """The payment `CurrencyCode` of the customer for the order."""
  presentmentCurrencyCode: CurrencyCode!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """
  The date and time when the order was processed.
  This date and time might not match the date and time when the order was created.
  """
  processedAt: DateTime!

  """The publication that the order was created from."""
  publication: Publication

  """The purchasing entity for the order."""
  purchasingEntity: PurchasingEntity

  """
  The marketing referral code from the link that the customer clicked to visit the store.
  Supports the following URL attributes: "ref", "source", or "r".
  For example, if the URL is `{shop}.myshopify.com/products/slide?ref=j2tj1tn2`, then this value is `j2tj1tn2`.
  """
  referralCode: String @deprecated(reason: "Use `customerJourneySummary.lastVisit.referralCode` instead")

  """
  A web domain or short description of the source that sent the customer to your
  online store. For example, "shopify.com" or "email".
  """
  referrerDisplayText: String @deprecated(reason: "Use `customerJourneySummary.lastVisit.referralInfoHtml` instead")

  """
  The URL of the webpage where the customer clicked a link that sent them to your online store.
  """
  referrerUrl: URL @deprecated(reason: "Use `customerJourneySummary.lastVisit.referrerUrl` instead")

  """
  The difference between the suggested and actual refund amount of all refunds
  that have been applied to the order. A positive value indicates a difference
  in the merchant's favor, and a negative value indicates a difference in the
  customer's favor.
  """
  refundDiscrepancySet: MoneyBag!

  """Whether the order can be refunded."""
  refundable: Boolean!

  """A list of refunds that have been applied to the order."""
  refunds(
    """Truncate the array result to this size."""
    first: Int
  ): [Refund!]!

  """
  The URL of the source that the order originated from, if found in the domain registry.
  """
  registeredSourceUrl: URL

  """
  Whether the order has shipping lines or at least one line item on the order that requires shipping.
  """
  requiresShipping: Boolean!

  """Whether any line item on the order can be restocked."""
  restockable: Boolean!

  """A list of returns for the order."""
  returns(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): ReturnConnection!

  """The fraud risk level of the order."""
  riskLevel: OrderRiskLevel!

  """A list of risks associated with the order."""
  risks(
    """Truncate the array result to this size."""
    first: Int
  ): [OrderRisk!]!

  """The mailing address of the customer."""
  shippingAddress: MailingAddress

  """A summary of all shipping costs on the order."""
  shippingLine: ShippingLine

  """A list of the order's shipping lines."""
  shippingLines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ShippingLineConnection!

  """
  A unique POS or third party order identifier.
  For example, "1234-12-1000" or "111-98567-54". The `receipt_number` field is derived from this value for POS orders.
  """
  sourceIdentifier: String

  """
  The sum of the quantities for all line items that contribute to the order's subtotal price.
  """
  subtotalLineItemsQuantity: Int!

  """
  The sum of the prices for all line items after discounts and before returns, in shop currency.
  If `taxesIncluded` is `true`, then the subtotal also includes tax.
  """
  subtotalPrice: Money @deprecated(reason: "Use `subtotalPriceSet` instead.")

  """
  The sum of the prices for all line items after discounts and before returns, in shop and presentment currencies.
  If `taxesIncluded` is `true`, then the subtotal also includes tax.
  """
  subtotalPriceSet: MoneyBag

  """A suggested refund for the order."""
  suggestedRefund(
    """
    The amount to refund for shipping. Overrides the `refundShipping` argument.
    Use the `shippingAmountV2` argument for multi-currency orders.
    """
    shippingAmount: Money

    """Whether to refund the full shipping amount."""
    refundShipping: Boolean

    """The line items from the order to include in the refund."""
    refundLineItems: [RefundLineItemInput!]

    """The duties from the order to include in the refund."""
    refundDuties: [RefundDutyInput!]

    """
    Whether the suggested refund should be created from all refundable line items on the order.
    If `true`, the `refundLineItems` argument will be ignored.
    """
    suggestFullRefund: Boolean = false
  ): SuggestedRefund

  """
  A comma separated list of tags associated with the order. Updating `tags` overwrites
  any existing tags that were previously added to the order. To add new tags without overwriting
  existing tags, use the [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsadd)
  mutation.
  """
  tags: [String!]!

  """
  A list of all tax lines applied to line items on the order, before returns.
  Tax line prices represent the total price for all tax lines with the same `rate` and `title`.
  """
  taxLines: [TaxLine!]!

  """Whether taxes are included in the subtotal price of the order."""
  taxesIncluded: Boolean!

  """
  Whether the order is a test.
  Test orders are made using the Shopify Bogus Gateway or a payment provider with test mode enabled.
  A test order can't be converted into a real order and vice versa.
  """
  test: Boolean!

  """
  The authorized amount that's uncaptured or undercaptured, in shop currency.
  This amount isn't adjusted for returns.
  """
  totalCapturable: Money! @deprecated(reason: "Use `totalCapturableSet` instead.")

  """
  The authorized amount that's uncaptured or undercaptured, in shop and presentment currencies.
  This amount isn't adjusted for returns.
  """
  totalCapturableSet: MoneyBag!

  """
  The total amount discounted on the order before returns, in shop currency.
  This includes both order and line level discounts.
  """
  totalDiscounts: Money @deprecated(reason: "Use `totalDiscountsSet` instead.")

  """
  The total amount discounted on the order before returns, in shop and presentment currencies.
  This includes both order and line level discounts.
  """
  totalDiscountsSet: MoneyBag

  """
  The total amount not yet transacted for the order, in shop and presentment currencies.
  A positive value indicates a difference in the merchant's favor (payment from
  customer to merchant) and a negative value indicates a difference in the
  customer's favor (refund from merchant to customer).
  """
  totalOutstandingSet: MoneyBag!

  """
  The total price of the order, before returns, in shop currency.
  This includes taxes and discounts.
  """
  totalPrice: Money! @deprecated(reason: "Use `totalPriceSet` instead.")

  """
  The total price of the order, before returns, in shop and presentment currencies.
  This includes taxes and discounts.
  """
  totalPriceSet: MoneyBag!

  """
  The total amount received from the customer before returns, in shop currency.
  """
  totalReceived: Money! @deprecated(reason: "Use `totalReceivedSet` instead.")

  """
  The total amount received from the customer before returns, in shop and presentment currencies.
  """
  totalReceivedSet: MoneyBag!

  """The total amount that was refunded, in shop currency."""
  totalRefunded: Money! @deprecated(reason: "Use `totalRefundedSet` instead.")

  """
  The total amount that was refunded, in shop and presentment currencies.
  """
  totalRefundedSet: MoneyBag!

  """
  The total amount of shipping that was refunded, in shop and presentment currencies.
  """
  totalRefundedShippingSet: MoneyBag!

  """
  The total shipping amount before discounts and returns, in shop currency.
  """
  totalShippingPrice: Money! @deprecated(reason: "Use `totalShippingPriceSet` instead.")

  """
  The total shipping amount before discounts and returns, in shop and presentment currencies.
  """
  totalShippingPriceSet: MoneyBag!

  """The total tax amount before returns, in shop currency."""
  totalTax: Money @deprecated(reason: "Use `totalTaxSet` instead.")

  """
  The total tax amount before returns, in shop and presentment currencies.
  """
  totalTaxSet: MoneyBag

  """The sum of all tip amounts for the order, in shop currency."""
  totalTipReceived: MoneyV2! @deprecated(reason: "Use `totalTipReceivedSet` instead.")

  """
  The sum of all tip amounts for the order, in shop and presentment currencies.
  """
  totalTipReceivedSet: MoneyBag!

  """The total weight of the order before returns, in grams."""
  totalWeight: UnsignedInt64

  """A list of transactions associated with the order."""
  transactions(
    """Truncate the array result to this size."""
    first: Int

    """Filter transactions by whether they are capturable."""
    capturable: Boolean

    """
    Filter transactions by whether they can be resolved manually.
    For example, fully captured or voided transactions aren't manually resolvable.
    """
    manuallyResolvable: Boolean
  ): [OrderTransaction!]!

  """Whether no payments have been made for the order."""
  unpaid: Boolean!

  """The date and time when the order was modified last."""
  updatedAt: DateTime!
}

"""
The possible order action types for a
[sales agreement](https://shopify.dev/api/admin-graphql/latest/interfaces/salesagreement).
"""
enum OrderActionType {
  """An order with a purchase or charge."""
  ORDER

  """An edit to the order."""
  ORDER_EDIT

  """A refund on the order."""
  REFUND

  """
  An unknown agreement action. Represents new actions that may be added in future versions.
  """
  UNKNOWN
}

"""An agreement associated with an order placement."""
type OrderAgreement implements SalesAgreement {
  """The application that created the agreement."""
  app: App

  """The date and time at which the agreement occured."""
  happenedAt: DateTime!

  """The unique ID for the agreement."""
  id: ID!

  """The order associated with the agreement."""
  order: Order!

  """The reason the agremeent was created."""
  reason: OrderActionType!

  """The sales associated with the agreement."""
  sales(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SaleConnection!

  """The staff member associated with the agreement."""
  user: StaffMember
}

"""The [application](https://shopify.dev/apps) that created the order."""
type OrderApp {
  """The application icon."""
  icon: Image!

  """The application ID."""
  id: ID!

  """The name of the application."""
  name: String!
}

"""Represents the reason for the order's cancellation."""
enum OrderCancelReason {
  """The customer wanted to cancel the order."""
  CUSTOMER

  """Payment was declined."""
  DECLINED

  """The order was fraudulent."""
  FRAUD

  """There was insufficient inventory."""
  INVENTORY

  """The order was canceled for an unlisted reason."""
  OTHER
}

"""
The input fields for the authorized transaction to capture and the total amount to capture from it.
"""
input OrderCaptureInput {
  """The ID of the order to capture."""
  id: ID!

  """The ID of the authorized transaction to capture."""
  parentTransactionId: ID!

  """
  The amount to capture. The capture amount can't be greater than the amount of the authorized transaction.
  """
  amount: Money!

  """
  The currency (in ISO format) that's used to capture the order. This must be
  the presentment currency (the currency used by the customer) and is a required
  field for orders where the currency and presentment currency differ.
  """
  currency: CurrencyCode
}

"""Return type for `orderCapture` mutation."""
type OrderCapturePayload {
  """The created capture transaction."""
  transaction: OrderTransaction

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for specifying an open order to close."""
input OrderCloseInput {
  """The ID of the order to close."""
  id: ID!
}

"""Return type for `orderClose` mutation."""
type OrderClosePayload {
  """The closed order."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An auto-generated type for paginating through multiple Orders."""
type OrderConnection {
  """A list of edges."""
  edges: [OrderEdge!]!

  """A list of the nodes contained in OrderEdge."""
  nodes: [Order!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `orderCreateMandatePayment` mutation."""
type OrderCreateMandatePaymentPayload {
  """The async job used for charging the payment."""
  job: Job

  """The Unique ID for the created payment."""
  paymentReferenceId: String

  """The list of errors that occurred from executing the mutation."""
  userErrors: [OrderCreateMandatePaymentUserError!]!
}

"""
An error that occurs during the execution of `OrderCreateMandatePayment`.
"""
type OrderCreateMandatePaymentUserError implements DisplayableError {
  """The error code."""
  code: OrderCreateMandatePaymentUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `OrderCreateMandatePaymentUserError`.
"""
enum OrderCreateMandatePaymentUserErrorCode {
  """Errors for mandate payment on order."""
  ORDER_MANDATE_PAYMENT_ERROR_CODE
}

"""Represents the order's current financial status."""
enum OrderDisplayFinancialStatus {
  """Displayed as **Pending**."""
  PENDING

  """Displayed as **Authorized**."""
  AUTHORIZED

  """Displayed as **Partially paid**."""
  PARTIALLY_PAID

  """Displayed as **Partially refunded**."""
  PARTIALLY_REFUNDED

  """Displayed as **Voided**."""
  VOIDED

  """Displayed as **Paid**."""
  PAID

  """Displayed as **Refunded**."""
  REFUNDED

  """Displayed as **Expired**."""
  EXPIRED
}

"""
Represents the order's aggregated fulfillment status for display purposes.
"""
enum OrderDisplayFulfillmentStatus {
  """
  Displayed as **Unfulfilled**. None of the items in the order have been fulfilled.
  """
  UNFULFILLED

  """
  Displayed as **Partially fulfilled**. Some of the items in the order have been fulfilled.
  """
  PARTIALLY_FULFILLED

  """
  Displayed as **Fulfilled**. All the items in the order have been fulfilled.
  """
  FULFILLED

  """
  Displayed as **Restocked**. All the items in the order have been restocked. Replaced by the "UNFULFILLED" status.
  """
  RESTOCKED

  """
  Displayed as **Pending fulfillment**. A request for fulfillment of some items
  awaits a response from the fulfillment service. Replaced by the "IN_PROGRESS" status.
  """
  PENDING_FULFILLMENT

  """
  Displayed as **Open**. None of the items in the order have been fulfilled. Replaced by "UNFULFILLED" status.
  """
  OPEN

  """
  Displayed as **In progress**. Some of the items in the order have been
  fulfilled, or a request for fulfillment has been sent to the fulfillment service.
  """
  IN_PROGRESS

  """
  Displayed as **On hold**. All of the unfulfilled items in this order are on hold.
  """
  ON_HOLD

  """
  Displayed as **Scheduled**. All of the unfulfilled items in this order are scheduled for fulfillment at later time.
  """
  SCHEDULED
}

"""A summary of the important details for a dispute on an order."""
type OrderDisputeSummary implements Node {
  """A globally-unique ID."""
  id: ID!

  """The type that the dispute was initiated as."""
  initiatedAs: DisputeType!

  """The current status of the dispute."""
  status: DisputeStatus!
}

"""
An auto-generated type which holds one Order and a cursor during pagination.
"""
type OrderEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of OrderEdge."""
  node: Order!
}

"""Return type for `orderEditAddCustomItem` mutation."""
type OrderEditAddCustomItemPayload {
  """
  The custom line item that will be added to the order based on the current edits.
  """
  calculatedLineItem: CalculatedLineItem

  """An order with the edits applied but not saved."""
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `orderEditAddLineItemDiscount` mutation."""
type OrderEditAddLineItemDiscountPayload {
  """The discount applied to a line item during this order edit."""
  addedDiscountStagedChange: OrderStagedChangeAddLineItemDiscount

  """The line item with the edits applied but not saved."""
  calculatedLineItem: CalculatedLineItem

  """An order with the edits applied but not saved."""
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `orderEditAddVariant` mutation."""
type OrderEditAddVariantPayload {
  """
  The [calculated line item](https://shopify.dev/api/admin-graphql/latest/objects/calculatedlineitem)
  that's added during this order edit.
  """
  calculatedLineItem: CalculatedLineItem

  """
  The [calculated order](https://shopify.dev/api/admin-graphql/latest/objects/calculatedorder)
  with the edits applied but not saved.
  """
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An agreement associated with an edit to the order."""
type OrderEditAgreement implements SalesAgreement {
  """The application that created the agreement."""
  app: App

  """The date and time at which the agreement occured."""
  happenedAt: DateTime!

  """The unique ID for the agreement."""
  id: ID!

  """The reason the agremeent was created."""
  reason: OrderActionType!

  """The sales associated with the agreement."""
  sales(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SaleConnection!

  """The staff member associated with the agreement."""
  user: StaffMember
}

"""The input fields used to add a discount during an order edit."""
input OrderEditAppliedDiscountInput {
  """The description of the discount."""
  description: String

  """The value of the discount as a fixed amount."""
  fixedValue: MoneyInput

  """The value of the discount as a percentage."""
  percentValue: Float
}

"""Return type for `orderEditBegin` mutation."""
type OrderEditBeginPayload {
  """The order that will be edited."""
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `orderEditCommit` mutation."""
type OrderEditCommitPayload {
  """The order with changes applied."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `orderEditRemoveLineItemDiscount` mutation."""
type OrderEditRemoveLineItemDiscountPayload {
  """The calculated line item after removal of the discount."""
  calculatedLineItem: CalculatedLineItem

  """An order with the edits applied but not saved."""
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `orderEditSetQuantity` mutation."""
type OrderEditSetQuantityPayload {
  """The calculated line item with the edits applied but not saved."""
  calculatedLineItem: CalculatedLineItem

  """The calculated order with the edits applied but not saved."""
  calculatedOrder: CalculatedOrder

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields for specifying the information to be updated on an order when using the orderUpdate mutation.
"""
input OrderInput {
  """The ID of the order to update."""
  id: ID!

  """
  A new customer email address for the order. Overwrites the existing email address.
  """
  email: String

  """
  The new contents for the note associated with the order. Overwrites the existing note.
  """
  note: String

  """A new list of tags for the order. Overwrites the existing tags."""
  tags: [String!]

  """
  The new shipping address for the order. Overwrites the existing shipping address.
  """
  shippingAddress: MailingAddressInput

  """
  A new list of custom attributes for the order. Overwrites the existing custom attributes.
  """
  customAttributes: [AttributeInput!]

  """
  A list of new metafields to add to the existing metafields for the order.
  """
  metafields: [MetafieldInput!]

  """
  A list of new [localization extensions](https://shopify.dev/api/admin-graphql/latest/objects/localizationextension)
  to add to the existing list of localization extensions for the order.
  """
  localizationExtensions: [LocalizationExtensionInput!]
}

"""Return type for `orderInvoiceSend` mutation."""
type OrderInvoiceSendPayload {
  """The order associated with the invoice email."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [OrderInvoiceSendUserError!]!
}

"""An error that occurs during the execution of `OrderInvoiceSend`."""
type OrderInvoiceSendUserError implements DisplayableError {
  """The error code."""
  code: OrderInvoiceSendUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `OrderInvoiceSendUserError`.
"""
enum OrderInvoiceSendUserErrorCode {
  """An error occurred while sending the invoice."""
  ORDER_INVOICE_SEND_UNSUCCESSFUL
}

"""The input fields for specifying the order to mark as paid."""
input OrderMarkAsPaidInput {
  """The ID of the order to mark as paid."""
  id: ID!
}

"""Return type for `orderMarkAsPaid` mutation."""
type OrderMarkAsPaidPayload {
  """The order marked as paid."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for specifying a closed order to open."""
input OrderOpenInput {
  """The ID of the order to open."""
  id: ID!
}

"""Return type for `orderOpen` mutation."""
type OrderOpenPayload {
  """The opened order."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The payment collection details for an order that requires additional payment following an edit to the order.
"""
type OrderPaymentCollectionDetails {
  """The URL to use for collecting an additional payment on the order."""
  additionalPaymentCollectionUrl: URL

  """
  The list of vaulted payment methods for the order with their permissions.
  """
  vaultedPaymentMethods: [PaymentMandate!]
}

"""The status of a customer's payment for an order."""
type OrderPaymentStatus {
  """
  A message describing an error during the asynchronous processing of a payment.
  """
  errorMessage: String

  """
  The ID of the payment, initially returned by an `orderCreateMandatePayment` or `orderCreatePayment` mutation.
  """
  paymentReferenceId: String!

  """The status of the payment."""
  status: OrderPaymentStatusResult!

  """
  A translated message describing an error during the asynchronous processing of a payment.
  """
  translatedErrorMessage: String
}

"""The type of a payment status."""
enum OrderPaymentStatusResult {
  """The payment succeeded."""
  SUCCESS

  """The payment is authorized."""
  AUTHORIZED

  """The payment is voided."""
  VOIDED

  """The payment is refunded."""
  REFUNDED

  """The payment is captured."""
  CAPTURED

  """The payment is in purchased status."""
  PURCHASED

  """There was an error initiating the payment."""
  ERROR

  """The payment is still being processed."""
  PROCESSING

  """Redirect required."""
  REDIRECT_REQUIRED

  """Payment can be retried."""
  RETRYABLE

  """Status is unknown."""
  UNKNOWN
}

"""Represents a fraud check on an order."""
type OrderRisk {
  """
  Whether the risk level is shown in the Shopify admin. If false, then this
  order risk is ignored when Shopify determines the overall risk level for the order.
  """
  display: Boolean!

  """
  The likelihood that an order is fraudulent, based on this order risk.
  
  The level can be set by Shopify risk analysis or by an app.
  """
  level: OrderRiskLevel

  """The risk message that's shown to the merchant in the Shopify admin."""
  message: String
}

"""The likelihood that an order is fraudulent."""
enum OrderRiskLevel {
  """There is a low level of risk that this order is fraudulent."""
  LOW

  """There is a medium level of risk that this order is fraudulent."""
  MEDIUM

  """There is a high level of risk that this order is fraudulent."""
  HIGH
}

"""The set of valid sort keys for the Order query."""
enum OrderSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `customer_name` value."""
  CUSTOMER_NAME

  """Sort orders by their shipping address country and city."""
  DESTINATION

  """Sort by the `financial_status` value."""
  FINANCIAL_STATUS

  """Sort by the `fulfillment_status` value."""
  FULFILLMENT_STATUS

  """Sort by the `order_number` value."""
  ORDER_NUMBER

  """Sort by the `processed_at` value."""
  PROCESSED_AT

  """Sort by the `total_price` value."""
  TOTAL_PRICE

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""A change that has been applied to an order."""
union OrderStagedChange = OrderStagedChangeAddCustomItem | OrderStagedChangeAddLineItemDiscount | OrderStagedChangeAddShippingLine | OrderStagedChangeAddVariant | OrderStagedChangeDecrementItem | OrderStagedChangeIncrementItem

"""
A change to the order representing the addition of a
custom line item. For example, you might want to add gift wrapping service
as a custom line item.
"""
type OrderStagedChangeAddCustomItem {
  """
  The price of an individual item without any discounts applied. This value can't be negative.
  """
  originalUnitPrice: MoneyV2!

  """
  The quantity of the custom item to add to the order. This value must be greater than zero.
  """
  quantity: Int!

  """The title of the custom item."""
  title: String!
}

"""
The discount applied to an item that was added during the current order edit.
"""
type OrderStagedChangeAddLineItemDiscount {
  """The description of the discount."""
  description: String!

  """A globally-unique ID."""
  id: ID!

  """The pricing value of the discount."""
  value: PricingValue!
}

"""
A new [shipping line](https://shopify.dev/api/admin-graphql/latest/objects/shippingline)
added as part of an order edit.
"""
type OrderStagedChangeAddShippingLine {
  """The phone number at the shipping address."""
  phone: String

  """The shipping line's title that's shown to the buyer."""
  presentmentTitle: String

  """The price that applies to the shipping line."""
  price: MoneyV2!

  """The title of the shipping line."""
  title: String
}

"""
A change to the order representing the addition of an existing product variant.
"""
type OrderStagedChangeAddVariant {
  """The quantity of the product variant that was added."""
  quantity: Int!

  """The product variant that was added."""
  variant: ProductVariant!
}

"""
An auto-generated type for paginating through multiple OrderStagedChanges.
"""
type OrderStagedChangeConnection {
  """A list of edges."""
  edges: [OrderStagedChangeEdge!]!

  """A list of the nodes contained in OrderStagedChangeEdge."""
  nodes: [OrderStagedChange!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""An removal of items from an existing line item on the order."""
type OrderStagedChangeDecrementItem {
  """The number of items removed."""
  delta: Int!

  """The original line item."""
  lineItem: LineItem!

  """The intention to restock the removed items."""
  restock: Boolean!
}

"""
An auto-generated type which holds one OrderStagedChange and a cursor during pagination.
"""
type OrderStagedChangeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of OrderStagedChangeEdge."""
  node: OrderStagedChange!
}

"""An addition of items to an existing line item on the order."""
type OrderStagedChangeIncrementItem {
  """The number of items added."""
  delta: Int!

  """The original line item."""
  lineItem: LineItem!
}

"""A payment transaction in the context of an order."""
type OrderTransaction implements Node {
  """The masked account number associated with the payment method."""
  accountNumber: String

  """The amount of money."""
  amount: Money! @deprecated(reason: "Use `amountSet` instead.")

  """
  The amount and currency of the transaction in shop and presentment currencies.
  """
  amountSet: MoneyBag!

  """The amount and currency of the transaction."""
  amountV2: MoneyV2! @deprecated(reason: "Use `amountSet` instead.")

  """Authorization code associated with the transaction."""
  authorizationCode: String

  """
  The time when the authorization expires. This field is available only to
  stores on a Shopify Plus plan and is populated only for Shopify Payments
  authorizations.
  """
  authorizationExpiresAt: DateTime

  """Date and time when the transaction was created."""
  createdAt: DateTime!

  """A standardized error code, independent of the payment provider."""
  errorCode: OrderTransactionErrorCode

  """
  The transaction fees charged on the order transaction. Only present for Shopify Payments transactions.
  """
  fees: [TransactionFee!]!

  """
  The human-readable payment gateway name used to process the transaction.
  """
  formattedGateway: String

  """The payment gateway used to process the transaction."""
  gateway: String

  """A globally-unique ID."""
  id: ID!

  """The kind of transaction."""
  kind: OrderTransactionKind!

  """Whether the transaction can be manually captured."""
  manuallyCapturable: Boolean!

  """
  Specifies the available amount to refund on the gateway.
  This value is only available for transactions of type `SuggestedRefund`.
  """
  maximumRefundable: Money @deprecated(reason: "Use `maximumRefundableV2` instead.")

  """
  Specifies the available amount with currency to refund on the gateway.
  This value is only available for transactions of type `SuggestedRefund`.
  """
  maximumRefundableV2: MoneyV2

  """The associated order."""
  order: Order

  """
  The associated parent transaction, for example the authorization of a capture.
  """
  parentTransaction: OrderTransaction

  """The payment details for the transaction."""
  paymentDetails: PaymentDetails

  """The payment icon to display for the transaction."""
  paymentIcon: Image

  """The payment ID associated with the transaction."""
  paymentId: String

  """
  The payment method used for the transaction. This value is `null` if the payment method is unknown.
  """
  paymentMethod: PaymentMethods @deprecated(reason: "Use `paymentIcon` instead.")

  """Date and time when the transaction was processed."""
  processedAt: DateTime

  """
  The transaction receipt that the payment gateway attaches to the transaction.
  The value of this field depends on which payment gateway processed the transaction.
  """
  receipt: String @deprecated(reason: "Use `receiptJson` instead.")

  """
  The transaction receipt that the payment gateway attaches to the transaction.
  The value of this field depends on which payment gateway processed the transaction.
  """
  receiptJson: JSON

  """The settlement currency."""
  settlementCurrency: CurrencyCode

  """
  The rate used when converting the transaction amount to settlement currency.
  """
  settlementCurrencyRate: Decimal

  """
  Contains all Shopify Payments information related to an order transaction.
  This field is available only to stores on a Shopify Plus plan.
  """
  shopifyPaymentsSet: ShopifyPaymentsTransactionSet

  """The status of this transaction."""
  status: OrderTransactionStatus!

  """Whether the transaction is a test transaction."""
  test: Boolean!

  """
  Specifies the available amount to capture on the gateway.
  Only available when an amount is capturable or manually mark as paid.
  """
  totalUnsettled: Money @deprecated(reason: "Use `totalUnsettledSet` instead.")

  """
  Specifies the available amount with currency to capture on the gateway in shop and presentment currencies.
  Only available when an amount is capturable or manually mark as paid.
  """
  totalUnsettledSet: MoneyBag

  """
  Specifies the available amount with currency to capture on the gateway.
  Only available when an amount is capturable or manually mark as paid.
  """
  totalUnsettledV2: MoneyV2 @deprecated(reason: "Use `totalUnsettledSet` instead.")

  """
  Staff member who was logged into the Shopify POS device when the transaction was processed.
  """
  user: StaffMember
}

"""
An auto-generated type for paginating through multiple OrderTransactions.
"""
type OrderTransactionConnection {
  """A list of edges."""
  edges: [OrderTransactionEdge!]!

  """A list of the nodes contained in OrderTransactionEdge."""
  nodes: [OrderTransaction!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one OrderTransaction and a cursor during pagination.
"""
type OrderTransactionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of OrderTransactionEdge."""
  node: OrderTransaction!
}

"""A standardized error code, independent of the payment provider."""
enum OrderTransactionErrorCode {
  """The card number is incorrect."""
  INCORRECT_NUMBER

  """The format of the card number is incorrect."""
  INVALID_NUMBER

  """The format of the expiry date is incorrect."""
  INVALID_EXPIRY_DATE

  """The format of the CVC is incorrect."""
  INVALID_CVC

  """The card is expired."""
  EXPIRED_CARD

  """The CVC does not match the card number."""
  INCORRECT_CVC

  """The ZIP or postal code does not match the card number."""
  INCORRECT_ZIP

  """The address does not match the card number."""
  INCORRECT_ADDRESS

  """The entered PIN is incorrect."""
  INCORRECT_PIN

  """The card was declined."""
  CARD_DECLINED

  """There was an error while processing the payment."""
  PROCESSING_ERROR

  """Call the card issuer."""
  CALL_ISSUER

  """
  The card has been reported as lost or stolen, and the card issuer has
  requested that the merchant keep the card and call the number on the back.
  """
  PICK_UP_CARD

  """There is an error in the gateway or merchant configuration."""
  CONFIG_ERROR

  """A real card was used but the gateway was in test mode."""
  TEST_MODE_LIVE_CARD

  """
  The gateway or merchant configuration doesn't support a feature, such as network tokenization.
  """
  UNSUPPORTED_FEATURE

  """There was an unknown error with processing the payment."""
  GENERIC_ERROR

  """The payment method is not available in the customer's country."""
  INVALID_COUNTRY

  """The amount is either too high or too low for the provider."""
  INVALID_AMOUNT

  """The payment method is momentarily unavailable."""
  PAYMENT_METHOD_UNAVAILABLE

  """The payment method was invalid."""
  AMAZON_PAYMENTS_INVALID_PAYMENT_METHOD

  """The maximum amount has been captured."""
  AMAZON_PAYMENTS_MAX_AMOUNT_CHARGED

  """The maximum amount has been refunded."""
  AMAZON_PAYMENTS_MAX_AMOUNT_REFUNDED

  """The maximum of 10 authorizations has been captured for an order."""
  AMAZON_PAYMENTS_MAX_AUTHORIZATIONS_CAPTURED

  """The maximum of 10 refunds has been processed for an order."""
  AMAZON_PAYMENTS_MAX_REFUNDS_PROCESSED

  """The order was canceled, which canceled all open authorizations."""
  AMAZON_PAYMENTS_ORDER_REFERENCE_CANCELED

  """The order was not confirmed within three hours."""
  AMAZON_PAYMENTS_STALE
}

"""
The input fields for the information needed to create an order transaction.
"""
input OrderTransactionInput {
  """The amount of money for this transaction."""
  amount: Money!

  """The payment gateway to use for this transaction."""
  gateway: String!

  """The kind of transaction."""
  kind: OrderTransactionKind!

  """The ID of the order associated with the transaction."""
  orderId: ID!

  """
  The ID of the optional parent transaction, for example the authorization of a capture.
  """
  parentId: ID
}

"""The different kinds of order transactions."""
enum OrderTransactionKind {
  """An authorization and capture performed together in a single step."""
  SALE

  """A transfer of the money that was reserved by an authorization."""
  CAPTURE

  """
  An amount reserved against the cardholder's funding source.
  Money does not change hands until the authorization is captured.
  """
  AUTHORIZATION

  """A cancelation of an authorization transaction."""
  VOID

  """
  A partial or full return of captured funds to the cardholder.
  A refund can happen only after a capture is processed.
  """
  REFUND

  """
  The money returned to the customer when they've paid too much during a cash transaction.
  """
  CHANGE

  """An authorization for a payment taken with an EMV credit card reader."""
  EMV_AUTHORIZATION

  """A suggested refund transaction that can be used to create a refund."""
  SUGGESTED_REFUND
}

"""The different states that an `OrderTransaction` can have."""
enum OrderTransactionStatus {
  """The transaction succeeded."""
  SUCCESS

  """The transaction failed."""
  FAILURE

  """The transaction is pending."""
  PENDING

  """There was an error while processing the transaction."""
  ERROR

  """Awaiting a response."""
  AWAITING_RESPONSE

  """The transaction status is unknown."""
  UNKNOWN
}

"""Return type for `orderUpdate` mutation."""
type OrderUpdatePayload {
  """The updated order."""
  order: Order

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Returns information about pagination in a connection, in accordance with the
[Relay specification](https://relay.dev/graphql/connections.htm#sec-undefined.PageInfo).
For more information, please read our [GraphQL Pagination Usage Guide](https://shopify.dev/api/usage/pagination-graphql).
"""
type PageInfo {
  """The cursor corresponding to the last node in edges."""
  endCursor: String

  """Whether there are more pages to fetch following the current page."""
  hasNextPage: Boolean!

  """Whether there are any pages prior to the current page."""
  hasPreviousPage: Boolean!

  """The cursor corresponding to the first node in edges."""
  startCursor: String
}

"""A ShopifyQL parsing error."""
type ParseError {
  """An error code for the error."""
  code: ParseErrorCode!

  """The description of the parsing error."""
  message: String!

  """The start and end range for the error."""
  range: ParseErrorRange
}

"""ShopifyQL parsing errors."""
enum ParseErrorCode {
  """Syntax not recognized."""
  SYNTAX_NOT_RECOGNIZED

  """Semantically invalid."""
  SEMANTICALLY_INVALID

  """Table not found."""
  TABLE_NOT_FOUND

  """Column not found."""
  COLUMN_NOT_FOUND

  """Value isn't parsable."""
  VALUE_NOT_PARSABLE

  """Date isn't parsable."""
  DATE_NOT_PARSABLE

  """Datetime value isn't parsable."""
  DATE_TIME_NOT_PARSABLE

  """Date interval not found."""
  DATE_INTERVAL_NOT_FOUND

  """Named date not found."""
  NAMED_DATE_NOT_FOUND

  """Sort field not found."""
  SORT_FIELD_NOT_FOUND

  """Limit is invalid."""
  LIMIT_INVALID

  """The type of visualization is invalid. Acceptable types: bar, line."""
  VISUALIZE_CHART_TYPE_NOT_FOUND

  """Function does not have any valid modifiers."""
  FUNCTION_MODIFIER_NOT_FOUND

  """Function is missing required argument(s)."""
  FUNCTION_ARGUMENTS_NOT_FOUND

  """Function has too many arguments."""
  FUNCTION_EXCESS_ARGUMENTS

  """Keyword `FROM` not found."""
  FROM_NOT_FOUND

  """Query is missing `SHOW` or `VISUALIZE`."""
  PRESENTMENT_NOT_FOUND

  """Use the correct syntax for either `SHOW` or `VISUALIZE`."""
  EXCESS_PRESENTMENTS

  """Function has incompatible types."""
  FUNCTION_INCOMPATIBLE_TYPES

  """Visualize has too many projections."""
  VISUALIZE_EXCESS_PROJECTIONS

  """Unknown error."""
  UNKNOWN

  """Invalid arguments for operator."""
  OPERATOR_INCOMPATIBLE_TYPES

  """Function `VISUALIZE` contains a data type which cannot be plotted."""
  VISUALIZE_INCOMPATIBLE_TYPES

  """Function `VISUALIZE` requires `GROUP BY`."""
  VISUALIZE_GROUP_BY_NOT_FOUND

  """
  Function `VISUALIZE` can only use `GROUP BY` or `GROUP BY` with the `ALL` modifier, not both.
  """
  VISUALIZE_GROUP_BY_MIXED_BACKFILL

  """
  Mixing an aggregate expression and a non-aggregate expression is not allowed.
  """
  MIXED_AGGREGATE_AND_NON_AGGREGATE

  """
  An aggregate function received a nested aggregate argument, which is not allowed.
  """
  FUNCTION_NESTED_AGGREGATE

  """
  Time function is incompatible in a `GROUP BY` clause with the `ALL` modifier.
  """
  TIME_FUNCTION_NOT_FOUND

  """Mixing of `IN` list arguments of different data types is not allowed."""
  LIST_MIXED_ARGUMENT_TYPES

  """Mixing of `SINCE` and/or `UNTIL` with `DURING` is not allowed."""
  EXCESS_PERIODS

  """Invalid entry."""
  SYNTAX_INVALID_TOKEN

  """Identifier after `SHOW` is not valid in its current position."""
  SYNTAX_NO_VIABLE_ALTERNATIVE

  """
  Invalid `COMPARE TO` period specified. Make sure it's not the same as the `DURING` clause.
  """
  COMPARE_TO_INVALID_PERIOD

  """The time period for `COMPARE TO` must be the same length as `DURING`."""
  COMPARE_TO_INCOMPATIBLE_PERIOD

  """
  When using `COMPARE TO` with a time-based `GROUP BY`, `ALL` must be used.
  """
  UNBACKFILLED_TIME_GROUP_BY_COMPARISON

  """Comparison queries must only contain aggregated fields."""
  COMPARISON_WITH_NON_AGGREGATE_FIELDS

  """Column must include `GROUP BY` arg1."""
  REQUIRED_GROUP_BY_NOT_FOUND

  """Identifier or function out of place."""
  SYNTAX_INPUT_MISMATCH

  """Identifier or function out of place."""
  SYNTAX_UNWANTED_TOKEN

  """Query is incomplete."""
  SYNTAX_MISSING_TOKEN

  """Function not found."""
  FUNCTION_NOT_FOUND

  """Visualization type not found."""
  VISUALIZE_TYPE_NOT_FOUND

  """Function modifier is invalid."""
  FUNCTION_MODIFIER_INVALID

  """Visualize By or Over keywords not found."""
  VISUALIZE_BY_OR_OVER_NOT_FOUND

  """Visualize contains both `By` and `Over` keywords."""
  VISUALIZE_CONTAINS_BY_AND_OVER

  """Binary expression has incompatible types."""
  BINARY_EXPRESSION_INCOMPATIBLE_TYPES

  """Visualize has too many alpha projections."""
  VISUALIZE_EXCESS_PROJECTIONS_ALPHA

  """
  Fuction `GROUP BY` is limited to one field when that field is using the `ALL` modifier.
  """
  EXCESS_GROUP_BY_ALL

  """
  When using `GROUP BY` with the `ALL` modifier, `SINCE` or `DURING` must be defined.
  """
  GROUP_BY_ALL_DATE_RANGE_NOT_FOUND

  """Cannot use a `COMPARE TO` clause without a `DURING` clause."""
  COMPARE_TO_WITHOUT_DURING

  """Function `GROUP BY` has too many projections."""
  GROUP_BY_EXCESS_PROJECTIONS
}

"""A range of ShopifyQL parsing errors."""
type ParseErrorRange {
  """The ending position of the error."""
  end: ErrorPosition!

  """The starting position of the error."""
  start: ErrorPosition!
}

"""Payment details related to a transaction."""
union PaymentDetails = CardPaymentDetails

"""All possible instrument outputs for Payment Mandates."""
union PaymentInstrument = VaultCreditCard | VaultPaypalBillingAgreement

"""
A payment instrument and the permission
the owner of the instrument gives to the merchant to debit it.
"""
type PaymentMandate implements Node {
  """The unique ID of a payment mandate."""
  id: ID!

  """The outputs details of the payment instrument."""
  paymentInstrument: PaymentInstrument!
}

"""Some of the payment methods used in Shopify."""
enum PaymentMethods {
  VISA
  MASTERCARD
  DISCOVER
  AMERICAN_EXPRESS
  DINERS_CLUB
  JCB

  """The payment method for UnionPay payment."""
  UNIONPAY

  """The payment method for Elo payment."""
  ELO
  DANKORT
  MAESTRO
  FORBRUGSFORENINGEN
  PAYPAL
  BOGUS
  BITCOIN
  LITECOIN
  DOGECOIN

  """The payment method for Interac payment."""
  INTERAC

  """The payment method for eftpos_au payment."""
  EFTPOS
}

"""Return type for `paymentReminderSend` mutation."""
type PaymentReminderSendPayload {
  """Whether the payment reminder email was successfully sent."""
  success: Boolean

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PaymentReminderSendUserError!]!
}

"""An error that occurs during the execution of `PaymentReminderSend`."""
type PaymentReminderSendUserError implements DisplayableError {
  """The error code."""
  code: PaymentReminderSendUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PaymentReminderSendUserError`.
"""
enum PaymentReminderSendUserErrorCode {
  """An error occurred while sending the payment reminder."""
  PAYMENT_REMINDER_SEND_UNSUCCESSFUL
}

"""
Represents the payment schedule for a single payment defined in the payment terms.
"""
type PaymentSchedule implements Node {
  """Amount owed for this payment schedule."""
  amount: MoneyV2!

  """Date and time when the payment schedule is paid or fulfilled."""
  completedAt: DateTime

  """Date and time when the payment schedule is due."""
  dueAt: DateTime

  """A globally-unique ID."""
  id: ID!

  """Date and time when the invoice is sent."""
  issuedAt: DateTime

  """The payment terms the payment schedule belongs to."""
  paymentTerms: PaymentTerms!
}

"""
An auto-generated type for paginating through multiple PaymentSchedules.
"""
type PaymentScheduleConnection {
  """A list of edges."""
  edges: [PaymentScheduleEdge!]!

  """A list of the nodes contained in PaymentScheduleEdge."""
  nodes: [PaymentSchedule!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one PaymentSchedule and a cursor during pagination.
"""
type PaymentScheduleEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PaymentScheduleEdge."""
  node: PaymentSchedule!
}

"""The input fields used to create a payment schedule for payment terms."""
input PaymentScheduleInput {
  """
  Specifies the date and time that the payment schedule was issued. This field must be provided for net type payment terms.
  """
  issuedAt: DateTime

  """
  Specifies the date and time when the payment schedule is due. This field must be provided for fixed type payment terms.
  """
  dueAt: DateTime
}

"""Settings related to payments."""
type PaymentSettings {
  """List of the digital wallets which the shop supports."""
  supportedDigitalWallets: [DigitalWallet!]!
}

"""Represents the payment terms for an order or draft order."""
type PaymentTerms implements Node {
  """The draft order associated with the payment terms."""
  draftOrder: DraftOrder

  """
  Duration of payment terms in days based on the payment terms template used to create the payment terms.
  """
  dueInDays: Int

  """A globally-unique ID."""
  id: ID!

  """The order associated with the payment terms."""
  order: Order

  """Whether the payment terms have overdue payment schedules."""
  overdue: Boolean!

  """List of schedules for the payment terms."""
  paymentSchedules(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PaymentScheduleConnection!

  """
  The name of the payment terms template used to create the payment terms.
  """
  paymentTermsName: String!

  """The payment terms template type used to create the payment terms."""
  paymentTermsType: PaymentTermsType!

  """
  The payment terms name, translated into the shop admin's preferred language.
  """
  translatedName: String!
}

"""The input fields used to create a payment terms."""
input PaymentTermsCreateInput {
  """
  Specifies the payment terms template ID used to generate payment terms.
  """
  paymentTermsTemplateId: ID!

  """Specifies the payment schedules for the payment terms."""
  paymentSchedules: [PaymentScheduleInput!]
}

"""Return type for `paymentTermsCreate` mutation."""
type PaymentTermsCreatePayload {
  """The created payment terms."""
  paymentTerms: PaymentTerms

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PaymentTermsCreateUserError!]!
}

"""An error that occurs during the execution of `PaymentTermsCreate`."""
type PaymentTermsCreateUserError implements DisplayableError {
  """The error code."""
  code: PaymentTermsCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PaymentTermsCreateUserError`.
"""
enum PaymentTermsCreateUserErrorCode {
  """An error occurred while creating payment terms."""
  PAYMENT_TERMS_CREATION_UNSUCCESSFUL
}

"""The input fields used to delete the payment terms."""
input PaymentTermsDeleteInput {
  """The ID of the payment terms being deleted."""
  paymentTermsId: ID!
}

"""Return type for `paymentTermsDelete` mutation."""
type PaymentTermsDeletePayload {
  """The deleted payment terms ID."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PaymentTermsDeleteUserError!]!
}

"""An error that occurs during the execution of `PaymentTermsDelete`."""
type PaymentTermsDeleteUserError implements DisplayableError {
  """The error code."""
  code: PaymentTermsDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PaymentTermsDeleteUserError`.
"""
enum PaymentTermsDeleteUserErrorCode {
  """An error occurred while deleting payment terms."""
  PAYMENT_TERMS_DELETE_UNSUCCESSFUL
}

"""The input fields used to create a payment terms."""
input PaymentTermsInput {
  """
  Specifies the payment terms template ID used to generate payment terms.
  """
  paymentTermsTemplateId: ID

  """Specifies the payment schedules for the payment terms."""
  paymentSchedules: [PaymentScheduleInput!]
}

"""Represents the payment terms template object."""
type PaymentTermsTemplate implements Node {
  """The description of the payment terms template."""
  description: String!

  """
  The number of days between the issued date and due date if this is the net type of payment terms.
  """
  dueInDays: Int

  """A globally-unique ID."""
  id: ID!

  """The name of the payment terms template."""
  name: String!

  """The type of the payment terms template."""
  paymentTermsType: PaymentTermsType!

  """The translated payment terms template name."""
  translatedName: String!
}

"""The type of a payment terms or a payment terms template."""
enum PaymentTermsType {
  """The payment terms or payment terms template is due on receipt."""
  RECEIPT

  """
  The payment terms or payment terms template is a net type. It's due a number of days after issue.
  """
  NET

  """
  The payment terms or payment terms template is a fixed type. It's due on a specified date.
  """
  FIXED

  """The payment terms or payment terms template is due on fulfillment."""
  FULFILLMENT

  """The type of the payment terms or payment terms template is unknown."""
  UNKNOWN
}

"""The input fields used to update the payment terms."""
input PaymentTermsUpdateInput {
  """The ID of the payment terms being updated."""
  paymentTermsId: ID!

  """The attributes used to update the payment terms."""
  paymentTermsAttributes: PaymentTermsInput!
}

"""Return type for `paymentTermsUpdate` mutation."""
type PaymentTermsUpdatePayload {
  """The updated payment terms."""
  paymentTerms: PaymentTerms

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PaymentTermsUpdateUserError!]!
}

"""An error that occurs during the execution of `PaymentTermsUpdate`."""
type PaymentTermsUpdateUserError implements DisplayableError {
  """The error code."""
  code: PaymentTermsUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PaymentTermsUpdateUserError`.
"""
enum PaymentTermsUpdateUserErrorCode {
  """An error occurred while updating payment terms."""
  PAYMENT_TERMS_UPDATE_UNSUCCESSFUL
}

"""Represents a valid PayPal Express subscriptions gateway status."""
enum PaypalExpressSubscriptionsGatewayStatus {
  """The status is enabled."""
  ENABLED

  """The status is disabled."""
  DISABLED

  """The status is pending."""
  PENDING
}

"""A PolarisViz data point structure for ShopifyQL query."""
type PolarisVizDataPoint {
  """
  The data key. Typically a category, dimension, or other qualitative data.
  """
  key: String!

  """The data value is numeric and quantitative."""
  value: String
}

"""The data series used for PolarisViz visualization."""
type PolarisVizDataSeries {
  """An array of data points."""
  data: [PolarisVizDataPoint!]!

  """Whether the series represents comparison data."""
  isComparison: Boolean!

  """The name of the series."""
  name: String!
}

"""A PolarisViz response to a ShopifyQL query."""
type PolarisVizResponse implements ShopifyqlResponse {
  """The PolarisViz visualization of data."""
  data: [PolarisVizDataSeries!]!

  """A list of parse errors, if parsing fails."""
  parseErrors: [ParseError!]

  """
  The result in a tabular format with schema and row data.
                  It's always present even if query has a `VISUALIZE` keyword.
  """
  tableData: TableData

  """The type of visualization. For example, a line chart."""
  vizType: VisualizationType!
}

"""
The input fields used to include the line items of a specified fulfillment order
that should be marked as prepared for pickup by a customer.
"""
input PreparedFulfillmentOrderLineItemsInput {
  """The ID of the fulfillment order."""
  fulfillmentOrderId: ID!
}

"""
Represents a price list, including information about related prices and eligibility rules.
You can use price lists to specify either fixed prices or adjusted relative prices that
override initial product variant prices. Price lists are applied to customers
using context rules, which determine price list eligibility.

  For more information on price lists, refer to
  [Support different pricing models](https://shopify.dev/apps/internationalization/product-price-lists).
"""
type PriceList implements Node {
  """
  A set of facts about the customer, used to determine price list eligibility.
  """
  contextRule: PriceListContextRule

  """The currency for fixed prices associated with this price list."""
  currency: CurrencyCode!

  """A globally-unique ID."""
  id: ID!

  """
  The unique name of the price list, used as a human-readable identifier.
  """
  name: String!

  """Relative adjustments to other prices."""
  parent: PriceListParent

  """A list of prices associated with the price list."""
  prices(
    """
    The origin of this price, either fixed (defined on the price list)
                   or relative (calculated using an adjustment via a price list parent configuration).
    """
    originType: PriceListPriceOriginType

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PriceListPriceConnection!
}

"""
The type and value of a price list adjustment.

For more information on price lists, refer to
[Support different pricing models](https://shopify.dev/apps/internationalization/product-price-lists).
"""
type PriceListAdjustment {
  """The type of price adjustment, such as percentage increase or decrease."""
  type: PriceListAdjustmentType!

  """
  The value of price adjustment, where positive numbers reduce the prices and negative numbers
  increase them.
  """
  value: Float!
}

"""The input fields to set a price list adjustment."""
input PriceListAdjustmentInput {
  """The value of the price adjustment as specified by the `type`."""
  value: Float!

  """The type of price adjustment, such as percentage increase or decrease."""
  type: PriceListAdjustmentType!
}

"""Represents a percentage price adjustment type."""
enum PriceListAdjustmentType {
  """Percentage decrease type. Prices will have a lower value."""
  PERCENTAGE_DECREASE

  """Percentage increase type. Prices will have a higher value."""
  PERCENTAGE_INCREASE
}

"""An auto-generated type for paginating through multiple PriceLists."""
type PriceListConnection {
  """A list of edges."""
  edges: [PriceListEdge!]!

  """A list of the nodes contained in PriceListEdge."""
  nodes: [PriceList!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The input field used to filter price lists based on context.
For example, you can specify the country code so that the filtered price lists
only apply to customers visiting from a specific country.
"""
input PriceListContext {
  """The code of the country that the price list applies to."""
  country: CountryCode
}

"""
Facts about the customer that was used to determine the price list eligibility.
For example, if the `PriceListContextRule` is for a US market, then the price
list will be eligible to all customers in the US.
For more information on price lists, refer to
[Support different pricing models](https://shopify.dev/apps/internationalization/product-price-lists).
"""
type PriceListContextRule {
  """
  A list of two letter country codes that determines price list eligibility.
  """
  countries: [CountryCode!]!

  """The associated market."""
  market: Market
}

"""
The input fields to set the context that a price list applies to.
For example, the price list might apply to a specific market.
"""
input PriceListContextRuleInput {
  """The market that this price list applies to."""
  marketId: ID
}

"""The input fields to create a price list."""
input PriceListCreateInput {
  """
  The unique name of the price list, used as a human-readable identifier.
  """
  name: String!

  """
  Three letter currency code for fixed prices associated with this price list.
  """
  currency: CurrencyCode!

  """Relative adjustments to other prices."""
  parent: PriceListParentCreateInput!

  """
  A set of facts about the customer used to determine price list eligibility.
  """
  contextRule: PriceListContextRuleInput
}

"""Return type for `priceListCreate` mutation."""
type PriceListCreatePayload {
  """The newly created price list."""
  priceList: PriceList

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PriceListUserError!]!
}

"""Return type for `priceListDelete` mutation."""
type PriceListDeletePayload {
  """The ID of the deleted price list."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PriceListUserError!]!
}

"""
An auto-generated type which holds one PriceList and a cursor during pagination.
"""
type PriceListEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PriceListEdge."""
  node: PriceList!
}

"""Return type for `priceListFixedPricesAdd` mutation."""
type PriceListFixedPricesAddPayload {
  """
  The list of fixed prices that were added to or updated in the price list.
  """
  prices: [PriceListPrice!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PriceListPriceUserError!]!
}

"""Return type for `priceListFixedPricesDelete` mutation."""
type PriceListFixedPricesDeletePayload {
  """
  A list of product variant IDs whose fixed prices were removed from the price list.
  """
  deletedFixedPriceVariantIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PriceListPriceUserError!]!
}

"""
Represents relative adjustments from one price list to other prices.
  You can use a `PriceListParent` to specify an adjusted relative price using a percentage-based
  adjustment. Adjusted prices work in conjunction with exchange rules and rounding.

  [Adjustment types](https://shopify.dev/api/admin-graphql/latest/enums/pricelistadjustmenttype)
  support both percentage increases and decreases.
"""
type PriceListParent {
  """A price list adjustment."""
  adjustment: PriceListAdjustment!
}

"""The input fields to create a price list adjustment."""
input PriceListParentCreateInput {
  """The relative adjustments to other prices."""
  adjustment: PriceListAdjustmentInput!
}

"""The input fields used to update a price list's adjustment."""
input PriceListParentUpdateInput {
  """The relative adjustments to other prices.."""
  adjustment: PriceListAdjustmentInput!
}

"""
Represents information about pricing for a product variant
        as defined on a price list, such as the price, compare at price, and
origin type. You can use a PriceListPrice to specify a fixed price for a
specific product variant.
"""
type PriceListPrice {
  """The compare-at price of the product variant on this price list."""
  compareAtPrice: MoneyV2

  """
  The origin of a price, either fixed (defined on the price list) or relative
  (calculated using a price list adjustment configuration).
  """
  originType: PriceListPriceOriginType!

  """The price of the product variant on this price list."""
  price: MoneyV2!

  """The product variant associated with this price."""
  variant: ProductVariant!
}

"""
An auto-generated type for paginating through multiple PriceListPrices.
"""
type PriceListPriceConnection {
  """A list of edges."""
  edges: [PriceListPriceEdge!]!

  """A list of the nodes contained in PriceListPriceEdge."""
  nodes: [PriceListPrice!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one PriceListPrice and a cursor during pagination.
"""
type PriceListPriceEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PriceListPriceEdge."""
  node: PriceListPrice!
}

"""
The input fields for providing the fields and values to use when creating or updating a fixed price list price.
"""
input PriceListPriceInput {
  """The product variant ID associated with the price list price."""
  variantId: ID!

  """The price of the product variant on this price list."""
  price: MoneyInput!

  """The compare-at price of the product variant on this price list."""
  compareAtPrice: MoneyInput
}

"""
Represents the origin of a price, either fixed (defined on the price list) or
relative (calculated using a price list adjustment configuration).
"""
enum PriceListPriceOriginType {
  """The price is defined on the price list."""
  FIXED

  """The price is relative to the adjustment type and value."""
  RELATIVE
}

"""An error for a failed price list price operation."""
type PriceListPriceUserError implements DisplayableError {
  """The error code."""
  code: PriceListPriceUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PriceListPriceUserError`.
"""
enum PriceListPriceUserErrorCode {
  """The input value is blank."""
  BLANK

  """The price list doesn't exist."""
  PRICE_LIST_NOT_FOUND

  """The specified currency doesn't match the price list's currency."""
  PRICE_LIST_CURRENCY_MISMATCH

  """A fixed price for the specified product variant doesn't exist."""
  VARIANT_NOT_FOUND

  """Only fixed prices can be deleted."""
  PRICE_NOT_FIXED
}

"""The set of valid sort keys for the PriceList query."""
enum PriceListSortKeys {
  """Sort by the `name` value."""
  NAME

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The input fields used to update a price list."""
input PriceListUpdateInput {
  """
  The unique name of the price list, used as a human-readable identifier.
  """
  name: String

  """
  The three-letter currency code for fixed prices associated with this price list.
  """
  currency: CurrencyCode

  """
  A set of facts about the customer used to determine price list eligibility.
  """
  contextRule: PriceListContextRuleInput

  """Relative adjustments to other prices."""
  parent: PriceListParentUpdateInput
}

"""Return type for `priceListUpdate` mutation."""
type PriceListUpdatePayload {
  """The updated price list."""
  priceList: PriceList

  """The list of errors that occurred from executing the mutation."""
  userErrors: [PriceListUserError!]!
}

"""Error codes for failed contextual pricing operations."""
type PriceListUserError implements DisplayableError {
  """The error code."""
  code: PriceListUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `PriceListUserError`."""
enum PriceListUserErrorCode {
  """The input value is already taken."""
  TAKEN

  """The specified price list doesn't exist."""
  PRICE_LIST_NOT_FOUND

  """
  Cannot save the price list with context rule because the limit of context rules per shop was reached.
  """
  CONTEXT_RULE_LIMIT_REACHED @deprecated(reason: "The limit is removed.")

  """A price list context rule cannot have more than one country."""
  CONTEXT_RULE_COUNTRIES_LIMIT

  """A price list’s currency must be of the pricing rule’s country."""
  CURRENCY_COUNTRY_MISMATCH

  """A country in a context rule must use a valid currency."""
  COUNTRY_CURRENCY_MISMATCH

  """A price list’s currency must be the market currency."""
  CURRENCY_MARKET_MISMATCH

  """The context rule's market does not use the price list currency."""
  MARKET_CURRENCY_MISMATCH

  """
  The adjustment value must be a positive value and not be greater than 100% for
  `type` `PERCENTAGE_DECREASE` and not be greater than 1000% for `type`
  `PERCENTAGE_INCREASE`.
  """
  INVALID_ADJUSTMENT_VALUE

  """A price list for this country is already taken."""
  CONTEXT_RULE_COUNTRY_TAKEN

  """Only one context rule option may be specified."""
  CONTEXT_RULE_LIMIT_ONE_OPTION

  """The specified market wasn't found."""
  CONTEXT_RULE_MARKET_NOT_FOUND

  """A price list for this market is already taken."""
  CONTEXT_RULE_MARKET_TAKEN

  """
  The price list currency is not supported by the shop's payment gateway.
  """
  CURRENCY_NOT_SUPPORTED

  """Cannot create price list for a primary market."""
  PRICE_LIST_NOT_ALLOWED_FOR_PRIMARY_MARKET
}

"""
Price rules are a set of conditions, including entitlements and prerequisites,
that must be met in order for a discount code to apply.

We recommend using the types and queries detailed at [Getting started with discounts](https://shopify.dev/docs/apps/selling-strategies/discounts/getting-started)
instead. These will replace the GraphQL `PriceRule` object and REST Admin
`PriceRule` and `DiscountCode` resources.
"""
type PriceRule implements CommentEventSubject & HasEvents & LegacyInteroperability & Node {
  """
  The maximum number of times that the price rule can be allocated onto an order.
  """
  allocationLimit: Int

  """
  The method by which the price rule's value is allocated to its entitled items.
  """
  allocationMethod: PriceRuleAllocationMethod!

  """The application that created the price rule."""
  app: App

  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWith!

  """The date and time when the price rule was created."""
  createdAt: DateTime!

  """The customers that can use this price rule."""
  customerSelection: PriceRuleCustomerSelection!

  """The class of the discount for combining purposes."""
  discountClass: DiscountClass!

  """List of the price rule's discount codes."""
  discountCodes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): PriceRuleDiscountCodeConnection!

  """How many discount codes associated with the price rule."""
  discountCodesCount: Int!

  """
  The date and time when the price rule ends. For open-ended price rules, use `null`.
  """
  endsAt: DateTime

  """
  Quantity of prerequisite items required for the price rule to be applicable,  compared to quantity of entitled items.
  """
  entitlementToPrerequisiteQuantityRatio: PriceRuleEntitlementToPrerequisiteQuantityRatio @deprecated(reason: "Use `prerequisiteToEntitlementQuantityRatio` instead.")

  """The paginated list of events associated with the price rule."""
  events(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: EventSortKeys = ID

    """
    Supported filter parameters:
     - `comments`
     - `created_at`
     - `subject_type`
     - `verb`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): EventConnection!

  """A list of the price rule's features."""
  features: [PriceRuleFeature!]!

  """Indicates whether there are any timeline comments on the price rule."""
  hasTimelineComment: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The items to which the price rule applies."""
  itemEntitlements: PriceRuleItemEntitlements!

  """The items required for the price rule to be applicable."""
  itemPrerequisites: PriceRuleLineItemPrerequisites!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """Whether the price rule can be applied only once per customer."""
  oncePerCustomer: Boolean!

  """
  The number of the entitled items must fall within this range for the price rule to be applicable.
  """
  prerequisiteQuantityRange: PriceRuleQuantityRange

  """
  The shipping cost must fall within this range for the price rule to be applicable.
  """
  prerequisiteShippingPriceRange: PriceRuleMoneyRange

  """
  The sum of the entitled items subtotal prices must fall within this range for the price rule to be applicable.
  """
  prerequisiteSubtotalRange: PriceRuleMoneyRange

  """
  Quantity of prerequisite items required for the price rule to be applicable,  compared to quantity of entitled items.
  """
  prerequisiteToEntitlementQuantityRatio: PriceRulePrerequisiteToEntitlementQuantityRatio

  """URLs that can be used to share the discount."""
  shareableUrls: [PriceRuleShareableUrl!]!

  """The shipping lines to which the price rule applies."""
  shippingEntitlements: PriceRuleShippingLineEntitlements!

  """The date and time when the price rule starts."""
  startsAt: DateTime!

  """The status of the price rule."""
  status: PriceRuleStatus!

  """A detailed summary of the price rule."""
  summary: String

  """
  The type of lines (line_item or shipping_line) to which the price rule applies.
  """
  target: PriceRuleTarget!

  """The title of the price rule."""
  title: String!

  """The total sales from orders where the price rule was used."""
  totalSales: MoneyV2

  """A list of the price rule's features."""
  traits: [PriceRuleTrait!]! @deprecated(reason: "Use `features` instead.")

  """
  The number of times that the price rule has been used. This value is updated
  asynchronously and can be different than the actual usage count.
  """
  usageCount: Int!

  """The maximum number of times that the price rule can be used in total."""
  usageLimit: Int

  """A time period during which a price rule is applicable."""
  validityPeriod: PriceRuleValidityPeriod!

  """The value of the price rule."""
  value: PriceRuleValue! @deprecated(reason: "Use `valueV2` instead.")

  """The value of the price rule."""
  valueV2: PricingValue!
}

"""Return type for `priceRuleActivate` mutation."""
type PriceRuleActivatePayload {
  """The activated price rule."""
  priceRule: PriceRule

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""
The method by which the price rule's value is allocated to its entitled items.
"""
enum PriceRuleAllocationMethod {
  """The value will be applied to each of the entitled items."""
  EACH

  """The value will be applied once across the entitled items."""
  ACROSS
}

"""An auto-generated type for paginating through multiple PriceRules."""
type PriceRuleConnection {
  """A list of edges."""
  edges: [PriceRuleEdge!]!

  """A list of the nodes contained in PriceRuleEdge."""
  nodes: [PriceRule!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `priceRuleCreate` mutation."""
type PriceRuleCreatePayload {
  """The newly created price rule."""
  priceRule: PriceRule

  """The newly created discount code."""
  priceRuleDiscountCode: PriceRuleDiscountCode

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""A selection of customers for whom the price rule applies."""
type PriceRuleCustomerSelection {
  """List of customers to whom the price rule applies."""
  customers(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CustomerSortKeys = ID

    """
    Supported filter parameters:
     - `accepts_marketing`
     - `country`
     - `customer_date`
     - `email`
     - `last_abandoned_order_date`
     - `order_date`
     - `orders_count`
     - `phone`
     - `state`
     - `tag`
     - `tag_not`
     - `total_spent`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): CustomerConnection!

  """Whether the price rule applies to all customers."""
  forAllCustomers: Boolean!

  """
  A list of customer segments that contain the customers who can use the price rule.
  """
  segments: [Segment!]!
}

"""The input fields to update a price rule customer selection."""
input PriceRuleCustomerSelectionInput {
  """Whether the price rule applies to all customers."""
  forAllCustomers: Boolean = false

  """
  List of customer segments that contain the customers to whom the price rule
  applies. No single customer IDs may be present.
  """
  segmentIds: [ID!]

  """
  List of customers to add to the current list of customers to whom the price rule applies. `savedSearchIds` must be empty.
  """
  customerIdsToAdd: [ID!]

  """
  A list of customers to remove from the current list of customers to whom the price rule applies.
  """
  customerIdsToRemove: [ID!]
}

"""Return type for `priceRuleDeactivate` mutation."""
type PriceRuleDeactivatePayload {
  """The deactivated price rule."""
  priceRule: PriceRule

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""Return type for `priceRuleDelete` mutation."""
type PriceRuleDeletePayload {
  """The ID price of the deleted price rule."""
  deletedPriceRuleId: ID

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The shop of the deleted price rule."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""A discount code of a price rule."""
type PriceRuleDiscountCode implements Node {
  """The application that created the discount code."""
  app: App

  """The code to apply the discount."""
  code: String!

  """A globally-unique ID."""
  id: ID!

  """
  The number of times that the price rule has been used. This value is updated
  asynchronously and can be different than the actual usage count.
  """
  usageCount: Int!
}

"""
An auto-generated type for paginating through multiple PriceRuleDiscountCodes.
"""
type PriceRuleDiscountCodeConnection {
  """A list of edges."""
  edges: [PriceRuleDiscountCodeEdge!]!

  """A list of the nodes contained in PriceRuleDiscountCodeEdge."""
  nodes: [PriceRuleDiscountCode!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `priceRuleDiscountCodeCreate` mutation."""
type PriceRuleDiscountCodeCreatePayload {
  """The updated price rule."""
  priceRule: PriceRule

  """The newly created discount code."""
  priceRuleDiscountCode: PriceRuleDiscountCode

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""
An auto-generated type which holds one PriceRuleDiscountCode and a cursor during pagination.
"""
type PriceRuleDiscountCodeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PriceRuleDiscountCodeEdge."""
  node: PriceRuleDiscountCode!
}

"""The input fields to manipulate a discount code."""
input PriceRuleDiscountCodeInput {
  """The code to use the discount."""
  code: String
}

"""Return type for `priceRuleDiscountCodeUpdate` mutation."""
type PriceRuleDiscountCodeUpdatePayload {
  """The updated price rule."""
  priceRule: PriceRule

  """The updated discount code."""
  priceRuleDiscountCode: PriceRuleDiscountCode

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""
An auto-generated type which holds one PriceRule and a cursor during pagination.
"""
type PriceRuleEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PriceRuleEdge."""
  node: PriceRule!
}

"""
Quantity of prerequisite items required for the price rule to be applicable, compared to quantity of entitled items.
"""
type PriceRuleEntitlementToPrerequisiteQuantityRatio {
  """The quantity of entitled items in the ratio."""
  entitlementQuantity: Int!

  """The quantity of prerequisite items in the ratio."""
  prerequisiteQuantity: Int!
}

"""
Specifies the quantity of prerequisite items required for the price rule to be
applicable, compared to quantity of entitled items.
"""
input PriceRuleEntitlementToPrerequisiteQuantityRatioInput {
  """The quantity of entitled items in the ratio."""
  entitlementQuantity: Int

  """The quantity of prerequisite items in the ratio."""
  prerequisiteQuantity: Int
}

"""Possible error codes that could be returned by a price rule mutation."""
enum PriceRuleErrorCode {
  """The input value is blank."""
  BLANK

  """The input value should be equal to the value allowed."""
  EQUAL_TO

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN

  """
  The input value should be greater than or equal to the minimum value allowed.
  """
  GREATER_THAN_OR_EQUAL_TO

  """The input value is invalid."""
  INVALID

  """The input value should be less than the maximum value allowed."""
  LESS_THAN

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value is already taken."""
  TAKEN

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Too many arguments provided."""
  TOO_MANY_ARGUMENTS

  """Missing a required argument."""
  MISSING_ARGUMENT

  """Can't exceed the maximum number."""
  EXCEEDED_MAX

  """The allocation limit can only be set on Buy x, get y (BXGY) discounts."""
  PRICE_RULE_ALLOCATION_LIMIT_ON_NON_BOGO

  """The allocation limit must be a non-zero positive number."""
  PRICE_RULE_ALLOCATION_LIMIT_IS_ZERO

  """The number of discount codes in the shop has reached its limit."""
  PRICE_RULE_EXCEEDED_MAX_DISCOUNT_CODE

  """The number of discounts in the shop has reached its limit."""
  SHOP_EXCEEDED_MAX_PRICE_RULES

  """The discount end date must be after the start date."""
  END_DATE_BEFORE_START_DATE

  """The percentage value must be between 0 and -100."""
  PRICE_RULE_PERCENTAGE_VALUE_OUTSIDE_RANGE

  """
  Only one of the minimum subtotal or minimum quantity condition can be defined.
  """
  PREREQUISITE_SUBTOTAL_AND_QUANTITY_RANGE_BOTH_PRESENT

  """
  The allocation method must be `ACROSS` for the provided target selection.
  """
  ALLOCATION_METHOD_MUST_BE_ACROSS_FOR_GIVEN_TARGET_SELECTION

  """
  The discount must apply on either one-time purchase or subscription items, or both.
  """
  APPLIES_ON_NOTHING

  """
  The recurring cycle limit must be 1 when a discount doesn't apply on subscription items.
  """
  MULTIPLE_RECURRING_CYCLE_LIMIT_FOR_NON_SUBSCRIPTION_ITEMS

  """Invalid BOGO target selection."""
  BOGO_INVALID_TARGET_SELECTION

  """Invalid BOGO target type."""
  BOGO_INVALID_TARGET_TYPE

  """Invalid BOGO value type."""
  BOGO_INVALID_VALUE_TYPE

  """A duplicate discount code exists."""
  DISCOUNT_CODE_DUPLICATE

  """Can't use both prerequisite customers and saved search."""
  BOTH_CUSTOMER_AND_SAVED_SEARCH_PREREQUISITES_SELECTED

  """A duplicate customer saved search exists."""
  CUSTOMER_SAVED_SEARCH_DUPLICATE

  """The customer saved search exceeded the maximum number."""
  CUSTOMER_SAVED_SEARCH_EXCEEDED_MAX

  """Invalid customer saved search."""
  CUSTOMER_SAVED_SEARCH_INVALID

  """The customer prerequisites exceeded the maximum number."""
  CUSTOMER_PREREQUISITES_EXCEEDED_MAX

  """Invalid customer prerequisites selection."""
  CUSTOMER_PREREQUISITES_INVALID_SELECTION

  """A duplicate customer prerequisite ID exists."""
  CUSTOMER_PREREQUISITE_DUPLICATE

  """Customer prerequisites are missing."""
  CUSTOMER_PREREQUISITES_MISSING

  """Can't have both prerequisite customers and prerequisite segments."""
  BOTH_CUSTOMER_AND_SEGMENT_PREREQUISITES_SELECTED

  """Can't have both saved searches and segments prerequisites."""
  BOTH_SAVED_SEARCH_AND_SEGMENT_PREREQUISITES_SELECTED

  """The customer segment prerequisites exceeded the maximum number."""
  CUSTOMER_SEGMENT_EXCEEDED_MAX

  """The customer segment prerequisite ID is invalid."""
  CUSTOMER_SEGMENT_INVALID

  """A duplicate customer segment prerequisite ID exists."""
  CUSTOMER_SEGMENT_PREREQUISITE_DUPLICATE

  """
  Can't use collections as a prequisite in combination with product variants or products.
  """
  CANNOT_PREREQUISITE_COLLECTION_WITH_PRODUCT_OR_VARIANTS

  """Can't add the same collection twice."""
  ITEM_PREREQUISITES_DUPLICATE_COLLECTION

  """Can't add the same product twice."""
  ITEM_PREREQUISITES_DUPLICATE_PRODUCT

  """Can't add the same variant twice."""
  ITEM_PREREQUISITES_DUPLICATE_VARIANT

  """Can't exceed the maximum number of item prerequisites."""
  ITEM_PREREQUISITES_EXCEEDED_MAX

  """Invalid collection."""
  ITEM_PREREQUISITES_INVALID_COLLECTION

  """Invalid type."""
  ITEM_PREREQUISITES_INVALID_TYPE

  """Invalid product."""
  ITEM_PREREQUISITES_INVALID_PRODUCT

  """Invalid variant."""
  ITEM_PREREQUISITES_INVALID_VARIANT

  """
  Item prerequisites must be empty if the prerequisite quantity ratio isn't defined.
  """
  ITEM_PREREQUISITES_MUST_BE_EMPTY

  """
  Item prerequisites must have at least one item prerequisite if the prerequisite quantity ratio is defined.
  """
  ITEM_PREREQUISITES_MISSING

  """
  Can't entitle collections in combination with product variants or products.
  """
  CANNOT_ENTITLE_COLLECTIONS_WITH_PRODUCTS_OR_VARIANTS

  """Can't add the same collection twice."""
  ITEM_ENTITLEMENTS_DUPLICATE_COLLECTION

  """Can't add the same product twice."""
  ITEM_ENTITLEMENTS_DUPLICATE_PRODUCT

  """Can't add the same collection twice."""
  ITEM_ENTITLEMENTS_DUPLICATE_VARIANT

  """Can't exceed the maximum number of collection entitlements."""
  ITEM_ENTITLEMENTS_EXCEEDED_MAX_COLLECTION

  """Can't exceed the maximum number of product entitlements."""
  ITEM_ENTITLEMENTS_EXCEEDED_MAX_PRODUCT

  """Can't exceed the maximum number of variant entitlements."""
  ITEM_ENTITLEMENTS_EXCEEDED_MAX_VARIANT

  """Invalid entitlement type."""
  ITEM_ENTITLEMENT_INVALID_TYPE

  """Invalid collection."""
  ITEM_ENTITLEMENTS_INVALID_COLLECTION

  """Invalid product."""
  ITEM_ENTITLEMENTS_INVALID_PRODUCT

  """Invalid variant."""
  ITEM_ENTITLEMENTS_INVALID_VARIANT

  """Invalid combination of target type and selection."""
  ITEM_ENTITLEMENTS_INVALID_TARGET_TYPE_OR_SELECTION

  """Entitlements are missing."""
  ITEM_ENTITLEMENTS_MISSING

  """The variant is already entitled through a product."""
  VARIANT_ALREADY_ENTITLED_THROUGH_PRODUCT

  """A duplicate country code exists."""
  SHIPPING_ENTITLEMENTS_DUPLICATE_COUNTRY

  """Can't exceed the maximum number of entitlements."""
  SHIPPING_ENTITLEMENTS_EXCEEDED_MAX

  """The country is unknown."""
  SHIPPING_ENTITLEMENTS_INVALID_COUNTRY

  """Invalid target type or selection."""
  SHIPPING_ENTITLEMENTS_INVALID_TARGET_TYPE_OR_SELECTION

  """Missing entitlements."""
  SHIPPING_ENTITLEMENTS_MISSING

  """Unsupported destination type."""
  SHIPPING_ENTITLEMENTS_UNSUPPORTED_DESTINATION_TYPE

  """
  The target type is invalid when defining a prerequisite shipping price range.
  """
  INVALID_TARGET_TYPE_PREREQUISITE_SHIPPING_PRICE_RANGE

  """The `combinesWith` settings are invalid for the discount class."""
  INVALID_COMBINES_WITH_FOR_DISCOUNT_CLASS

  """The discountClass is invalid for the price rule."""
  INVALID_DISCOUNT_CLASS_FOR_PRICE_RULE
}

"""The list of features that can be supported by a price rule."""
enum PriceRuleFeature {
  """The price rule supports Buy X, Get Y (BXGY) discounts."""
  BUY_ONE_GET_ONE

  """
  The price rule supports Buy X, Get Y (BXGY) discounts that specify a custom allocation limit.
  """
  BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT

  """The price rule supports bulk discounts."""
  BULK

  """The price rule targets specific customers."""
  SPECIFIC_CUSTOMERS

  """The price rule supports discounts that require a quantity."""
  QUANTITY_DISCOUNTS
}

"""The value of a fixed amount price rule."""
type PriceRuleFixedAmountValue {
  """The monetary value of the price rule."""
  amount: Money!
}

"""The input fields to manipulate a price rule."""
input PriceRuleInput {
  """Determines which discount classes the discount can combine with."""
  combinesWith: DiscountCombinesWithInput

  """PriceRuleValidityPeriod for the price rule."""
  validityPeriod: PriceRuleValidityPeriodInput

  """Whether the price rule can be applied only once per customer."""
  oncePerCustomer: Boolean = false

  """The customers that can use this price rule."""
  customerSelection: PriceRuleCustomerSelectionInput

  """The maximum number of times that the price rule can be used in total."""
  usageLimit: Int

  """Title of the price rule."""
  title: String

  """
  The maximum number of times that the price rule can be allocated onto an order.
  """
  allocationLimit: Int

  """
  The method by which the price rule's value is allocated to its entitled items.
  """
  allocationMethod: PriceRuleAllocationMethod

  """The value of the price rule."""
  value: PriceRuleValueInput

  """
  The type of lines (line_item or shipping_line) to which the price rule applies.
  """
  target: PriceRuleTarget

  """
  The sum of the entitled items subtotal prices must fall within this range for the price rule to be applicable.
  """
  prerequisiteSubtotalRange: PriceRuleMoneyRangeInput

  """
  The number of the entitled items must fall within this range for the price rule to be applicable.
  """
  prerequisiteQuantityRange: PriceRuleQuantityRangeInput

  """
  The shipping cost must fall within this range for the price rule to be applicable.
  """
  prerequisiteShippingPriceRange: PriceRuleMoneyRangeInput

  """The items to which the price rule applies."""
  itemEntitlements: PriceRuleItemEntitlementsInput

  """The items required for the price rule to be applicable."""
  itemPrerequisites: PriceRuleItemPrerequisitesInput

  """The shipping lines to which the price rule applies."""
  shippingEntitlements: PriceRuleShippingEntitlementsInput

  """
  Quantity of prerequisite items required for the price rule to be applicable, compared to quantity of entitled items.
  """
  prerequisiteToEntitlementQuantityRatio: PriceRulePrerequisiteToEntitlementQuantityRatioInput
}

"""
The items to which this price rule applies. This may be multiple products,
product variants, collections or combinations of the aforementioned.
"""
type PriceRuleItemEntitlements {
  """The collections to which the price rule applies."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionConnection!

  """The product variants to which the price rule applies."""
  productVariants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantConnection!

  """The products to which the price rule applies."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!

  """Whether the price rule applies to all line items."""
  targetAllLineItems: Boolean!
}

"""The input fields to update a price rule line item entitlement."""
input PriceRuleItemEntitlementsInput {
  """Whether the price rule applies to all items."""
  targetAllLineItems: Boolean = false

  """The products to which the price rule applies."""
  productIds: [ID!]

  """The product variants to which the price rule applies."""
  productVariantIds: [ID!]

  """The collections to which the price rule applies."""
  collectionIds: [ID!]
}

"""The input fields to update a price rule's item prerequisites."""
input PriceRuleItemPrerequisitesInput {
  """The products needed for the price rule to be applied."""
  productIds: [ID!]

  """The product variants needed for the price rule to be applied."""
  productVariantIds: [ID!]

  """The collections needed for the price rule to be applied."""
  collectionIds: [ID!]
}

"""
Single or multiple line item products, product variants or collections required
for the price rule to be applicable, can also be provided in combination.
"""
type PriceRuleLineItemPrerequisites {
  """The collections required for the price rule to be applicable."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionConnection!

  """The product variants required for the price rule to be applicable."""
  productVariants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantConnection!

  """The products required for the price rule to be applicable."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!
}

"""A money range within which the price rule is applicable."""
type PriceRuleMoneyRange {
  """The lower bound of the money range."""
  greaterThan: Money

  """The lower bound or equal of the money range."""
  greaterThanOrEqualTo: Money

  """The upper bound of the money range."""
  lessThan: Money

  """The upper bound or equal of the money range."""
  lessThanOrEqualTo: Money
}

"""
The input fields to update the money range within which the price rule is applicable.
"""
input PriceRuleMoneyRangeInput {
  """The upper bound of the money range."""
  lessThan: Money

  """The upper or equal bound of the money range."""
  lessThanOrEqualTo: Money

  """The lower bound of the money range."""
  greaterThan: Money

  """The lower or equal bound of the money range."""
  greaterThanOrEqualTo: Money
}

"""The value of a percent price rule."""
type PriceRulePercentValue {
  """The percent value of the price rule."""
  percentage: Float!
}

"""
Quantity of prerequisite items required for the price rule to be applicable, compared to quantity of entitled items.
"""
type PriceRulePrerequisiteToEntitlementQuantityRatio {
  """The quantity of entitled items in the ratio."""
  entitlementQuantity: Int!

  """The quantity of prerequisite items in the ratio."""
  prerequisiteQuantity: Int!
}

"""
Specifies the quantity of prerequisite items required for the price rule to be
applicable, compared to quantity of entitled items.
"""
input PriceRulePrerequisiteToEntitlementQuantityRatioInput {
  """The quantity of entitled items in the ratio."""
  entitlementQuantity: Int

  """The quantity of prerequisite items in the ratio."""
  prerequisiteQuantity: Int
}

"""A quantity range within which the price rule is applicable."""
type PriceRuleQuantityRange {
  """The lower bound of the quantity range."""
  greaterThan: Int

  """The lower bound or equal of the quantity range."""
  greaterThanOrEqualTo: Int

  """The upper bound of the quantity range."""
  lessThan: Int

  """The upper bound or equal of the quantity range."""
  lessThanOrEqualTo: Int
}

"""
The input fields to update the quantity range within which the price rule is applicable.
"""
input PriceRuleQuantityRangeInput {
  """The upper bound of the quantity range."""
  lessThan: Int

  """The upper or equal bound of the quantity range."""
  lessThanOrEqualTo: Int

  """The lower bound of the quantity range."""
  greaterThan: Int

  """The lower or equal bound of the quantity range."""
  greaterThanOrEqualTo: Int
}

"""Shareable URL for the discount code associated with the price rule."""
type PriceRuleShareableUrl {
  """
  The image URL of the item (product or collection) to which the discount applies.
  """
  targetItemImage: Image

  """The type of page that's associated with the URL."""
  targetType: PriceRuleShareableUrlTargetType!

  """The title of the page that's associated with the URL."""
  title: String!

  """The URL for the discount code."""
  url: URL!
}

"""The type of page where a shareable price rule URL lands."""
enum PriceRuleShareableUrlTargetType {
  """The URL lands on a home page."""
  HOME

  """The URL lands on a product page."""
  PRODUCT

  """The URL lands on a collection page."""
  COLLECTION
}

"""The input fields to update a price rule shipping entitlement."""
input PriceRuleShippingEntitlementsInput {
  """Whether the price rule applies to all shipping lines."""
  targetAllShippingLines: Boolean = false

  """The codes for the countries to which the price rule applies to."""
  countryCodes: [CountryCode!]

  """
  Whether the price rule is applicable to countries that haven't been defined in the shop's shipping zones.
  """
  includeRestOfWorld: Boolean = false
}

"""The shipping lines to which the price rule applies to."""
type PriceRuleShippingLineEntitlements {
  """The codes for the countries to which the price rule applies to."""
  countryCodes: [CountryCode!]!

  """
  Whether the price rule is applicable to countries that haven't been defined in the shop's shipping zones.
  """
  includeRestOfWorld: Boolean!

  """Whether the price rule applies to all shipping lines."""
  targetAllShippingLines: Boolean!
}

"""The set of valid sort keys for the PriceRule query."""
enum PriceRuleSortKeys {
  """Sort by the `starts_at` value."""
  STARTS_AT

  """Sort by the `ends_at` value."""
  ENDS_AT

  """Sort by the `title` value."""
  TITLE

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The status of the price rule."""
enum PriceRuleStatus {
  """The price rule is active."""
  ACTIVE

  """The price rule is expired."""
  EXPIRED

  """The price rule is scheduled."""
  SCHEDULED
}

"""
The type of lines (line_item or shipping_line) to which the price rule applies.
"""
enum PriceRuleTarget {
  """The price rule applies to line items."""
  LINE_ITEM

  """The price rule applies to shipping lines."""
  SHIPPING_LINE
}

"""The list of features that can be supported by a price rule."""
enum PriceRuleTrait {
  """The price rule supports Buy X, Get Y (BXGY) discounts."""
  BUY_ONE_GET_ONE

  """
  The price rule supports Buy X, Get Y (BXGY) discounts that specify a custom allocation limit.
  """
  BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT

  """The price rule supports bulk discounts."""
  BULK

  """The price rule targets specific customers."""
  SPECIFIC_CUSTOMERS

  """The price rule supports discounts that require a quantity."""
  QUANTITY_DISCOUNTS
}

"""Return type for `priceRuleUpdate` mutation."""
type PriceRuleUpdatePayload {
  """The updated price rule."""
  priceRule: PriceRule

  """The updated discount code."""
  priceRuleDiscountCode: PriceRuleDiscountCode

  """The list of errors that occurred from executing the mutation."""
  priceRuleUserErrors: [PriceRuleUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `priceRuleUserErrors` instead.")
}

"""
Represents an error that happens during execution of a price rule mutation.
"""
type PriceRuleUserError implements DisplayableError {
  """Error code to uniquely identify the error."""
  code: PriceRuleErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""A time period during which a price rule is applicable."""
type PriceRuleValidityPeriod {
  """The time after which the price rule becomes invalid."""
  end: DateTime

  """The time after which the price rule is valid."""
  start: DateTime!
}

"""The input fields to update the validity period of a price rule."""
input PriceRuleValidityPeriodInput {
  """The time after which the price rule is valid."""
  start: DateTime!

  """The time after which the price rule becomes invalid."""
  end: DateTime
}

"""
The type of the price rule value. The price rule value might be a percentage value, or a fixed amount.
"""
union PriceRuleValue = PriceRuleFixedAmountValue | PriceRulePercentValue

"""The input fields to update a price rule."""
input PriceRuleValueInput {
  """The percentage value of the price rule."""
  percentageValue: Float

  """The fixed amount value of the price rule."""
  fixedAmountValue: Money
}

"""
One type of value given to a customer when a discount is applied to an order.
The application of a discount with this value gives the customer the specified percentage off a specified item.
"""
type PricingPercentageValue {
  """
  The percentage value of the object. This is a number between -100 (free) and 0 (no discount).
  """
  percentage: Float!
}

"""
The type of value given to a customer when a discount is applied to an order.
For example, the application of the discount might give the customer a
percentage off a specified item. Alternatively, the application of the discount
might give the customer a monetary value in a given currency off an order.
"""
union PricingValue = MoneyV2 | PricingPercentageValue

"""
Private metafields represent custom metadata that is attached to a resource.
Private metafields are accessible only by the application that created them and only from the GraphQL Admin API.

An application can create a maximum of 10 private metafields per shop resource.
"""
type PrivateMetafield implements Node {
  """The date and time when the private metafield was created."""
  createdAt: DateTime!

  """The ID of the private metafield."""
  id: ID!

  """The key name of the private metafield."""
  key: String!

  """The namespace of the private metafield."""
  namespace: String!

  """The date and time when the private metafield was updated."""
  updatedAt: DateTime!

  """The value of a private metafield."""
  value: String!

  """Represents the private metafield value type."""
  valueType: PrivateMetafieldValueType!
}

"""
An auto-generated type for paginating through multiple PrivateMetafields.
"""
type PrivateMetafieldConnection {
  """A list of edges."""
  edges: [PrivateMetafieldEdge!]!

  """A list of the nodes contained in PrivateMetafieldEdge."""
  nodes: [PrivateMetafield!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields for the private metafield to delete."""
input PrivateMetafieldDeleteInput {
  """
  The ID of the resource that owns the metafield. If the field is blank, then the `Shop` resource owns the metafield.
  """
  owner: ID

  """The namespace of the private metafield."""
  namespace: String!

  """The key of the private metafield."""
  key: String!
}

"""Return type for `privateMetafieldDelete` mutation."""
type PrivateMetafieldDeletePayload {
  """The ID of private metafield that was deleted."""
  deletedPrivateMetafieldId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one PrivateMetafield and a cursor during pagination.
"""
type PrivateMetafieldEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PrivateMetafieldEdge."""
  node: PrivateMetafield!
}

"""The input fields for a private metafield."""
input PrivateMetafieldInput {
  """
  The resource that owns the metafield. If the field is blank, then the `Shop` resource owns the metafield.
  """
  owner: ID

  """The namespace of the private metafield."""
  namespace: String!

  """The key of the private metafield."""
  key: String!

  """
  The `value` and `valueType` of the private metafield, wrapped in a `ValueInput` object.
  """
  valueInput: PrivateMetafieldValueInput!
}

"""Return type for `privateMetafieldUpsert` mutation."""
type PrivateMetafieldUpsertPayload {
  """The private metafield that was created or updated."""
  privateMetafield: PrivateMetafield

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The input fields for the value and value type of the private metafield.
"""
input PrivateMetafieldValueInput {
  """The value of a private metafield."""
  value: String!

  """Represents the private metafield value type."""
  valueType: PrivateMetafieldValueType!
}

"""Supported private metafield value types."""
enum PrivateMetafieldValueType {
  """A string metafield."""
  STRING

  """An integer metafield."""
  INTEGER

  """A JSON string metafield."""
  JSON_STRING
}

"""
The Product resource lets you manage products in a merchant’s store. You can use [ProductVariants](https://shopify.dev/api/admin-graphql/latest/objects/productvariant)
to create or update different versions of the same product. You can also add or update
product [Media](https://shopify.dev/api/admin-graphql/latest/interfaces/media).
Products can be organized by grouping them into a
[Collection](https://shopify.dev/api/admin-graphql/latest/objects/collection).
"""
type Product implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & LegacyInteroperability & Navigable & Node & OnlineStorePreviewable & Publishable {
  """
  The number of publications a resource is published to without feedback errors.
  """
  availablePublicationCount: Int!

  """The description of the product, complete with HTML formatting."""
  bodyHtml: String @deprecated(reason: "Use `descriptionHtml` instead.")

  """A list of the collections that include the product."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CollectionSortKeys = ID

    """
    Supported filter parameters:
     - `collection_type`
     - `product_publication_status`
     - `publishable_status`
     - `published_status`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CollectionConnection!

  """The pricing that applies for a customer in a given context."""
  contextualPricing(
    """The context used to generate contextual pricing for the variant."""
    context: ContextualPricingContext!
  ): ProductContextualPricing!

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the product was created.
  """
  createdAt: DateTime!

  """The custom product type specified by the merchant."""
  customProductType: String @deprecated(reason: "Deprecated in API version 2022-10. Use `productType` instead.")

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """
  A stripped description of the product, single line with HTML tags removed.
  """
  description(
    """Truncates string after the given length."""
    truncateAt: Int
  ): String!

  """The description of the product, complete with HTML formatting."""
  descriptionHtml: HTML!

  """
  Stripped description of the product, single line with HTML tags removed.
  Truncated to 60 characters.
  """
  descriptionPlainSummary: String! @deprecated(reason: "Use `description` instead.")

  """The featured image for the product."""
  featuredImage: Image

  """The featured media for the product."""
  featuredMedia: Media

  """
  Information about the product that's provided through resource feedback.
  """
  feedback: ResourceFeedback

  """The theme template used when viewing the gift card in a store."""
  giftCardTemplateSuffix: String

  """A unique human-friendly string of the product's title."""
  handle: String!

  """
  Whether the product has only a single variant with the default option and value.
  """
  hasOnlyDefaultVariant: Boolean!

  """Whether the product has out of stock variants."""
  hasOutOfStockVariants: Boolean!

  """A globally-unique ID."""
  id: ID!

  """The images associated with the product."""
  images(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductImageSortKeys = POSITION
  ): ImageConnection!

  """Whether the product is in a given collection."""
  inCollection(
    """The ID of the collection to check."""
    id: ID!
  ): Boolean!

  """Whether the product is a gift card."""
  isGiftCard: Boolean!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """
  The media associated with the product. This can include images, 3D models, or videos.
  """
  media(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductMediaSortKeys = POSITION
  ): MediaConnection!

  """Total count of media belonging to a product."""
  mediaCount: Int!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The online store preview URL."""
  onlineStorePreviewUrl: URL

  """
  The online store URL for the product.
  A value of `null` indicates that the product isn't published to the Online Store sales channel.
  """
  onlineStoreUrl: URL

  """
  A list of product options. The limit is specified by Shop.resourceLimits.maxProductOptions.
  """
  options(
    """Truncate the array result to this size."""
    first: Int
  ): [ProductOption!]!

  """The price range of the product."""
  priceRange: ProductPriceRange! @deprecated(reason: "Deprecated in API version 2020-10. Use `priceRangeV2` instead.")

  """The price range of the product with prices formatted as decimals."""
  priceRangeV2: ProductPriceRangeV2!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The product category specified by the merchant."""
  productCategory: ProductCategory

  """A list of the channels where the product is published."""
  productPublications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductPublicationConnection! @deprecated(reason: "Use `resourcePublications` instead.")

  """The product type specified by the merchant."""
  productType: String!

  """The number of publications a resource is published on."""
  publicationCount(
    """
    Include only the resource's publications that are published. If false, then
    return all the resource's publications including future publications.
    """
    onlyPublished: Boolean = true
  ): Int!

  """A list of the channels where the product is published."""
  publications(
    """
    Return only the publications that are published. If false, then return all publications.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductPublicationConnection! @deprecated(reason: "Use `resourcePublications` instead.")

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601))
  when the product was published to the Online Store.
  """
  publishedAt: DateTime

  """Check to see whether the resource is published to a given channel."""
  publishedOnChannel(
    """The ID of the channel to check."""
    channelId: ID!
  ): Boolean! @deprecated(reason: "Use `publishedOnPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's channel.
  """
  publishedOnCurrentChannel: Boolean! @deprecated(reason: "Use `publishedOnCurrentPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's publication.
  """
  publishedOnCurrentPublication: Boolean!

  """Check to see whether the resource is published to a given publication."""
  publishedOnPublication(
    """The ID of the publication to check."""
    publicationId: ID!
  ): Boolean!

  """
  Whether the product can only be purchased with a selling plan (subscription).
  Products that are sold on subscription (`requiresSellingPlan: true`) can be
  updated only for online stores. If you update a product to be subscription
  only, then the product is unpublished from all channels except the online store.
  """
  requiresSellingPlan: Boolean!

  """
  The resource that's either published or staged to be published to the calling
  app's publication. Requires the `read_product_listings` scope.
  """
  resourcePublicationOnCurrentPublication: ResourcePublicationV2

  """The list of resources that are published to a publication."""
  resourcePublications(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """
  The list of resources that are either published or staged to be published to a publication.
  """
  resourcePublicationsV2(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled or staged to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationV2Connection!

  """Count of selling plan groups associated with the product."""
  sellingPlanGroupCount: Int!

  """
  A list of all selling plan groups defined in the current shop associated with
  the product either directly or through any of its variants.
  """
  sellingPlanGroups(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SellingPlanGroupConnection!

  """SEO information of the product."""
  seo: SEO!

  """The standardized product type in the Shopify product taxonomy."""
  standardizedProductType: StandardizedProductType @deprecated(reason: "Deprecated in API version 2022-10. Use `productCategory` instead.")

  """The product status. This controls visibility across all channels."""
  status: ProductStatus!

  """
  The Storefront GraphQL API ID of the `Product`.
  
  As of the `2022-04` version release, the Storefront GraphQL API will no longer
  return Base64 encoded IDs to match the behavior of the Admin GraphQL API.
  Therefore, you can safely use the `id` field's value instead.
  """
  storefrontId: StorefrontID! @deprecated(reason: "Use `id` instead.")

  """
  A comma separated list of tags associated with the product. Updating `tags` overwrites
  any existing tags that were previously added to the product. To add new tags without overwriting
  existing tags, use the [tagsAdd](https://shopify.dev/api/admin-graphql/latest/mutations/tagsadd)
  mutation.
  """
  tags: [String!]!

  """The theme template used when viewing the product in a store."""
  templateSuffix: String

  """The title of the product."""
  title: String!

  """The quantity of inventory in stock."""
  totalInventory: Int!

  """The number of variants that are associated with the product."""
  totalVariants: Int!

  """Whether inventory tracking has been enabled for the product."""
  tracksInventory: Boolean!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The list of channels that the resource is not published to."""
  unpublishedChannels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ChannelConnection! @deprecated(reason: "Use `unpublishedPublications` instead.")

  """The list of publications that the resource is not published to."""
  unpublishedPublications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PublicationConnection!

  """
  The date and time when the product was last modified.
  A product's `updatedAt` value can change for different reasons. For example, if an order
  is placed for a product that has inventory tracking set up, then the inventory adjustment
  is counted as an update.
  """
  updatedAt: DateTime!

  """A list of variants associated with the product."""
  variants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductVariantSortKeys = POSITION
  ): ProductVariantConnection!

  """The name of the product's vendor."""
  vendor: String!
}

"""The input fields for specifying product images to append."""
input ProductAppendImagesInput {
  """The ID of the product."""
  id: ID!

  """A list of images to be appended to the product."""
  images: [ImageInput!]!
}

"""Return type for `productAppendImages` mutation."""
type ProductAppendImagesPayload {
  """List of new images appended to the product."""
  newImages: [Image!]

  """The product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The details of a specific product category within the [Shopify product
taxonomy](https://help.shopify.com/txt/product_taxonomy/en.txt).
"""
type ProductCategory {
  """The product taxonomy node associated with the product category."""
  productTaxonomyNode: ProductTaxonomyNode
}

"""
The input fields to use when adding a product category to a product. The
[Shopify product taxonomy](https://help.shopify.com/txt/product_taxonomy/en.txt)
contains the full list of available values.
"""
input ProductCategoryInput {
  """
  The ID of the node in the Shopify taxonomy that represents the product category.
  """
  productTaxonomyNodeId: ID!
}

"""Return type for `productChangeStatus` mutation."""
type ProductChangeStatusPayload {
  """The product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductChangeStatusUserError!]!
}

"""An error that occurs during the execution of `ProductChangeStatus`."""
type ProductChangeStatusUserError implements DisplayableError {
  """The error code."""
  code: ProductChangeStatusUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductChangeStatusUserError`.
"""
enum ProductChangeStatusUserErrorCode {
  """Product could not be found."""
  PRODUCT_NOT_FOUND
}

"""The set of valid sort keys for the ProductCollection query."""
enum ProductCollectionSortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `price` value."""
  PRICE

  """Sort by the `best-selling` value."""
  BEST_SELLING

  """Sort by the `created` value."""
  CREATED

  """Sort by the `id` value."""
  ID

  """Sort by the `manual` value."""
  MANUAL

  """Sort by the `collection-default` value."""
  COLLECTION_DEFAULT

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""An auto-generated type for paginating through multiple Products."""
type ProductConnection {
  """A list of edges."""
  edges: [ProductEdge!]!

  """A list of the nodes contained in ProductEdge."""
  nodes: [Product!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The price of a product in a specific country.
Prices vary between countries.
"""
type ProductContextualPricing {
  """
  The pricing of the variant with the highest price in the given context.
  """
  maxVariantPricing: ProductVariantContextualPricing

  """The pricing of the variant with the lowest price in the given context."""
  minVariantPricing: ProductVariantContextualPricing

  """The price range of the product with prices formatted as decimals."""
  priceRange: ProductPriceRangeV2!
}

"""Return type for `productCreateMedia` mutation."""
type ProductCreateMediaPayload {
  """The newly created media."""
  media: [Media!]

  """The list of errors that occurred from executing the mutation."""
  mediaUserErrors: [MediaUserError!]!

  """The product associated with the media."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `mediaUserErrors` instead.")
}

"""Return type for `productCreate` mutation."""
type ProductCreatePayload {
  """The product object."""
  product: Product

  """The shop associated with the product."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `productDeleteAsync` mutation."""
type ProductDeleteAsyncPayload {
  """The ID of the product that was requested to be deleted."""
  deleteProductId: ID

  """
  The background job that will delete the product and its associated variants and media.
  """
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductDeleteUserError!]!
}

"""Return type for `productDeleteImages` mutation."""
type ProductDeleteImagesPayload {
  """The array of image IDs to delete."""
  deletedImageIds: [ID!]!

  """The product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for specifying the product to delete."""
input ProductDeleteInput {
  """The ID of the product."""
  id: ID!
}

"""Return type for `productDeleteMedia` mutation."""
type ProductDeleteMediaPayload {
  """List of media IDs which were deleted."""
  deletedMediaIds: [ID!]

  """List of product image IDs which were deleted."""
  deletedProductImageIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  mediaUserErrors: [MediaUserError!]!

  """The product associated with the deleted media."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `mediaUserErrors` instead.")
}

"""Return type for `productDelete` mutation."""
type ProductDeletePayload {
  """The ID of the deleted product."""
  deletedProductId: ID

  """The shop associated with the product."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An error that occurred while setting the activation status of an inventory item.
"""
type ProductDeleteUserError implements DisplayableError {
  """The error code."""
  code: ProductDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Possible error codes that can be returned by `ProductDeleteUserError`."""
enum ProductDeleteUserErrorCode {
  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Something went wrong, please try again."""
  GENERIC_ERROR
}

"""The input fields for the product async duplicate mutation."""
input ProductDuplicateAsyncInput {
  """The ID of the product to be duplicated."""
  productId: ID!

  """The new title of the product."""
  newTitle: String!

  """
  The new status of the product. If no value is provided the status will be inherited from the original product.
  """
  newStatus: ProductStatus

  """Specifies whether or not to duplicate images."""
  includeImages: Boolean = false
}

"""Return type for `productDuplicateAsync` mutation."""
type ProductDuplicateAsyncPayload {
  """The duplicated product ID."""
  duplicatedProductId: ID

  """The asynchronous job for duplicating the products."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductDuplicateUserError!]!
}

"""Return type for `productDuplicate` mutation."""
type ProductDuplicatePayload {
  """The asynchronous job that duplicates the product images."""
  imageJob: Job

  """The duplicated product."""
  newProduct: Product

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""An error that occurred while duplicating the product."""
type ProductDuplicateUserError implements DisplayableError {
  """The error code."""
  code: ProductDuplicateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductDuplicateUserError`.
"""
enum ProductDuplicateUserErrorCode {
  """The product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Cannot duplicate a product which has no variants."""
  EMPTY_VARIANT

  """The title cannot be empty."""
  EMPTY_TITLE

  """Something went wrong, please try again."""
  GENERIC_ERROR

  """Something went wrong when saving the product, please try again."""
  FAILED_TO_SAVE
}

"""
An auto-generated type which holds one Product and a cursor during pagination.
"""
type ProductEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ProductEdge."""
  node: Product!
}

"""The set of valid sort keys for the ProductImage query."""
enum ProductImageSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `position` value."""
  POSITION

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `productImageUpdate` mutation."""
type ProductImageUpdatePayload {
  """The image that has been updated."""
  image: Image

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields required to create a product."""
input ProductInput {
  """The description of the product, complete with HTML formatting."""
  descriptionHtml: String

  """
  A unique, human-friendly string for the product.
  Automatically generated from the product's title unless otherwise specified.
  """
  handle: String

  """
  Whether a redirect is required after a new handle has been provided.
  If true, then the old handle is redirected to the new one automatically.
  """
  redirectNewHandle: Boolean = false

  """The SEO information associated with the product."""
  seo: SEOInput

  """The product type specified by the merchant."""
  productType: String

  """The standardized product type in the Shopify product taxonomy."""
  standardizedProductType: StandardizedProductTypeInput

  """The product category in the Shopify product taxonomy."""
  productCategory: ProductCategoryInput

  """The custom product type specified by the merchant."""
  customProductType: String

  """A comma separated list of tags that have been added to the product."""
  tags: [String!]

  """The theme template used when viewing the product in a store."""
  templateSuffix: String

  """Whether the product is a gift card."""
  giftCard: Boolean

  """The theme template used when viewing the gift card in a store."""
  giftCardTemplateSuffix: String

  """The title of the product."""
  title: String

  """The name of the product's vendor."""
  vendor: String

  """The IDs of the collections that this product will be added to."""
  collectionsToJoin: [ID!]

  """
  The IDs of collections that will no longer include the existing product.
  """
  collectionsToLeave: [ID!]

  """
  Specifies the product to update in productUpdate or creates a new product if absent in productCreate.
  """
  id: ID

  """The metafields to associate with this product."""
  metafields: [MetafieldInput!]

  """List of custom product options (maximum of 3 per product)."""
  options: [String!]

  """A list of variants associated with the product."""
  variants: [ProductVariantInput!]

  """The status of the product."""
  status: ProductStatus

  """
  Whether the product can only be purchased with a selling plan (subscription).
  Products that are sold exclusively on subscription can only be created on
  online stores. If set to `true` on an already existing product, then the
  product will be marked unavailable on channels that don't support subscriptions.
  """
  requiresSellingPlan: Boolean
}

"""Return type for `productJoinSellingPlanGroups` mutation."""
type ProductJoinSellingPlanGroupsPayload {
  """The product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Return type for `productLeaveSellingPlanGroups` mutation."""
type ProductLeaveSellingPlanGroupsPayload {
  """The product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""The set of valid sort keys for the ProductMedia query."""
enum ProductMediaSortKeys {
  """Sort by the `position` value."""
  POSITION

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
The product property names. For example, "Size", "Color", and "Material".
Variants are selected based on permutations of these options.
The limit for each product property name is 255 characters.
"""
type ProductOption implements HasPublishedTranslations & Node {
  """A globally-unique ID."""
  id: ID!

  """The product option’s name."""
  name: String!

  """The product option's position."""
  position: Int!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The corresponding value to the product option name."""
  values: [String!]!
}

"""The price range of the product."""
type ProductPriceRange {
  """The highest variant's price."""
  maxVariantPrice: MoneyV2!

  """The lowest variant's price."""
  minVariantPrice: MoneyV2!
}

"""The price range of the product."""
type ProductPriceRangeV2 {
  """The highest variant's price."""
  maxVariantPrice: MoneyV2!

  """The lowest variant's price."""
  minVariantPrice: MoneyV2!
}

"""Represents the channels where a product is published."""
type ProductPublication {
  """The channel where the product was or is published."""
  channel: Channel!

  """Whether the publication is published or not."""
  isPublished: Boolean!

  """The product that was or is going to be published on the channel."""
  product: Product!

  """
  The date that the product was or is going to be published on the channel.
  """
  publishDate: DateTime
}

"""
An auto-generated type for paginating through multiple ProductPublications.
"""
type ProductPublicationConnection {
  """A list of edges."""
  edges: [ProductPublicationEdge!]!

  """A list of the nodes contained in ProductPublicationEdge."""
  nodes: [ProductPublication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ProductPublication and a cursor during pagination.
"""
type ProductPublicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ProductPublicationEdge."""
  node: ProductPublication!
}

"""
The input fields for specifying a publication to which a product will be published.
"""
input ProductPublicationInput {
  """ID of the publication."""
  publicationId: ID

  """The date and time that the product was (or will be) published."""
  publishDate: DateTime
}

"""
The input fields for specifying a product to publish and the channels to publish it to.
"""
input ProductPublishInput {
  """The product to create or update publications for."""
  id: ID!

  """The publication that the product is published to."""
  productPublications: [ProductPublicationInput!]!
}

"""Return type for `productPublish` mutation."""
type ProductPublishPayload {
  """The product that has been published."""
  product: Product

  """The channels where the product is published."""
  productPublications: [ProductPublication!] @deprecated(reason: "Use Product.publications instead.")

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `productReorderImages` mutation."""
type ProductReorderImagesPayload {
  """The asynchronous job which reorders the images."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `productReorderMedia` mutation."""
type ProductReorderMediaPayload {
  """The asynchronous job which reorders the media."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  mediaUserErrors: [MediaUserError!]!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `mediaUserErrors` instead.")
}

"""
Reports the status of product for a Sales Channel or Storefront API.
This might include why a product is not available in a Sales Channel
and how a merchant might fix this.
"""
type ProductResourceFeedback {
  """
  The time when the feedback was generated. Used to help determine whether
  incoming feedback is outdated compared to existing feedback.
  """
  feedbackGeneratedAt: DateTime!

  """The feedback messages presented to the merchant."""
  messages: [String!]!

  """The ID of the product associated with the feedback."""
  productId: ID!

  """The timestamp of the product associated with the feedback."""
  productUpdatedAt: DateTime!

  """
  Conveys the state of the feedback and whether it requires merchant action or not.
  """
  state: ResourceFeedbackState!
}

"""The input fields used to create a product feedback."""
input ProductResourceFeedbackInput {
  """The ID of the product that the feedback was created on."""
  productId: ID!

  """Whether the merchant needs to take action on the product."""
  state: ResourceFeedbackState!

  """
  The date and time when the payload is constructed.
  Used to help determine whether incoming feedback is outdated compared to
  feedback already received, and if it should be ignored upon arrival.
  """
  feedbackGeneratedAt: DateTime!

  """The timestamp of the product associated with the feedback."""
  productUpdatedAt: DateTime!

  """
  A concise set of copy strings to be displayed to merchants. Used to guide
  merchants in resolving problems that your app encounters when trying to make
  use of their products.
  You can specify up to four messages. Each message is limited to 100 characters.
  """
  messages: [String!]
}

"""A sale associated with a product."""
type ProductSale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line item for the associated sale."""
  lineItem: LineItem!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""The set of valid sort keys for the Product query."""
enum ProductSortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `product_type` value."""
  PRODUCT_TYPE

  """Sort by the `vendor` value."""
  VENDOR

  """Sort by the `inventory_total` value."""
  INVENTORY_TOTAL

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `published_at` value."""
  PUBLISHED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  Pagination isn't supported when using this sort key.
  """
  RELEVANCE
}

"""The possible product statuses."""
enum ProductStatus {
  """
  The product is ready to sell and can be published to sales channels and apps.
  Products with an active status aren't automatically published to sales
  channels, such as the online store, or apps. By default, existing products are set to active.
  """
  ACTIVE

  """
  The product is no longer being sold and isn't available to customers on sales channels and apps.
  """
  ARCHIVED

  """
  The product isn't ready to sell and is unavailable to customers on sales
  channels and apps. By default, duplicated and unarchived products are set to draft.
  """
  DRAFT
}

"""
Represents a [Shopify product taxonomy](https://help.shopify.com/txt/product_taxonomy/en.txt) node.
"""
type ProductTaxonomyNode implements Node {
  """
  The full name of the product taxonomy node. For example,  Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds.
  """
  fullName: String!

  """The ID of the product taxonomy node."""
  id: ID!

  """Whether the node is a leaf node."""
  isLeaf: Boolean!

  """Whether the node is a root node."""
  isRoot: Boolean!

  """The name of the product taxonomy node. For example, Dog Beds."""
  name: String!
}

"""
The input fields for specifying a product to unpublish from a channel and the sales channels to unpublish it from.
"""
input ProductUnpublishInput {
  """The ID of the product to create or update publications for."""
  id: ID!

  """The channels to unpublish the product from."""
  productPublications: [ProductPublicationInput!]!
}

"""Return type for `productUnpublish` mutation."""
type ProductUnpublishPayload {
  """The product that has been unpublished."""
  product: Product

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `productUpdateMedia` mutation."""
type ProductUpdateMediaPayload {
  """The updated media object."""
  media: [Media!]

  """The list of errors that occurred from executing the mutation."""
  mediaUserErrors: [MediaUserError!]!

  """The product on which media was updated."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]! @deprecated(reason: "Use `mediaUserErrors` instead.")
}

"""Return type for `productUpdate` mutation."""
type ProductUpdatePayload {
  """The updated product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Represents a product variant."""
type ProductVariant implements HasMetafieldDefinitions & HasMetafields & HasPublishedTranslations & LegacyInteroperability & Navigable & Node {
  """Whether the product variant is available for sale."""
  availableForSale: Boolean!

  """The value of the barcode associated with the product."""
  barcode: String

  """The compare-at price of the variant in the default shop currency."""
  compareAtPrice: Money

  """The pricing that applies for a customer in a given context."""
  contextualPricing(
    """The context used to generate contextual pricing for the variant."""
    context: ContextualPricingContext!
  ): ProductVariantContextualPricing!

  """The date and time when the variant was created."""
  createdAt: DateTime!

  """
  A default cursor that returns the single next record, sorted ascending by ID.
  """
  defaultCursor: String!

  """The delivery profile for the variant."""
  deliveryProfile: DeliveryProfile

  """
  Display name of the variant, based on product's title + variant's title.
  """
  displayName: String!

  """
  The fulfillment service that stocks a product variant.
  
  This is a third-party fulfillment service if the following conditions are met:
  - The product variant is stocked by a single fulfillment service.
  - The [FulfillmentService](/api/admin-graphql/latest/objects/FulfillmentService)
  is a third-party fulfillment service. Third-party fulfillment services don't
  have a handle with the value `manual`.
  - The fulfillment service hasn't [opted into SKU sharing](/api/admin-graphql/latest/objects/FulfillmentService#field-fulfillmentservice-permitsskusharing).
  
  If the conditions aren't met, then the fulfillment service has the `manual` handle.
  """
  fulfillmentService: FulfillmentService @deprecated(reason: "\nThe [relationship between a product variant and a fulfillment service was changed in the `2022-07` API version](/changelog/fulfillment-service-sku-sharing). A [ProductVariant](/api/admin-graphql/latest/objects/ProductVariant) can be stocked by multiple fulfillment services. As a result, we recommend that you use the [inventoryItem field](/api/admin-graphql/latest/objects/ProductVariant#field-productvariant-inventoryitem) if you need to determine where a product variant is stocked.\n\nIf you need to determine whether a product is a gift card, then you should continue to use this field until an alternative is available.\n\nLearn more about [managing inventory quantities and states](/apps/fulfillment/inventory-management-apps/quantities-states).\n")

  """
  Whether changes to the fulfillment service for the product variant are allowed.
  """
  fulfillmentServiceEditable: EditableProperty!

  """The Harmonized System Code (or HS Tariff Code) for the variant."""
  harmonizedSystemCode: String @deprecated(reason: "Use `InventoryItem.harmonizedSystemCode` instead.")

  """A globally-unique ID."""
  id: ID!

  """The featured image for the variant."""
  image: Image

  """The inventory item, which is used to query for inventory information."""
  inventoryItem: InventoryItem!

  """
  The fulfillment service that tracks the number of items in stock for the product variant.
  """
  inventoryManagement: ProductVariantInventoryManagement! @deprecated(reason: "Use tracked attribute on `inventoryItem` instead.")

  """
  Whether customers are allowed to place an order for the product variant when it's out of stock.
  """
  inventoryPolicy: ProductVariantInventoryPolicy!

  """The total sellable quantity of the variant."""
  inventoryQuantity: Int

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The media associated with the product variant."""
  media(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MediaConnection!

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definitions by namespace."""
    namespace: String

    """Filter by the definition's pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """
  The order of the product variant in the list of product variants. The first position in the list is 1.
  """
  position: Int!

  """
  List of prices and compare-at prices in the presentment currencies for this shop.
  """
  presentmentPrices(
    """The presentment currencies prices should return in."""
    presentmentCurrencies: [CurrencyCode!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantPricePairConnection! @deprecated(reason: "Use `contextualPricing` instead.")

  """The price of the product variant in the default shop currency."""
  price: Money!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """The product that this variant belongs to."""
  product: Product!

  """
  Whether a customer needs to provide a shipping address when placing an order for the product variant.
  """
  requiresShipping: Boolean! @deprecated(reason: "Use `InventoryItem.requiresShipping` instead.")

  """List of product options applied to the variant."""
  selectedOptions: [SelectedOption!]!

  """
  The total sellable quantity of the variant for online channels.
  This doesn't represent the total available inventory or capture
  [limitations based on customer location](https://help.shopify.com/manual/markets/inventory_and_fulfillment).
  """
  sellableOnlineQuantity: Int!

  """Count of selling plan groups associated with the product variant."""
  sellingPlanGroupCount: Int!

  """
  A list of all selling plan groups defined in the current shop associated with the product variant.
  """
  sellingPlanGroups(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SellingPlanGroupConnection!

  """
  A case-sensitive identifier for the product variant in the shop.
  Required in order to connect to a fulfillment service.
  """
  sku: String

  """
  The Storefront GraphQL API ID of the `ProductVariant`.
  
  As of the `2022-04` version release, the Storefront GraphQL API will no longer
  return Base64 encoded IDs to match the behavior of the Admin GraphQL API.
  Therefore, you can safely use the `id` field's value instead.
  """
  storefrontId: StorefrontID! @deprecated(reason: "Use `id` instead.")

  """The tax code for the product variant."""
  taxCode: String

  """Whether a tax is charged when the product variant is sold."""
  taxable: Boolean!

  """The title of the product variant."""
  title: String!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """
  The date and time (ISO 8601 format) when the product variant was last modified.
  """
  updatedAt: DateTime!

  """
  The weight of the product variant in the unit system specified with weight_unit.
  """
  weight: Float

  """
  The unit of measurement that applies to the product variant's weight. If you
  don't specify a value for weight_unit, then the shop's default unit of
  measurement is applied. Valid values: `g`, `kg`, `oz`, `lb`.
  """
  weightUnit: WeightUnit!
}

"""The input fields required to append media to a single variant."""
input ProductVariantAppendMediaInput {
  """Specifies the variant to which media will be appended."""
  variantId: ID!

  """Specifies the media to append to the variant."""
  mediaIds: [ID!]!
}

"""Return type for `productVariantAppendMedia` mutation."""
type ProductVariantAppendMediaPayload {
  """The product associated with the variants and media."""
  product: Product

  """The product variants that were updated."""
  productVariants: [ProductVariant!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MediaUserError!]!
}

"""
An auto-generated type for paginating through multiple ProductVariants.
"""
type ProductVariantConnection {
  """A list of edges."""
  edges: [ProductVariantEdge!]!

  """A list of the nodes contained in ProductVariantEdge."""
  nodes: [ProductVariant!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
The price of a product variant in a specific country.
Prices vary between countries.
"""
type ProductVariantContextualPricing {
  """The final compare-at price after all adjustments are applied."""
  compareAtPrice: MoneyV2

  """The final price after all adjustments are applied."""
  price: MoneyV2!
}

"""Return type for `productVariantCreate` mutation."""
type ProductVariantCreatePayload {
  """The product associated with the variant."""
  product: Product

  """The successfully created variant."""
  productVariant: ProductVariant

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `productVariantDelete` mutation."""
type ProductVariantDeletePayload {
  """The ID of the deleted product variant."""
  deletedProductVariantId: ID

  """The product associated with the deleted product variant."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields required to detach media from a single variant."""
input ProductVariantDetachMediaInput {
  """Specifies the variant from which media will be detached."""
  variantId: ID!

  """Specifies the media to detach from the variant."""
  mediaIds: [ID!]!
}

"""Return type for `productVariantDetachMedia` mutation."""
type ProductVariantDetachMediaPayload {
  """The product associated with the variants and media."""
  product: Product

  """The product variants that were updated."""
  productVariants: [ProductVariant!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MediaUserError!]!
}

"""
An auto-generated type which holds one ProductVariant and a cursor during pagination.
"""
type ProductVariantEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ProductVariantEdge."""
  node: ProductVariant!
}

"""The input fields for specifying a product variant to create or update."""
input ProductVariantInput {
  """The value of the barcode associated with the product."""
  barcode: String

  """The compare-at price of the variant."""
  compareAtPrice: Money

  """The Harmonized System code (or HS Tariff code) for the variant."""
  harmonizedSystemCode: String

  """
  Specifies the product variant to update or create a new variant if absent.
  """
  id: ID

  """
  The URL of the media to associate with the variant. This field can only be
  used in mutations that create media images and must match one of the URLs
  being created on the product. This field only accepts one value.
  """
  mediaSrc: [String!]

  """
  Whether customers are allowed to place an order for the product variant when it's out of stock.
  """
  inventoryPolicy: ProductVariantInventoryPolicy

  """
  The inventory quantities at each location where the variant is stocked. Used
  as input only to the `productVariantCreate` mutation.
  """
  inventoryQuantities: [InventoryLevelInput!]

  """The inventory item associated with the variant. Used for unit cost."""
  inventoryItem: InventoryItemInput

  """Additional customizable information about the product variant."""
  metafields: [MetafieldInput!]

  """
  The custom properties that a shop owner uses to define product variants.
  """
  options: [String!]

  """
  The order of the product variant in the list of product variants. The first position in the list is 1.
  """
  position: Int

  """The price of the variant."""
  price: Money

  """
  The product to create the variant for. Used as input only to the `productVariantCreate` mutation.
  """
  productId: ID

  """Whether the variant requires shipping."""
  requiresShipping: Boolean

  """The SKU for the variant. Case-sensitive string."""
  sku: String

  """Whether the variant is taxable."""
  taxable: Boolean

  """The tax code associated with the variant."""
  taxCode: String

  """The weight of the variant."""
  weight: Float

  """The unit of weight that's used to measure the variant."""
  weightUnit: WeightUnit
}

"""
The valid values for the method of inventory tracking for a product variant.
"""
enum ProductVariantInventoryManagement {
  """
  This product variant's inventory is tracked by Shopify. Inventory can be
  tracked by store location(s) and/or third-party fulfillment service(s).
  """
  SHOPIFY

  """This product variant's inventory is not tracked."""
  NOT_MANAGED

  """
  This product variant's inventory is tracked by a third-party fulfillment service.
  """
  FULFILLMENT_SERVICE
}

"""
The valid values for the inventory policy of a product variant once it is out of stock.
"""
enum ProductVariantInventoryPolicy {
  """Customers can't buy this product variant after it's out of stock."""
  DENY

  """Customers can buy this product variant after it's out of stock."""
  CONTINUE
}

"""Return type for `productVariantJoinSellingPlanGroups` mutation."""
type ProductVariantJoinSellingPlanGroupsPayload {
  """The product variant object."""
  productVariant: ProductVariant

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Return type for `productVariantLeaveSellingPlanGroups` mutation."""
type ProductVariantLeaveSellingPlanGroupsPayload {
  """The product variant object."""
  productVariant: ProductVariant

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""The input fields representing a product variant position."""
input ProductVariantPositionInput {
  """Specifies the ID of the product variant to update."""
  id: ID!

  """
  The order of the product variant in the list of product variants. The first position in the list is 1.
  """
  position: Int!
}

"""The compare-at price and price of a variant sharing a currency."""
type ProductVariantPricePair {
  """The compare-at price of the variant with associated currency."""
  compareAtPrice: MoneyV2

  """The price of the variant with associated currency."""
  price: MoneyV2!
}

"""
An auto-generated type for paginating through multiple ProductVariantPricePairs.
"""
type ProductVariantPricePairConnection {
  """A list of edges."""
  edges: [ProductVariantPricePairEdge!]!

  """A list of the nodes contained in ProductVariantPricePairEdge."""
  nodes: [ProductVariantPricePair!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ProductVariantPricePair and a cursor during pagination.
"""
type ProductVariantPricePairEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ProductVariantPricePairEdge."""
  node: ProductVariantPricePair!
}

"""Return type for `productVariantsBulkCreate` mutation."""
type ProductVariantsBulkCreatePayload {
  """The updated product object."""
  product: Product

  """The newly created variants."""
  productVariants: [ProductVariant!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductVariantsBulkCreateUserError!]!
}

"""Error codes for failed product variant bulk create mutations."""
type ProductVariantsBulkCreateUserError implements DisplayableError {
  """The error code."""
  code: ProductVariantsBulkCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductVariantsBulkCreateUserError`.
"""
enum ProductVariantsBulkCreateUserErrorCode {
  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """On create, this key cannot be used."""
  NO_KEY_ON_CREATE

  """Variant already exists."""
  VARIANT_ALREADY_EXISTS

  """Variant price must be greater than or equal to zero."""
  GREATER_THAN_OR_EQUAL_TO

  """Variant options are not enough."""
  NEED_TO_ADD_OPTION_VALUES

  """Variant options are more than the product options."""
  OPTION_VALUES_FOR_NUMBER_OF_UNKNOWN_OPTIONS

  """Inventory locations cannot exceed the allowed resource limit or 10."""
  TOO_MANY_INVENTORY_LOCATIONS

  """You reached the limit of available SKUs in your current plan."""
  SUBSCRIPTION_VIOLATION

  """Variant options already exist. Please change the variant option(s)."""
  VARIANT_ALREADY_EXISTS_CHANGE_OPTION_VALUE

  """Quantity could not be set. The location was not found."""
  TRACKED_VARIANT_LOCATION_NOT_FOUND

  """Input must be for this product."""
  MUST_BE_FOR_THIS_PRODUCT

  """Input is not defined for this shop."""
  NOT_DEFINED_FOR_SHOP

  """Invalid input detected."""
  INVALID

  """Price cannot take a negative value."""
  NEGATIVE_PRICE_VALUE
}

"""Return type for `productVariantsBulkDelete` mutation."""
type ProductVariantsBulkDeletePayload {
  """The updated product object."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductVariantsBulkDeleteUserError!]!
}

"""Error codes for failed bulk variant delete mutations."""
type ProductVariantsBulkDeleteUserError implements DisplayableError {
  """The error code."""
  code: ProductVariantsBulkDeleteUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductVariantsBulkDeleteUserError`.
"""
enum ProductVariantsBulkDeleteUserErrorCode {
  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Cannot delete default variant."""
  CANNOT_DELETE_LAST_VARIANT

  """The variant does not exist."""
  AT_LEAST_ONE_VARIANT_DOES_NOT_BELONG_TO_THE_PRODUCT
}

"""
The input fields for specifying a product variant to create as part of a variant bulk mutation.
"""
input ProductVariantsBulkInput {
  """The value of the barcode associated with the product variant."""
  barcode: String

  """The compare-at price of the variant."""
  compareAtPrice: Money

  """The Harmonized System code (or HS Tariff code) for the variant."""
  harmonizedSystemCode: String

  """Specifies the product variant to update or delete."""
  id: ID

  """The URL of the media to associate with the variant."""
  mediaSrc: [String!]

  """
  Whether customers are allowed to place an order for the variant when it's out of stock.
  """
  inventoryPolicy: ProductVariantInventoryPolicy

  """
  The inventory quantities at each location where the variant is stocked. The number of elements
  in the array of inventory quantities can't exceed 10 and the amount specified
  for the plan. Used as input only to the `productVariantCreate` mutation.
  """
  inventoryQuantities: [InventoryLevelInput!]

  """The inventory item associated with the variant, used for unit cost."""
  inventoryItem: InventoryItemInput

  """The additional customizable information about the product variant."""
  metafields: [MetafieldInput!]

  """
  The custom properties that a shop owner uses to define product variants.
  """
  options: [String!]

  """The price of the variant."""
  price: Money

  """Whether the variant requires shipping."""
  requiresShipping: Boolean

  """The SKU for the variant."""
  sku: String

  """Whether the variant is taxable."""
  taxable: Boolean

  """The tax code associated with the variant."""
  taxCode: String

  """The weight of the variant."""
  weight: Float

  """The unit of weight that's used to measure the variant."""
  weightUnit: WeightUnit
}

"""Return type for `productVariantsBulkReorder` mutation."""
type ProductVariantsBulkReorderPayload {
  """The updated product."""
  product: Product

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductVariantsBulkReorderUserError!]!
}

"""Error codes for failed bulk product variants reorder operation."""
type ProductVariantsBulkReorderUserError implements DisplayableError {
  """The error code."""
  code: ProductVariantsBulkReorderUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductVariantsBulkReorderUserError`.
"""
enum ProductVariantsBulkReorderUserErrorCode {
  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Product variant does not exist."""
  MISSING_VARIANT

  """Product variant position cannot be zero or negative number."""
  INVALID_POSITION

  """Product variant IDs must be unique."""
  DUPLICATED_VARIANT_ID
}

"""Return type for `productVariantsBulkUpdate` mutation."""
type ProductVariantsBulkUpdatePayload {
  """The updated product object."""
  product: Product

  """The updated variants."""
  productVariants: [ProductVariant!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ProductVariantsBulkUpdateUserError!]!
}

"""Error codes for failed variant bulk update mutations."""
type ProductVariantsBulkUpdateUserError implements DisplayableError {
  """The error code."""
  code: ProductVariantsBulkUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ProductVariantsBulkUpdateUserError`.
"""
enum ProductVariantsBulkUpdateUserErrorCode {
  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Product variant is missing ID attribute."""
  PRODUCT_VARIANT_ID_MISSING

  """Product variant does not exist."""
  PRODUCT_VARIANT_DOES_NOT_EXIST

  """Inventory quantities cannot be updated with variants API."""
  NO_INVENTORY_QUANTITIES_ON_VARIANTS_UPDATE

  """The variant already exists."""
  VARIANT_ALREADY_EXISTS

  """The price of the variant must be greater than or equal to zero."""
  GREATER_THAN_OR_EQUAL_TO

  """Variant options are not enough."""
  NEED_TO_ADD_OPTION_VALUES

  """Variant options are more than the product options."""
  OPTION_VALUES_FOR_NUMBER_OF_UNKNOWN_OPTIONS

  """You reached the limit of available SKUs in your current plan."""
  SUBSCRIPTION_VIOLATION

  """Inventory quantities cannot be provided during update."""
  NO_INVENTORY_QUANTITES_DURING_UPDATE

  """Price cannot take a negative value."""
  NEGATIVE_PRICE_VALUE
}

"""The set of valid sort keys for the ProductVariant query."""
enum ProductVariantSortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `name` value."""
  NAME

  """Sort by the `sku` value."""
  SKU

  """Sort by the `inventory_quantity` value."""
  INVENTORY_QUANTITY

  """Sort by the `inventory_management` value."""
  INVENTORY_MANAGEMENT

  """
  Sort by available inventory quantity in the location specified by the `query:"location_id:"` argument.
  Don't use this sort key when no `location_id` in query is specified.
  """
  INVENTORY_LEVELS_AVAILABLE

  """Sort by the `inventory_policy` value."""
  INVENTORY_POLICY

  """Sort by the `full_title` value."""
  FULL_TITLE

  """Sort by the `popular` value."""
  POPULAR

  """Sort by the `position` value."""
  POSITION

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `productVariantUpdate` mutation."""
type ProductVariantUpdatePayload {
  """The product associated with the variant."""
  product: Product

  """The updated variant."""
  productVariant: ProductVariant

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The set of valid sort keys for the ProfileItem query."""
enum ProfileItemSortKeys {
  """Sort by the `title` value."""
  TITLE

  """Sort by the `product_type` value."""
  PRODUCT_TYPE

  """Sort by the `vendor` value."""
  VENDOR

  """Sort by the `inventory_total` value."""
  INVENTORY_TOTAL

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `published_at` value."""
  PUBLISHED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
A publication is a group of products and collections that is published to an app.
"""
type Publication implements Node {
  """The app associated with the publication."""
  app: App! @deprecated(reason: "Use [AppCatalog.apps](https://shopify.dev/api/admin-graphql/unstable/objects/AppCatalog#connection-appcatalog-apps) instead.")

  """
  The collection publications for the list of collections published to the publication.
  """
  collectionPublicationsV3(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """The list of collections published to the publication."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CollectionConnection!

  """Whether the collection is available to the publication."""
  hasCollection(
    """Collection ID to check."""
    id: ID!
  ): Boolean!

  """A globally-unique ID."""
  id: ID!

  """Name of the publication."""
  name: String! @deprecated(reason: "Use [Catalog.title](https://shopify.dev/api/admin-graphql/unstable/interfaces/Catalog#field-catalog-title) instead.")

  """
  The product publications for the list of products published to the publication.
  """
  productPublicationsV3(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """The list of products published to the publication."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!

  """Whether the publication supports future publishing."""
  supportsFuturePublishing: Boolean!
}

"""An auto-generated type for paginating through multiple Publications."""
type PublicationConnection {
  """A list of edges."""
  edges: [PublicationEdge!]!

  """A list of the nodes contained in PublicationEdge."""
  nodes: [Publication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one Publication and a cursor during pagination.
"""
type PublicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of PublicationEdge."""
  node: Publication!
}

"""The input fields required to publish a resource."""
input PublicationInput {
  """ID of the publication."""
  publicationId: ID

  """
  The date and time that the resource was published. Setting this to a date in
  the future will schedule the resource to be published. Only online store
  channels support future publishing. This field has no effect if you include it
  in the `publishableUnpublish` mutation.
  """
  publishDate: DateTime
}

"""
Represents a resource that can be published to a channel.
A publishable resource can be either a Product or Collection.
"""
interface Publishable {
  """
  The number of publications a resource is published to without feedback errors.
  """
  availablePublicationCount: Int!

  """The number of publications a resource is published on."""
  publicationCount(
    """
    Include only the resource's publications that are published. If false, then
    return all the resource's publications including future publications.
    """
    onlyPublished: Boolean = true
  ): Int!

  """Check to see whether the resource is published to a given channel."""
  publishedOnChannel(
    """The ID of the channel to check."""
    channelId: ID!
  ): Boolean! @deprecated(reason: "Use `publishedOnPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's channel.
  """
  publishedOnCurrentChannel: Boolean! @deprecated(reason: "Use `publishedOnCurrentPublication` instead.")

  """
  Check to see whether the resource is published to the calling app's publication.
  """
  publishedOnCurrentPublication: Boolean!

  """Check to see whether the resource is published to a given publication."""
  publishedOnPublication(
    """The ID of the publication to check."""
    publicationId: ID!
  ): Boolean!

  """The list of resources that are published to a publication."""
  resourcePublications(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationConnection!

  """
  The list of resources that are either published or staged to be published to a publication.
  """
  resourcePublicationsV2(
    """
    Whether to return only the resources that are currently published. If false,
    then also returns the resources that are scheduled or staged to be published.
    """
    onlyPublished: Boolean = true

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ResourcePublicationV2Connection!

  """The list of channels that the resource is not published to."""
  unpublishedChannels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ChannelConnection! @deprecated(reason: "Use `unpublishedPublications` instead.")

  """The list of publications that the resource is not published to."""
  unpublishedPublications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PublicationConnection!
}

"""Return type for `publishablePublish` mutation."""
type PublishablePublishPayload {
  """Resource that has been published."""
  publishable: Publishable

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `publishablePublishToCurrentChannel` mutation."""
type PublishablePublishToCurrentChannelPayload {
  """Resource that has been published."""
  publishable: Publishable

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `publishableUnpublish` mutation."""
type PublishableUnpublishPayload {
  """Resource that has been unpublished."""
  publishable: Publishable

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `publishableUnpublishToCurrentChannel` mutation."""
type PublishableUnpublishToCurrentChannelPayload {
  """Resource that has been unpublished."""
  publishable: Publishable

  """The user's shop."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Published translation of a field of a resource."""
type PublishedTranslation {
  """The resource field that's being translated."""
  key: String!

  """The locale of this translation."""
  locale: String!

  """
  The ID of the market that the translation is specific to. Null value means the translation is available in any market.
  """
  marketId: ID

  """The translation value."""
  value: String
}

"""Return type for `pubSubWebhookSubscriptionCreate` mutation."""
type PubSubWebhookSubscriptionCreatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [PubSubWebhookSubscriptionCreateUserError!]!

  """The webhook subscription that was created."""
  webhookSubscription: WebhookSubscription
}

"""
An error that occurs during the execution of `PubSubWebhookSubscriptionCreate`.
"""
type PubSubWebhookSubscriptionCreateUserError implements DisplayableError {
  """The error code."""
  code: PubSubWebhookSubscriptionCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PubSubWebhookSubscriptionCreateUserError`.
"""
enum PubSubWebhookSubscriptionCreateUserErrorCode {
  """Invalid parameters provided."""
  INVALID_PARAMETERS
}

"""The input fields for a PubSub webhook subscription."""
input PubSubWebhookSubscriptionInput {
  """The Pub/Sub project ID."""
  pubSubProject: String!

  """The Pub/Sub topic ID."""
  pubSubTopic: String!

  """The format in which the webhook subscription should send the data."""
  format: WebhookSubscriptionFormat

  """The list of fields to be included in the webhook subscription."""
  includeFields: [String!]

  """
  The list of namespaces for any metafields that should be included in the webhook subscription.
  """
  metafieldNamespaces: [String!]
}

"""Return type for `pubSubWebhookSubscriptionUpdate` mutation."""
type PubSubWebhookSubscriptionUpdatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [PubSubWebhookSubscriptionUpdateUserError!]!

  """The webhook subscription that was updated."""
  webhookSubscription: WebhookSubscription
}

"""
An error that occurs during the execution of `PubSubWebhookSubscriptionUpdate`.
"""
type PubSubWebhookSubscriptionUpdateUserError implements DisplayableError {
  """The error code."""
  code: PubSubWebhookSubscriptionUpdateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `PubSubWebhookSubscriptionUpdateUserError`.
"""
enum PubSubWebhookSubscriptionUpdateUserErrorCode {
  """Invalid parameters provided."""
  INVALID_PARAMETERS
}

"""
Represents information about the purchasing company for the order or draft order.
"""
type PurchasingCompany {
  """The company associated to the order or draft order."""
  company: Company!

  """The company contact associated to the order or draft order."""
  contact: CompanyContact

  """The company location associated to the order or draft order."""
  location: CompanyLocation!
}

"""
The input fields for a purchasing company, which is a combination of company, company contact, and company location.
"""
input PurchasingCompanyInput {
  """ID of the company."""
  companyId: ID!

  """ID of the company contact."""
  companyContactId: ID!

  """ID of the company location."""
  companyLocationId: ID!
}

"""
Represents information about the purchasing entity for the order or draft order.
"""
union PurchasingEntity = Customer | PurchasingCompany

"""
The input fields for a purchasing entity. Can either be a customer or a purchasing company.
"""
input PurchasingEntityInput {
  """Represents a customer. Null if there's a purchasing company."""
  customerId: ID

  """Represents a purchasing company. Null if there's a customer."""
  purchasingCompany: PurchasingCompanyInput
}

"""
The schema's entry-point for queries. This acts as the public, top-level API from which all queries must start.
"""
type QueryRoot {
  """Returns an abandonment by ID."""
  abandonment(
    """The ID of the Abandonment to return."""
    id: ID!
  ): Abandonment

  """Returns an Abandonment by the Abandoned Checkout ID."""
  abandonmentByAbandonedCheckoutId(
    """The ID of the Abandoned Checkout ID to query by."""
    abandonedCheckoutId: ID!
  ): Abandonment

  """Lookup an App by ID or return the currently authenticated App."""
  app(
    """The ID to lookup the App by."""
    id: ID
  ): App

  """
  Fetches app by handle.
  Returns null if the app doesn't exist.
  """
  appByHandle(
    """Handle of the App."""
    handle: String!
  ): App

  """
  Fetches an app by its client ID.
  Returns null if the app doesn't exist.
  """
  appByKey(
    """Client ID of the app."""
    apiKey: String!
  ): App

  """An app discount type."""
  appDiscountType(
    """The ID for the function providing the app discount type."""
    functionId: String!
  ): AppDiscountType

  """A list of app discount types installed by apps."""
  appDiscountTypes: [AppDiscountType!]!

  """
  Lookup an AppInstallation by ID or return the AppInstallation for the currently authenticated App.
  """
  appInstallation(
    """ID used to lookup AppInstallation."""
    id: ID
  ): AppInstallation

  """List of app installations."""
  appInstallations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AppInstallationSortKeys = INSTALLED_AT

    """The category of app installations to fetch."""
    category: AppInstallationCategory

    """The privacy level of app installations to fetch."""
    privacy: AppInstallationPrivacy = PUBLIC
  ): AppInstallationConnection!

  """Returns an automatic discount resource by ID."""
  automaticDiscount(
    """The ID of the DiscountAutomatic to return."""
    id: ID!
  ): DiscountAutomatic @deprecated(reason: "Use `automaticDiscountNode` instead.")

  """Returns an automatic discount resource by ID."""
  automaticDiscountNode(
    """The ID of the DiscountAutomaticNode to return."""
    id: ID!
  ): DiscountAutomaticNode

  """List of automatic discounts."""
  automaticDiscountNodes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AutomaticDiscountSortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `status`
     - `type`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountAutomaticNodeConnection!

  """List of the shop's automatic discount saved searches."""
  automaticDiscountSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """List of automatic discounts."""
  automaticDiscounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: AutomaticDiscountSortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `status`
     - `type`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountAutomaticConnection! @deprecated(reason: "Use `automaticDiscountNodes` instead.")

  """
  Returns a list of activated carrier services and associated shop locations that support them.
  """
  availableCarrierServices: [DeliveryCarrierServiceAndLocations!]!

  """A list of available locales."""
  availableLocales: [Locale!]!

  """Returns a `DeliveryCarrierService` object by ID."""
  carrierService(
    """The ID of the DeliveryCarrierService to return."""
    id: ID!
  ): DeliveryCarrierService

  """Lookup a channel by ID."""
  channel(
    """The ID of the Channel to return."""
    id: ID!
  ): Channel @deprecated(reason: "Use `publication` instead.")

  """List of the active sales channels."""
  channels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ChannelConnection! @deprecated(reason: "Use `publications` instead.")

  """A checkout profile on a shop."""
  checkoutProfile(
    """The ID of the checkout profile."""
    id: ID!
  ): CheckoutProfile

  """List of checkout profiles on a shop."""
  checkoutProfiles(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CheckoutProfileSortKeys = UPDATED_AT

    """
    Supported filter parameters:
     - `is_published`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CheckoutProfileConnection!

  """Returns a code discount resource by ID."""
  codeDiscountNode(
    """The ID of the DiscountCodeNode to return."""
    id: ID!
  ): DiscountCodeNode

  """Returns a code discount identified by its discount code."""
  codeDiscountNodeByCode(
    """The case-insensitive code of the `DiscountCodeNode` to return."""
    code: String!
  ): DiscountCodeNode

  """
  List of code discounts. Special fields for query params:
   * status: active, expired, scheduled
   * discount_type: bogo, fixed_amount, free_shipping, percentage.
  """
  codeDiscountNodes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CodeDiscountSortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `combines_with`
     - `created_at`
     - `discount_type`
     - `ends_at`
     - `starts_at`
     - `status`
     - `times_used`
     - `title`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountCodeNodeConnection!

  """List of the shop's code discount saved searches."""
  codeDiscountSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a Collection resource by ID."""
  collection(
    """The ID of the Collection to return."""
    id: ID!
  ): Collection

  """Return a collection by its handle."""
  collectionByHandle(
    """The handle of the collection."""
    handle: String!
  ): Collection

  """Lists all rules that can be used to create smart collections."""
  collectionRulesConditions: [CollectionRuleConditions!]!

  """Returns a list of the shop's collection saved searches."""
  collectionSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a list of collections."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CollectionSortKeys = ID

    """
    Supported filter parameters:
     - `collection_type`
     - `product_publication_status`
     - `publishable_status`
     - `published_status`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): CollectionConnection!

  """Returns the list of companies in the shop."""
  companies(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanySortKeys = ID

    """
    Supported filter parameters:
     - `active_customers_count`
     - `created_at`
     - `external_id`
     - `name`
     - `since_date`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyConnection!

  """Returns a `Company` object by ID."""
  company(
    """The ID of the Company to return."""
    id: ID!
  ): Company

  """Returns a `CompanyContact` object by ID."""
  companyContact(
    """The ID of the CompanyContact to return."""
    id: ID!
  ): CompanyContact

  """Returns a `CompanyContactRole` object by ID."""
  companyContactRole(
    """The ID of the CompanyContactRole to return."""
    id: ID!
  ): CompanyContactRole

  """The number of companies for a shop."""
  companyCount: Int!

  """Returns a `CompanyLocation` object by ID."""
  companyLocation(
    """The ID of the CompanyLocation to return."""
    id: ID!
  ): CompanyLocation

  """Returns the list of company locations in the shop."""
  companyLocations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CompanyLocationSortKeys = ID

    """
    Supported filter parameters:
     - `company_id`
     - `created_at`
     - `external_id`
     - `ids`
     - `name`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CompanyLocationConnection!

  """Return the AppInstallation for the currently authenticated App."""
  currentAppInstallation: AppInstallation!

  """
  Returns the current app's most recent BulkOperation. Apps can run one bulk
  query and one bulk mutation operation at a time, by shop.
  """
  currentBulkOperation(
    """The current bulk operation's type."""
    type: BulkOperationType = QUERY
  ): BulkOperation

  """Returns a Customer resource by ID."""
  customer(
    """The ID of the Customer to return."""
    id: ID!
  ): Customer

  """Returns a CustomerPaymentMethod resource by its ID."""
  customerPaymentMethod(
    """The ID of the CustomerPaymentMethod to return."""
    id: ID!

    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false
  ): CustomerPaymentMethod

  """
  The list of members, such as customers, that's associated with an individual segment.
  """
  customerSegmentMembers(
    """The ID of the segment."""
    segmentId: ID

    """
    The query that's used to filter the members. The query is composed of a
    combination of conditions on facts about customers such as
    `email_subscription_status = 'SUBSCRIBED'` with [this
    syntax](https://shopify.dev/api/shopifyql/segment-query-language-reference).
    """
    query: String

    """The ID of the segment members query."""
    queryId: ID

    """
    The timezone that's used to interpret relative date arguments. The timezone
    defaults to UTC if the timezone isn't provided.
    """
    timezone: String

    """
    Reverse the order of the list. The sorting behaviour defaults to ascending order.
    """
    reverse: Boolean = false

    """Sort the list by a given key."""
    sortKey: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): CustomerSegmentMemberConnection!

  """Returns a segment members query resource by ID."""
  customerSegmentMembersQuery(
    """The ID of the CustomerSegmentMembersQuery to return."""
    id: ID!
  ): CustomerSegmentMembersQuery

  """Whether a member, which is a customer, belongs to a segment."""
  customerSegmentMembership(
    """The segments to evaluate for the given customer."""
    segmentIds: [ID!]!

    """The ID of the customer that has the membership."""
    customerId: ID!
  ): SegmentMembershipResponse!

  """List of customers."""
  customers(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CustomerSortKeys = ID

    """
    Supported filter parameters:
     - `accepts_marketing`
     - `country`
     - `customer_date`
     - `email`
     - `last_abandoned_order_date`
     - `order_date`
     - `orders_count`
     - `phone`
     - `state`
     - `tag`
     - `tag_not`
     - `total_spent`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CustomerConnection!

  """The paginated list of deletion events."""
  deletionEvents(
    """List of subject types to filter by."""
    subjectTypes: [DeletionEventSubjectType!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DeletionEventSortKeys = ID

    """
    Supported filter parameters:
     - `occurred_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): DeletionEventConnection!

  """Returns a Delivery Profile resource by ID."""
  deliveryProfile(
    """The ID of the DeliveryProfile to return."""
    id: ID!
  ): DeliveryProfile

  """Returns a list of saved delivery profiles."""
  deliveryProfiles(
    """
    If `true`, returns only delivery profiles that were created by the merchant.
    """
    merchantOwnedOnly: Boolean

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): DeliveryProfileConnection!

  """Returns the shop-wide shipping settings."""
  deliverySettings: DeliverySetting

  """The total number of discount codes for the shop."""
  discountCodeCount(
    """
    Supported filter parameters:
     * times_used.
    """
    query: String
  ): Int!

  """Returns a discount resource by ID."""
  discountNode(
    """The ID of the DiscountNode to return."""
    id: ID!
  ): DiscountNode

  """List of discounts."""
  discountNodes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountSortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `combines_with`
       - Acceptable Values:
         - `PRODUCT_DISCOUNTS`
         - `ORDER_DISCOUNTS`
         - `SHIPPING_DISCOUNTS`
     - `discount_class`
       - Acceptable Values:
         - `PRODUCT`
         - `ORDER`
         - `SHIPPING`
     - `discount_type`
     - `method`
     - `starts_at`
     - `status`
     - `times_used`
     - `title`
     - `type`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DiscountNodeConnection!

  """Returns a bulk code creation resource by ID."""
  discountRedeemCodeBulkCreation(
    """The ID of the DiscountRedeemCodeBulkCreation to return."""
    id: ID!
  ): DiscountRedeemCodeBulkCreation

  """List of the shop's redeemed discount code saved searches."""
  discountRedeemCodeSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DiscountCodeSortKeys = ID

    """
    Supported filter parameters:
     - `times_used`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): SavedSearchConnection!

  """Returns dispute details based on ID."""
  dispute(
    """The ID of the ShopifyPaymentsDispute to return."""
    id: ID!
  ): ShopifyPaymentsDispute

  """Returns dispute evidence details based on ID."""
  disputeEvidence(
    """The ID of the ShopifyPaymentsDisputeEvidence to return."""
    id: ID!
  ): ShopifyPaymentsDisputeEvidence

  """Lookup a Domain by ID."""
  domain(
    """The ID of the Domain to return."""
    id: ID!
  ): Domain

  """Returns a DraftOrder resource by ID."""
  draftOrder(
    """The ID of the DraftOrder to return."""
    id: ID!
  ): DraftOrder

  """List of the shop's draft order saved searches."""
  draftOrderSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a DraftOrderTag resource by ID."""
  draftOrderTag(
    """The ID of the DraftOrderTag to return."""
    id: ID!
  ): DraftOrderTag

  """List of saved draft orders."""
  draftOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DraftOrderSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `customer_id`
     - `source`
     - `status`
     - `tag`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): DraftOrderConnection!

  """A list of the shop's file saved searches."""
  fileSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a paginated list of files that have been uploaded to Shopify."""
  files(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: FileSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `filename`
     - `media_type`
     - `original_upload_size`
     - `status`
     - `updated_at`
     - `used_in`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): FileConnection!

  """Returns a Fulfillment resource by ID."""
  fulfillment(
    """The ID of the Fulfillment to return."""
    id: ID!
  ): Fulfillment

  """Returns a Fulfillment order resource by ID."""
  fulfillmentOrder(
    """The ID of the FulfillmentOrder to return."""
    id: ID!
  ): FulfillmentOrder

  """
  The paginated list of all fulfillment orders.
  The returned fulfillment orders are filtered according to the
  [fulfillment order access scopes](https://shopify.dev/api/admin-graphql/latest/objects/fulfillmentorder#api-access-scopes)
  granted to the app.
  
  Use this query to retrieve fulfillment orders assigned to merchant-managed locations,
  third-party fulfillment service locations, or all kinds of locations together.
  
  For fetching only the fulfillment orders assigned to the app's locations, use the
  [Shop.assignedFulfillmentOrders](https://shopify.dev/api/admin-graphql/latest/objects/Shop#connection-shop-assignedfulfillmentorders)
  connection.
  """
  fulfillmentOrders(
    """Whether to include closed fulfillment orders."""
    includeClosed: Boolean = false

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: FulfillmentOrderSortKeys = ID

    """
    Supported filter parameters:
     - `assigned_location_id`
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): FulfillmentOrderConnection!

  """Returns a FulfillmentService resource by ID."""
  fulfillmentService(
    """The ID of the FulfillmentService to return."""
    id: ID!
  ): FulfillmentService

  """Returns a gift card resource by ID."""
  giftCard(
    """The ID of the GiftCard to return."""
    id: ID!
  ): GiftCard

  """Returns a list of gift cards."""
  giftCards(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: GiftCardSortKeys = ID

    """
    Supported filter parameters:
     - `balance_status`
     - `created_at`
     - `expires_on`
     - `initial_value`
     - `source`
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): GiftCardConnection!

  """The total number of gift cards issued for the shop."""
  giftCardsCount(
    """Whether to count enabled or disabled or all gift cards."""
    enabled: Boolean
  ): UnsignedInt64!

  """Returns an `InventoryItem` object by ID."""
  inventoryItem(
    """The ID of the InventoryItem to return."""
    id: ID!
  ): InventoryItem

  """Returns a list of inventory items."""
  inventoryItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `created_at`
     - `id`
     - `sku`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): InventoryItemConnection!

  """Returns an `InventoryLevel` object by ID."""
  inventoryLevel(
    """The ID of the InventoryLevel to return."""
    id: ID!
  ): InventoryLevel

  """General inventory properties for the shop."""
  inventoryProperties: InventoryProperties!

  """
  Returns a Job resource by ID. Used to check the status of internal jobs and any applicable changes.
  """
  job(
    """ID of the job to query."""
    id: ID!
  ): Job

  """Returns an inventory Location resource by ID."""
  location(
    """
    The ID of the location to return. If no ID is provided, the primary location of the Shop is returned.
    """
    id: ID
  ): Location

  """Returns a list of active inventory locations."""
  locations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: LocationSortKeys = NAME

    """
    Supported filter parameters:
     - `active`
     - `address1`
     - `address2`
     - `city`
     - `country`
     - `legacy`
     - `name`
     - `province`
     - `zip`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """If true, also include the legacy locations of fulfillment services."""
    includeLegacy: Boolean = false

    """If true, also include the locations that are deactivated."""
    includeInactive: Boolean = false
  ): LocationConnection!

  """
  Returns a list of all origin locations available for a delivery profile.
  """
  locationsAvailableForDeliveryProfiles: [Location!] @deprecated(reason: "Use `locationsAvailableForDeliveryProfilesConnection` instead.")

  """
  Returns a list of all origin locations available for a delivery profile.
  """
  locationsAvailableForDeliveryProfilesConnection(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): LocationConnection!

  """Returns a list of fulfillment orders that are on hold."""
  manualHoldsFulfillmentOrders(
    """
    The query conditions used to filter fulfillment orders. Only fulfillment
    orders corresponding to orders matching the query will be counted.
    Supported filter parameters:
     - `order_financial_status`
     - `order_risk_level`
     - `shipping_address_coordinates_validated`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): FulfillmentOrderConnection!

  """Returns a market resource by ID."""
  market(
    """The ID of the Market to return."""
    id: ID!
  ): Market

  """
  Returns the applicable market for a customer based on where they are in the world.
  """
  marketByGeography(
    """The code for the country where the customer is."""
    countryCode: CountryCode!
  ): Market

  """A resource that can have localized values for different markets."""
  marketLocalizableResource(
    """Find a market localizable resource by ID."""
    resourceId: ID!
  ): MarketLocalizableResource

  """Resources that can have localized values for different markets."""
  marketLocalizableResources(
    """Return only resources of a type."""
    resourceType: MarketLocalizableResourceType!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MarketLocalizableResourceConnection!

  """Resources that can have localized values for different markets."""
  marketLocalizableResourcesByIds(
    """Return only resources for given IDs."""
    resourceIds: [ID!]!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MarketLocalizableResourceConnection!

  """A list of marketing activities associated with the marketing app."""
  marketingActivities(
    """The list of marketing activity IDs to filter by."""
    marketingActivityIds: [ID!] = []

    """
    The list of remote IDs associated with marketing activities to filter by.
    """
    remoteIds: [String!] = []

    """The UTM parameters associated with marketing activities to filter by."""
    utm: UTMInput

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MarketingActivitySortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `app_id`
     - `app_name`
     - `created_at`
     - `marketing_campaign_id`
     - `scheduled_to_end_at`
     - `scheduled_to_start_at`
     - `tactic`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): MarketingActivityConnection!

  """Returns a MarketingActivity resource by ID."""
  marketingActivity(
    """The ID of the MarketingActivity to return."""
    id: ID!
  ): MarketingActivity

  """Returns a MarketingEvent resource by ID."""
  marketingEvent(
    """The ID of the MarketingEvent to return."""
    id: ID!
  ): MarketingEvent

  """A list of marketing events associated with the marketing app."""
  marketingEvents(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MarketingEventSortKeys = ID

    """
    Supported filter parameters:
     - `app_id`
     - `description`
     - `started_at`
     - `type`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MarketingEventConnection!

  """The markets configured for the shop."""
  markets(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MarketConnection!

  """Returns a metafield by ID."""
  metafield(
    """The ID of the Metafield to return."""
    id: ID!
  ): Metafield

  """Returns a metafield definition by ID."""
  metafieldDefinition(
    """The ID of the MetafieldDefinition to return."""
    id: ID!
  ): MetafieldDefinition

  """
  Each metafield definition has a type, which defines the type of information that it can store.
  This type is enforced across every instance of the resource that owns the metafield definition.
  
  Refer to the [list of supported metafield types](https://shopify.dev/apps/metafields/types).
  """
  metafieldDefinitionTypes: [MetafieldDefinitionType!]!

  """List of metafield definitions."""
  metafieldDefinitions(
    """Filter metafield definition by key."""
    key: String

    """Filter metafield definition by namespace."""
    namespace: String

    """Filter the metafield definition by the specific owner type."""
    ownerType: MetafieldOwnerType!

    """Filter the metafield definition by the pinned status."""
    pinnedStatus: MetafieldDefinitionPinnedStatus = ANY

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MetafieldDefinitionSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `key`
     - `namespace`
     - `owner_type`
     - `type`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetafieldDefinitionConnection!

  """List of the `MetafieldStorefrontVisibility` records."""
  metafieldStorefrontVisibilities(
    """Filter the visible metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldStorefrontVisibilityConnection!

  """
  Returns a `MetafieldStorefrontVisibility` record by ID. A `MetafieldStorefrontVisibility` record lists the
  metafields to make visible in the Storefront API.
  """
  metafieldStorefrontVisibility(
    """The ID of the MetafieldStorefrontVisibility to return."""
    id: ID!
  ): MetafieldStorefrontVisibility

  """Retrieves a metaobject by ID."""
  metaobject(
    """The ID of the metaobject to return."""
    id: ID!
  ): Metaobject

  """Retrieves a metaobject by handle."""
  metaobjectByHandle(
    """The identifier of the metaobject to return."""
    handle: MetaobjectHandleInput!
  ): Metaobject

  """Retrieves a metaobject definition by ID."""
  metaobjectDefinition(
    """The ID of the metaobject to return."""
    id: ID!
  ): MetaobjectDefinition

  """Finds a metaobject definition by type."""
  metaobjectDefinitionByType(
    """The type of the metaobject definition to return."""
    type: String!
  ): MetaobjectDefinition

  """All metaobject definitions."""
  metaobjectDefinitions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetaobjectDefinitionConnection!

  """All metaobjects for the shop."""
  metaobjects(
    """The type of the metaobjects to query."""
    type: String!

    """
    The key of a field to sort with. Supports "id", "type", "updated_at", and "display_name".
    """
    sortKey: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `display_name`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MetaobjectConnection!

  """
  Returns a specific node (any object that implements the
  [Node](https://shopify.dev/api/admin-graphql/latest/interfaces/Node)
  interface) by ID, in accordance with the
  [Relay specification](https://relay.dev/docs/guides/graphql-server-specification/#object-identification).
  This field is commonly used for refetching an object.
  """
  node(
    """The ID of the Node to return."""
    id: ID!
  ): Node

  """
  Returns the list of nodes (any objects that implement the
  [Node](https://shopify.dev/api/admin-graphql/latest/interfaces/Node)
  interface) with the given IDs, in accordance with the
  [Relay specification](https://relay.dev/docs/guides/graphql-server-specification/#object-identification).
  """
  nodes(
    """The IDs of the Nodes to return."""
    ids: [ID!]!
  ): [Node]!

  """Returns an Order resource by ID."""
  order(
    """The ID of the Order to return."""
    id: ID!
  ): Order

  """
  Returns a payment status by payment reference ID. Used to check the status of a deferred payment.
  """
  orderPaymentStatus(
    """Unique identifier returned by orderCreatePayment."""
    paymentReferenceId: String!

    """ID of the order for which the payment was initiated."""
    orderId: ID!
  ): OrderPaymentStatus

  """List of the shop's order saved searches."""
  orderSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a list of orders placed."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = PROCESSED_AT

    """
    Supported filter parameters:
     - `cart_token`
     - `channel`
     - `channel_id`
     - `chargeback_status`
     - `checkout_token`
     - `confirmation_number`
     - `created_at`
     - `credit_card_last4`
     - `customer_id`
     - `delivery_method`
     - `discount_code`
     - `earliest_fulfill_by`
     - `email`
     - `financial_status`
     - `fraud_protection_level`
     - `fulfillment_location_id`
     - `fulfillment_status`
     - `gateway`
     - `location_id`
     - `name`
     - `payment_id`
     - `payment_provider_id`
     - `po_number`
     - `processed_at`
     - `reference_location_id`
     - `return_status`
     - `risk_level`
     - `sales_channel`
     - `sku`
     - `source_identifier`
     - `source_name`
     - `status`
     - `tag`
     - `tag_not`
     - `test`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): OrderConnection!

  """The list of payment terms templates eligible for all shops and users."""
  paymentTermsTemplates(
    """The payment terms type to filter the payment terms templates list."""
    paymentTermsType: PaymentTermsType
  ): [PaymentTermsTemplate!]!

  """Returns a price list resource by ID."""
  priceList(
    """The ID of the `PriceList` to return."""
    id: ID!
  ): PriceList

  """All price lists for a shop."""
  priceLists(
    """The context that the price list applies to."""
    matchRule: PriceListContext

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: PriceListSortKeys = ID
  ): PriceListConnection!

  """Returns a code price rule resource by ID."""
  priceRule(
    """The ID of the PriceRule to return."""
    id: ID!
  ): PriceRule @deprecated(reason: "Use `codeDiscountNode` instead.")

  """List of the shop's price rule saved searches."""
  priceRuleSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """
  Returns a list of price rule resources that have at least one associated discount code.
  """
  priceRules(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: PriceRuleSortKeys = ID

    """
    Supported filter parameters:
     - `combines_with`
     - `created_at`
     - `discount_type`
     - `ends_at`
     - `starts_at`
     - `status`
     - `times_used`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): PriceRuleConnection! @deprecated(reason: "Use `codeDiscountNodes` instead.")

  """The primary market of the shop."""
  primaryMarket: Market!

  """
  Returns a private metafield by ID.
  Private metafields are accessible only by the application that created them.
  """
  privateMetafield(
    """The ID of the PrivateMetafield to return."""
    id: ID!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """Returns a list of private metafields associated to a resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """
    Retrieve the private metafields of a certain resource, specified by the resource ID.
    """
    owner: ID!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """Returns a Product resource by ID."""
  product(
    """The ID of the Product to return."""
    id: ID!
  ): Product

  """Return a product by its handle."""
  productByHandle(
    """
    A unique string that identifies the product. Handles are automatically
    generated based on the product's title, and are always lowercase. Whitespace
    and special characters are replaced with a hyphen: `-`. If there are
    multiple consecutive whitespace or special characters, then they're replaced
    with a single hyphen. Whitespace or special characters at the beginning are
    removed. If a duplicate product title is used, then the handle is
    auto-incremented by one. For example, if you had two products called
    `Potion`, then their handles would be `potion` and `potion-1`. After a
    product has been created, changing the product title doesn't update the handle.
    """
    handle: String!
  ): Product

  """
  Returns the product resource feedback for the currently authenticated app.
  """
  productResourceFeedback(
    """The product associated with the resource feedback."""
    id: ID!
  ): ProductResourceFeedback

  """Returns a list of the shop's product saved searches."""
  productSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """Returns a ProductVariant resource by ID."""
  productVariant(
    """The ID of the ProductVariant to return."""
    id: ID!
  ): ProductVariant

  """List of the product variants."""
  productVariants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductVariantSortKeys = ID

    """
    Supported filter parameters:
     - `barcode`
     - `collection`
     - `delivery_profile_id`
     - `exclude_composite`
     - `exclude_variants_with_components`
     - `gift_card`
     - `inventory_quantity`
     - `location_id`
     - `managed`
     - `managed_by`
     - `option1`
     - `option2`
     - `option3`
     - `product_id`
     - `product_ids`
     - `product_publication_status`
     - `product_status`
     - `product_type`
     - `publishable_status`
     - `published_status`
     - `requires_components`
     - `sku`
     - `tag`
     - `tag_not`
     - `taxable`
     - `title`
     - `updated_at`
     - `vendor`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): ProductVariantConnection!

  """List of products."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductSortKeys = ID

    """
    Supported filter parameters:
     - `barcode`
     - `bundles`
     - `created_at`
     - `delivery_profile_id`
     - `error_feedback`
     - `gift_card`
     - `has_only_composites`
     - `has_only_default_variant`
     - `has_variant_with_components`
     - `id`
     - `inventory_total`
     - `is_price_reduced`
     - `out_of_stock_somewhere`
     - `price`
     - `product_configuration_owner`
     - `product_publication_status`
     - `product_type`
     - `publishable_status`
     - `published_status`
     - `sku`
     - `status`
     - `tag`
     - `tag_not`
     - `title`
     - `updated_at`
     - `vendor`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): ProductConnection!

  """
  The list of publicly-accessible Admin API versions, including supported
  versions, the release candidate, and unstable versions.
  """
  publicApiVersions: [ApiVersion!]!

  """Lookup a publication by ID."""
  publication(
    """The ID of the Publication to return."""
    id: ID!
  ): Publication

  """List of publications."""
  publications(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PublicationConnection!

  """Returns a Refund resource by ID."""
  refund(
    """The ID of the Refund to return."""
    id: ID!
  ): Refund

  """Returns a Return resource by ID."""
  return(
    """The ID of the Return to return."""
    id: ID!
  ): Return

  """Lookup a returnable fulfillment by ID."""
  returnableFulfillment(
    """The ID of the ReturnableFulfillment to return."""
    id: ID!
  ): ReturnableFulfillment

  """List of returnable fulfillments."""
  returnableFulfillments(
    """Order ID that will scope all returnable fulfillments."""
    orderId: ID!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReturnableFulfillmentConnection!

  """Lookup a reverse delivery by ID."""
  reverseDelivery(
    """The ID of the ReverseDelivery to return."""
    id: ID!
  ): ReverseDelivery

  """Lookup a reverse fulfillment order by ID."""
  reverseFulfillmentOrder(
    """The ID of the reverse fulfillment order to return."""
    id: ID!
  ): ReverseFulfillmentOrder

  """
  <div class="note"><h4>Theme app extensions</h4>
    <p>Your app might not pass App Store review if it uses script tags instead of
  theme app extensions. All new apps, and apps that integrate with Online Store
  2.0 themes, should use theme app extensions, such as app blocks or app embed
  blocks. Script tags are an alternative you can use with only vintage themes.
  <a href="/apps/online-store#what-integration-method-should-i-use"
  target="_blank">Learn more</a>.</p></div>
  
  
  Lookup a script tag resource by ID.
  """
  scriptTag(
    """The ID of the ScriptTag to return."""
    id: ID!
  ): ScriptTag

  """
  <div class="note"><h4>Theme app extensions</h4>
    <p>Your app might not pass App Store review if it uses script tags instead of
  theme app extensions. All new apps, and apps that integrate with Online Store
  2.0 themes, should use theme app extensions, such as app blocks or app embed
  blocks. Script tags are an alternative you can use with only vintage themes.
  <a href="/apps/online-store#what-integration-method-should-i-use"
  target="_blank">Learn more</a>.</p></div>
  
  
  A list of script tags.
  """
  scriptTags(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """The source URL of the script tag to filter by."""
    src: URL
  ): ScriptTagConnection!

  """The Customer Segment."""
  segment(
    """Find a segment by ID."""
    id: ID!
  ): Segment

  """The number of segments for a shop."""
  segmentCount: Int!

  """
  A list of filter suggestions associated with a segment. A segment is a group
  of members (commonly customers) that meet specific criteria.
  """
  segmentFilterSuggestions(
    """Returns the elements of a list by keyword or term."""
    search: String!

    """Returns up to the first `n` elements from the list."""
    first: Int!

    """Returns the elements that come after the specified cursor."""
    after: String
  ): SegmentFilterConnection!

  """A list of filters."""
  segmentFilters(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): SegmentFilterConnection!

  """A list of a shop's segment migrations."""
  segmentMigrations(
    """Search a segment migration by its saved search ID."""
    savedSearchId: ID

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): SegmentMigrationConnection!

  """
  The list of suggested values corresponding to a particular filter for a
  segment. A segment is a group of members, such as customers, that meet
  specific criteria.
  """
  segmentValueSuggestions(
    """Returns the elements of a list by keyword or term."""
    search: String!

    """Returns the elements of a list by filter handle."""
    filterQueryName: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String
  ): SegmentValueConnection!

  """A list of a shop's segments."""
  segments(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: SegmentSortKeys = CREATION_DATE

    """
    Supported filter parameters:
     - `name`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): SegmentConnection!

  """Returns a Selling Plan Group resource by ID."""
  sellingPlanGroup(
    """The ID of the SellingPlanGroup to return."""
    id: ID!
  ): SellingPlanGroup

  """List Selling Plan Groups."""
  sellingPlanGroups(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: SellingPlanGroupSortKeys = ID

    """
    Supported filter parameters:
     - `app_id`
       - Acceptable Values:
         - `CURRENT`
         - `ALL`
         - `App ID number`
       - Default Value: `CURRENT`
     - `category`
       - Acceptable Values:
         - `SUBSCRIPTION`
         - `PRE_ORDER`
         - `TRY_BEFORE_YOU_BUY`
         - `OTHER`
     - `created_at`
     - `delivery_frequency`
     - `name`
     - `percentage_off`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): SellingPlanGroupConnection!

  """
  Returns the Shop resource corresponding to the access token used in the request. The Shop resource contains
  business and store management settings for the shop.
  """
  shop: Shop!

  """A list of locales available on a shop."""
  shopLocales(
    """Return only published locales."""
    published: Boolean = false
  ): [ShopLocale!]!

  """Shopify Payments account information, including balances and payouts."""
  shopifyPaymentsAccount: ShopifyPaymentsAccount

  """
  Returns the results of a ShopifyQL query. Refer to the [ShopifyQL
  documentation](https://shopify.dev/api/shopifyql) for more information.
  """
  shopifyqlQuery(
    """A ShopifyQL query."""
    query: String!
  ): ShopifyqlResponse

  """The StaffMember resource, by ID."""
  staffMember(
    """
    The ID of the staff member to return. If no ID is provided, then the staff member making the query (if any) is returned.
    """
    id: ID
  ): StaffMember

  """
  Standard metafield definitions are intended for specific, common use cases.
  Their namespace and keys reflect these use cases and are reserved.
  
  Refer to all available [`Standard Metafield Definition Templates`](https://shopify.dev/api/admin-graphql/latest/objects/StandardMetafieldDefinitionTemplate).
  """
  standardMetafieldDefinitionTemplates(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): StandardMetafieldDefinitionTemplateConnection!

  """Returns a SubscriptionBillingAttempt by ID."""
  subscriptionBillingAttempt(
    """The ID of the SubscriptionBillingAttempt to return."""
    id: ID!
  ): SubscriptionBillingAttempt

  """
  Returns a subscription billing cycle found either by cycle index or date.
  """
  subscriptionBillingCycle(
    """Input object used to select and use billing cycles."""
    billingCycleInput: SubscriptionBillingCycleInput!
  ): SubscriptionBillingCycle

  """Returns subscription billing cycles for a contract ID."""
  subscriptionBillingCycles(
    """The ID of the subscription contract to retrieve billing cycles for."""
    contractId: ID!

    """Select subscription billing cycles within a date range."""
    billingCyclesDateRangeSelector: SubscriptionBillingCyclesDateRangeSelector

    """Select subscription billing cycles within an index range."""
    billingCyclesIndexRangeSelector: SubscriptionBillingCyclesIndexRangeSelector

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: SubscriptionBillingCyclesSortKeys = CYCLE_INDEX
  ): SubscriptionBillingCycleConnection!

  """Returns a Subscription Contract resource by ID."""
  subscriptionContract(
    """The ID of the Subscription Contract to return."""
    id: ID!
  ): SubscriptionContract

  """List Subscription Contracts."""
  subscriptionContracts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionContractConnection!

  """Returns a Subscription Draft resource by ID."""
  subscriptionDraft(
    """The ID of the Subscription Draft to return."""
    id: ID!
  ): SubscriptionDraft

  """Returns a list of TenderTransactions associated with the shop."""
  tenderTransactions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `point_of_sale_device_id`
     - `processed_at`
     - `test`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): TenderTransactionConnection!

  """A resource that can have localized values for different languages."""
  translatableResource(
    """Find a translatable resource by ID."""
    resourceId: ID!
  ): TranslatableResource

  """Resources that can have localized values for different languages."""
  translatableResources(
    """Return only resources of a type."""
    resourceType: TranslatableResourceType!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): TranslatableResourceConnection!

  """Resources that can have localized values for different languages."""
  translatableResourcesByIds(
    """Return only resources for given IDs."""
    resourceIds: [ID!]!

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): TranslatableResourceConnection!

  """Returns a redirect resource by ID."""
  urlRedirect(
    """The ID of the UrlRedirect to return."""
    id: ID!
  ): UrlRedirect

  """Returns a redirect import resource by ID."""
  urlRedirectImport(
    """The ID of the UrlRedirectImport to return."""
    id: ID!
  ): UrlRedirectImport

  """A list of the shop's URL redirect saved searches."""
  urlRedirectSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection!

  """A list of redirects for a shop."""
  urlRedirects(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: UrlRedirectSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `path`
     - `target`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): UrlRedirectConnection!

  """The web pixel configured by the app."""
  webPixel(
    """Returns a web pixel by ID."""
    id: ID!
  ): WebPixel

  """Returns a webhook subscription by ID."""
  webhookSubscription(
    """The ID of the WebhookSubscription to return."""
    id: ID!
  ): WebhookSubscription

  """Returns a list of webhook subscriptions."""
  webhookSubscriptions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: WebhookSubscriptionSortKeys = CREATED_AT

    """
    Supported filter parameters:
     - `created_at`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """Callback URL to filter by."""
    callbackUrl: URL

    """Response format to filter by."""
    format: WebhookSubscriptionFormat

    """List of webhook subscription topics to filter by."""
    topics: [WebhookSubscriptionTopic!]
  ): WebhookSubscriptionConnection!
}

"""
The record of the line items and transactions that were refunded to a customer,
along with restocking instructions for refunded line items.
"""
type Refund implements LegacyInteroperability & Node {
  """The date and time when the refund was created."""
  createdAt: DateTime

  """A list of the refunded duties as part of this refund."""
  duties: [RefundDuty!]

  """A globally-unique ID."""
  id: ID!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The optional note associated with the refund."""
  note: String

  """The order associated with the refund."""
  order: Order!

  """The `RefundLineItem` resources attached to the refund."""
  refundLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): RefundLineItemConnection!

  """The return associated with the refund."""
  return: Return

  """The staff member who created the refund."""
  staffMember: StaffMember

  """The total amount across all transactions for the refund."""
  totalRefunded: MoneyV2! @deprecated(reason: "Use `totalRefundedSet` instead.")

  """
  The total amount across all transactions for the refund, in shop and presentment currencies.
  """
  totalRefundedSet: MoneyBag!

  """The transactions associated with the refund."""
  transactions(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): OrderTransactionConnection!

  """The date and time when the refund was updated."""
  updatedAt: DateTime!
}

"""
An agreement between the merchant and customer to refund all or a portion of the order.
"""
type RefundAgreement implements SalesAgreement {
  """The application that created the agreement."""
  app: App

  """The date and time at which the agreement occured."""
  happenedAt: DateTime!

  """The unique ID for the agreement."""
  id: ID!

  """The reason the agremeent was created."""
  reason: OrderActionType!

  """The refund associated with the agreement."""
  refund: Refund!

  """The sales associated with the agreement."""
  sales(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SaleConnection!

  """The staff member associated with the agreement."""
  user: StaffMember
}

"""An auto-generated type for paginating through multiple Refunds."""
type RefundConnection {
  """A list of edges."""
  edges: [RefundEdge!]!

  """A list of the nodes contained in RefundEdge."""
  nodes: [Refund!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `refundCreate` mutation."""
type RefundCreatePayload {
  """The order associated with the created refund."""
  order: Order

  """The created refund."""
  refund: Refund

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Represents a refunded duty."""
type RefundDuty {
  """The amount of a refunded duty in shop and presentment currencies."""
  amountSet: MoneyBag!

  """The duty associated with this refunded duty."""
  originalDuty: Duty
}

"""The input fields required to reimburse duties on a refund."""
input RefundDutyInput {
  """The ID of the duty in the refund."""
  dutyId: ID!

  """The type of refund for this duty."""
  refundType: RefundDutyRefundType
}

"""The type of refund to perform for a particular refund duty."""
enum RefundDutyRefundType {
  """
  The duty is proportionally refunded based on the quantity of the refunded line item.
  """
  PROPORTIONAL

  """The duty is fully refunded."""
  FULL
}

"""
An auto-generated type which holds one Refund and a cursor during pagination.
"""
type RefundEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of RefundEdge."""
  node: Refund!
}

"""The input fields to create a refund."""
input RefundInput {
  """
  The currency that is used to refund the order. This must be the presentment
  currency, which is the currency used by the customer. This is a required field
  for orders where the currency and presentment currency differ.
  """
  currency: CurrencyCode

  """The ID of the order that's being refunded."""
  orderId: ID!

  """An optional note that's attached to the refund."""
  note: String

  """Whether to send a refund notification to the customer."""
  notify: Boolean

  """The input fields that are required to reimburse shipping costs."""
  shipping: ShippingRefundInput

  """A list of line items to refund."""
  refundLineItems: [RefundLineItemInput!]

  """A list of duties to refund."""
  refundDuties: [RefundDutyInput!]

  """A list of transactions involved in the refund."""
  transactions: [OrderTransactionInput!]
}

"""A line item that's included in a refund."""
type RefundLineItem {
  """The `LineItem` resource associated to the refunded line item."""
  lineItem: LineItem!

  """The inventory restock location."""
  location: Location

  """The price of a refunded line item."""
  price: Money! @deprecated(reason: "Use `priceSet` instead.")

  """The price of a refunded line item in shop and presentment currencies."""
  priceSet: MoneyBag!

  """The quantity of a refunded line item."""
  quantity: Int!

  """The type of restock for the refunded line item."""
  restockType: RefundLineItemRestockType!

  """
  Whether the refunded line item was restocked. Not applicable in the context of a SuggestedRefund.
  """
  restocked: Boolean!

  """The subtotal price of a refunded line item."""
  subtotal: Money! @deprecated(reason: "Use `subtotalSet` instead.")

  """
  The subtotal price of a refunded line item in shop and presentment currencies.
  """
  subtotalSet: MoneyBag!

  """The total tax charged on a refunded line item."""
  totalTax: Money! @deprecated(reason: "Use `totalTaxSet` instead.")

  """
  The total tax charged on a refunded line item in shop and presentment currencies.
  """
  totalTaxSet: MoneyBag!
}

"""
An auto-generated type for paginating through multiple RefundLineItems.
"""
type RefundLineItemConnection {
  """A list of edges."""
  edges: [RefundLineItemEdge!]!

  """A list of the nodes contained in RefundLineItemEdge."""
  nodes: [RefundLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one RefundLineItem and a cursor during pagination.
"""
type RefundLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of RefundLineItemEdge."""
  node: RefundLineItem!
}

"""The input fields required to reimburse line items on a refund."""
input RefundLineItemInput {
  """The ID of the line item in the refund."""
  lineItemId: ID!

  """The quantity of the associated line item to be refunded."""
  quantity: Int!

  """The type of restock for this line item."""
  restockType: RefundLineItemRestockType

  """
  The intended location for restocking. If the `restockType` is set to `NO_RESTOCK`, then this value is empty.`
  """
  locationId: ID
}

"""The type of restock performed for a particular refund line item."""
enum RefundLineItemRestockType {
  """
  The refund line item was returned. Use this when restocking line items that were fulfilled.
  """
  RETURN

  """
  The refund line item was canceled. Use this when restocking unfulfilled line items.
  """
  CANCEL

  """
  Deprecated. The refund line item was restocked, without specifically
  beingidentified as a return or cancelation. This value is not accepted when
  creating new refunds.
  """
  LEGACY_RESTOCK

  """Refund line item was not restocked."""
  NO_RESTOCK
}

"""The input fields for the shipping cost to refund."""
input RefundShippingInput {
  """
  The input fields required to refund shipping cost, in the presentment currency of the order.
  This overrides the `fullRefund` argument.
  """
  shippingRefundAmount: MoneyInput

  """Whether to refund the full shipping amount."""
  fullRefund: Boolean = false
}

"""The input fields for a remote Authorize.net customer payment profile."""
input RemoteAuthorizeNetCustomerPaymentProfileInput {
  """The customerProfileId value from the Authorize.net API."""
  customerProfileId: String!

  """The customerPaymentProfileId value from the Authorize.net API."""
  customerPaymentProfileId: String
}

"""The input fields for a remote Braintree customer payment profile."""
input RemoteBraintreePaymentMethodInput {
  """The `customer_id` value from the Braintree API."""
  customerId: String!

  """The `payment_method_token` value from the Braintree API."""
  paymentMethodToken: String
}

"""The input fields for a remote stripe payment method."""
input RemoteStripePaymentMethodInput {
  """The customer_id value from the Stripe API."""
  customerId: String!

  """The payment_method_id value from the Stripe API."""
  paymentMethodId: String
}

"""
An alert message that appears in the Shopify admin about a problem with a store
resource, with 1 or more actions to take. For example, you could use an alert to
indicate that you're not charging taxes on some product variants.
They can optionally have a specific icon and be dismissed by merchants.
"""
type ResourceAlert {
  """
  Buttons in the alert that link to related information.
  For example, _Edit variants_.
  """
  actions: [ResourceAlertAction!]!

  """
  The secondary text in the alert that includes further information or instructions about how to solve a problem.
  """
  content: HTML!

  """
  Unique identifier that appears when an alert is manually closed by the merchant.
  Most alerts can't be manually closed.
  """
  dismissibleHandle: String

  """An icon that's optionally displayed with the alert."""
  icon: ResourceAlertIcon

  """Indication of how important the alert is."""
  severity: ResourceAlertSeverity!

  """
  The primary text in the alert that includes information or describes the problem.
  """
  title: String!
}

"""An action associated to a resource alert, such as editing variants."""
type ResourceAlertAction {
  """Whether the action appears as a button or as a link."""
  primary: Boolean!

  """Resource for the action to show."""
  show: String

  """The text for the button in the alert. For example, _Edit variants_."""
  title: String!

  """The target URL that the button links to."""
  url: URL!
}

"""The available icons for resource alerts."""
enum ResourceAlertIcon {
  """A checkmark inside a circle."""
  CHECKMARK_CIRCLE

  """A lowercase `i` inside a circle."""
  INFORMATION_CIRCLE
}

"""The possible severity levels for a resource alert."""
enum ResourceAlertSeverity {
  """Indicates a neutral alert. For example, an accepted dispute."""
  DEFAULT

  """Indicates an informative alert. For example, an escalated dispute."""
  INFO

  """Indicates an informative alert. For example, a new dispute."""
  WARNING

  """Indicates a success alert. For example, a winning a dispute."""
  SUCCESS

  """Indicates a critical alert. For example, a blocked app."""
  CRITICAL
  ERROR @deprecated(reason: "`ERROR` severity is being deprecated in favour of `WARNING` or `CRITICAL` instead.")
}

"""
Represents feedback from apps about a resource, and the steps required to set up the apps on the shop.
"""
type ResourceFeedback {
  """
  Feedback from an app about the steps a merchant needs to take to set up the app on their store.
  """
  appFeedback: [AppFeedback!]! @deprecated(reason: "Use `details` instead.")

  """List of AppFeedback detailing issues regarding a resource."""
  details: [AppFeedback!]!

  """Summary of resource feedback pertaining to the resource."""
  summary: String!
}

"""The input fields for a resource feedback object."""
input ResourceFeedbackCreateInput {
  """
  The date and time when the feedback was generated. Used to help determine whether
  incoming feedback is outdated compared to existing feedback.
  """
  feedbackGeneratedAt: DateTime!

  """
  If the feedback state is `requires_action`, then you can send a string message
  that communicates the action to be taken by the merchant.
  The string must be a single message up to 100 characters long and must end with a period.
  You need to adhere to the message formatting rules or your requests will fail:
  - `[Explanation of the problem]. [Suggested action].`
  
  **Examples:**
  - `[Your app name]` isn't connected. Connect your account to use this sales channel. `[Learn more]`
  - `[Your app name]` isn't configured. Agree to the terms and conditions to use this app. `[Learn more]`
  Both `Your app name` and `Learn more` (a button which directs merchants to
  your app) are automatically populated in the Shopify admin.
  """
  messages: [String!]

  """The state of the feedback and whether it requires merchant action."""
  state: ResourceFeedbackState!
}

"""The state of the resource feedback."""
enum ResourceFeedbackState {
  """No action required from merchant."""
  ACCEPTED

  """The merchant needs to resolve an issue with the resource."""
  REQUIRES_ACTION
}

"""A resource limit represents the limits that the resource has."""
type ResourceLimit {
  """Whether the resource is available."""
  available: Boolean!

  """Quantity available. If null the quantity available is unlimited."""
  quantityAvailable: Int

  """Quantity limit of the resource. If null the quantity is unlimited."""
  quantityLimit: Int

  """
  Quantity used of the resource. If null the quantity used can't be retrieved.
  """
  quantityUsed: Int
}

"""
A resource publication represents information about the publication of a resource.
An instance of `ResourcePublication`, unlike `ResourcePublicationV2`, can be neither published or scheduled to be published.

See [ResourcePublicationV2](/api/admin-graphql/latest/objects/ResourcePublicationV2) for more context.
"""
type ResourcePublication {
  """The channel the resource publication is published to."""
  channel: Channel! @deprecated(reason: "Use `publication` instead.")

  """
  Whether the resource publication is published. Also returns true if the resource publication is scheduled to be published.
  If false, then the resource publication is neither published nor scheduled to be published.
  """
  isPublished: Boolean!

  """The publication the resource publication is published to."""
  publication: Publication!

  """
  The date that the resource publication was or is going to be published to the publication.
  If the product isn't published, then this field returns an epoch timestamp.
  """
  publishDate: DateTime!

  """The resource published to the publication."""
  publishable: Publishable!
}

"""
An auto-generated type for paginating through multiple ResourcePublications.
"""
type ResourcePublicationConnection {
  """A list of edges."""
  edges: [ResourcePublicationEdge!]!

  """A list of the nodes contained in ResourcePublicationEdge."""
  nodes: [ResourcePublication!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ResourcePublication and a cursor during pagination.
"""
type ResourcePublicationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ResourcePublicationEdge."""
  node: ResourcePublication!
}

"""
A resource publication represents information about the publication of a resource.
Unlike `ResourcePublication`, an instance of `ResourcePublicationV2` can't be
unpublished. It must either be published or scheduled to be published.

See [ResourcePublication](/api/admin-graphql/latest/objects/ResourcePublication) for more context.
"""
type ResourcePublicationV2 {
  """
  Whether the resource publication is published. If true, then the resource publication is published to the publication.
  If false, then the resource publication is staged to be published to the publication.
  """
  isPublished: Boolean!

  """The publication the resource publication is published to."""
  publication: Publication!

  """
  The date that the resource publication was or is going to be published to the publication.
  """
  publishDate: DateTime

  """The resource published to the publication."""
  publishable: Publishable!
}

"""
An auto-generated type for paginating through multiple ResourcePublicationV2s.
"""
type ResourcePublicationV2Connection {
  """A list of edges."""
  edges: [ResourcePublicationV2Edge!]!

  """A list of the nodes contained in ResourcePublicationV2Edge."""
  nodes: [ResourcePublicationV2!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ResourcePublicationV2 and a cursor during pagination.
"""
type ResourcePublicationV2Edge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ResourcePublicationV2Edge."""
  node: ResourcePublicationV2!
}

"""Represents a return."""
type Return implements Node {
  """Additional information about the declined return."""
  decline: ReturnDecline

  """A globally-unique ID."""
  id: ID!

  """The name of the return."""
  name: String!

  """The order that the return belongs to."""
  order: Order!

  """The list of refunds associated with the return."""
  refunds(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): RefundConnection!

  """The return line items attached to the return."""
  returnLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReturnLineItemConnection!

  """The list of reverse fulfillment orders for the return."""
  reverseFulfillmentOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReverseFulfillmentOrderConnection!

  """The status of the return."""
  status: ReturnStatus!

  """A suggested refund for the return."""
  suggestedRefund(
    """The line items from the return to include in the refund."""
    returnRefundLineItems: [ReturnRefundLineItemInput!]!

    """
    The shipping amount from the associated order to include in the refund.
    """
    refundShipping: RefundShippingInput

    """The duties from to associated order to include in the refund."""
    refundDuties: [RefundDutyInput!]
  ): SuggestedReturnRefund

  """The sum of all line item quantities for the return."""
  totalQuantity: Int!
}

"""
A returnable fulfillment, which is an order that has been delivered
and is eligible to be returned to the merchant.
"""
type ReturnableFulfillment implements Node {
  """The fulfillment that the returnable fulfillment refers to."""
  fulfillment: Fulfillment!

  """The unique ID of the Returnable Fulfillment."""
  id: ID!

  """The list of returnable fulfillment line items."""
  returnableFulfillmentLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReturnableFulfillmentLineItemConnection!
}

"""
An auto-generated type for paginating through multiple ReturnableFulfillments.
"""
type ReturnableFulfillmentConnection {
  """A list of edges."""
  edges: [ReturnableFulfillmentEdge!]!

  """A list of the nodes contained in ReturnableFulfillmentEdge."""
  nodes: [ReturnableFulfillment!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ReturnableFulfillment and a cursor during pagination.
"""
type ReturnableFulfillmentEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReturnableFulfillmentEdge."""
  node: ReturnableFulfillment!
}

"""A returnable fulfillment line item."""
type ReturnableFulfillmentLineItem {
  """The fulfillment line item that can be returned."""
  fulfillmentLineItem: FulfillmentLineItem!

  """The quantity available to be returned."""
  quantity: Int!
}

"""
An auto-generated type for paginating through multiple ReturnableFulfillmentLineItems.
"""
type ReturnableFulfillmentLineItemConnection {
  """A list of edges."""
  edges: [ReturnableFulfillmentLineItemEdge!]!

  """A list of the nodes contained in ReturnableFulfillmentLineItemEdge."""
  nodes: [ReturnableFulfillmentLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ReturnableFulfillmentLineItem and a cursor during pagination.
"""
type ReturnableFulfillmentLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReturnableFulfillmentLineItemEdge."""
  node: ReturnableFulfillmentLineItem!
}

"""The input fields for approving a customer's return request."""
input ReturnApproveRequestInput {
  """The ID of the return that's being approved."""
  id: ID!
}

"""Return type for `returnApproveRequest` mutation."""
type ReturnApproveRequestPayload {
  """The approved return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""Return type for `returnCancel` mutation."""
type ReturnCancelPayload {
  """The canceled return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""Return type for `returnClose` mutation."""
type ReturnClosePayload {
  """The closed return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""An auto-generated type for paginating through multiple Returns."""
type ReturnConnection {
  """A list of edges."""
  edges: [ReturnEdge!]!

  """A list of the nodes contained in ReturnEdge."""
  nodes: [Return!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `returnCreate` mutation."""
type ReturnCreatePayload {
  """The created return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""
Additional information about why a merchant declined the customer's return request.
"""
type ReturnDecline {
  """
  The notification message sent to the customer about their declined return request.
  Maximum length: 500 characters.
  """
  note: String

  """The reason the customer's return request was declined."""
  reason: ReturnDeclineReason!
}

"""The reason why the merchant declined a customer's return request."""
enum ReturnDeclineReason {
  """The return period has ended."""
  RETURN_PERIOD_ENDED

  """The return contains final sale items."""
  FINAL_SALE

  """The return is declined for another reason."""
  OTHER
}

"""The input fields for declining a customer's return request."""
input ReturnDeclineRequestInput {
  """The ID of the return that's being declined."""
  id: ID!

  """The reason why the merchant declined the customer's return request."""
  declineReason: ReturnDeclineReason!
}

"""Return type for `returnDeclineRequest` mutation."""
type ReturnDeclineRequestPayload {
  """The declined return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""
An auto-generated type which holds one Return and a cursor during pagination.
"""
type ReturnEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReturnEdge."""
  node: Return!
}

"""Possible error codes that can be returned by `ReturnUserError`."""
enum ReturnErrorCode {
  """Unexpected internal error happened."""
  INTERNAL_ERROR

  """Too many arguments provided."""
  TOO_MANY_ARGUMENTS

  """The input value is blank."""
  BLANK

  """The input value should be equal to the value allowed."""
  EQUAL_TO

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN

  """
  The input value should be greater than or equal to the minimum value allowed.
  """
  GREATER_THAN_OR_EQUAL_TO

  """The input value isn't included in the list."""
  INCLUSION

  """The input value is invalid."""
  INVALID

  """The input value should be less than the maximum value allowed."""
  LESS_THAN

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value is not a number."""
  NOT_A_NUMBER

  """The input value needs to be blank."""
  PRESENT

  """The input value is already taken."""
  TAKEN

  """The input value is too big."""
  TOO_BIG

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The input value is the wrong length."""
  WRONG_LENGTH

  """The requested resource already exists."""
  ALREADY_EXISTS

  """A requested resource could not be created."""
  CREATION_FAILED

  """A required feature is not enabled."""
  FEATURE_NOT_ENABLED

  """A resource was not in the correct state for the operation to succeed."""
  INVALID_STATE

  """A requested notification could not be sent."""
  NOTIFICATION_FAILED

  """A requested item is not editable."""
  NOT_EDITABLE

  """A requested item could not be found."""
  NOT_FOUND
}

"""The input fields for a return."""
input ReturnInput {
  """The ID of the order to be returned."""
  orderId: ID!

  """The return line items list to be handled."""
  returnLineItems: [ReturnLineItemInput!]!

  """
  When `true` the customer will receive a notification if there's an `Order.email` present.
  """
  notifyCustomer: Boolean = false

  """
  The UTC date and time when the return was first solicited by the customer.
  """
  requestedAt: DateTime
}

"""A return line item."""
type ReturnLineItem implements Node {
  """
  A note from the customer that describes the item to be returned. Maximum length: 300 characters.
  """
  customerNote: String

  """The fulfillment line item from which items are returned."""
  fulfillmentLineItem: FulfillmentLineItem!

  """A globally-unique ID."""
  id: ID!

  """The quantity being returned."""
  quantity: Int!

  """The quantity that can be refunded."""
  refundableQuantity: Int!

  """The quantity that was refunded."""
  refundedQuantity: Int!

  """The reason for returning the item."""
  returnReason: ReturnReason!

  """
  Additional information about the reason for the return. Maximum length: 255 characters.
  """
  returnReasonNote: String!

  """The total weight of the item."""
  totalWeight: Weight

  """
  The total line price after all discounts on the line item, including both line
  item level discounts and code-based line item discounts, are applied.
  """
  withCodeDiscountedTotalPriceSet: MoneyBag!
}

"""
An auto-generated type for paginating through multiple ReturnLineItems.
"""
type ReturnLineItemConnection {
  """A list of edges."""
  edges: [ReturnLineItemEdge!]!

  """A list of the nodes contained in ReturnLineItemEdge."""
  nodes: [ReturnLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ReturnLineItem and a cursor during pagination.
"""
type ReturnLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReturnLineItemEdge."""
  node: ReturnLineItem!
}

"""The input fields for a return line item."""
input ReturnLineItemInput {
  """
  The ID of the fulfillment line item to be returned.
  Specifically, this field expects a `FulfillmentLineItem.id`.
  """
  fulfillmentLineItemId: ID!

  """The quantity of the item to be returned."""
  quantity: Int!

  """The reason for the item to be returned."""
  returnReason: ReturnReason!

  """
  A note about the reason that the item is being returned.
  A note can be provided only if the return reason is `OTHER`.
  Maximum length: 255 characters.
  """
  returnReasonNote: String = ""
}

"""The reason for returning the return line item."""
enum ReturnReason {
  """The item is returned because the size was too small."""
  SIZE_TOO_SMALL

  """The item is returned because the size was too large."""
  SIZE_TOO_LARGE

  """The item is returned because the customer changed their mind."""
  UNWANTED

  """The item is returned because it was not as described."""
  NOT_AS_DESCRIBED

  """The item is returned because the customer received the wrong one."""
  WRONG_ITEM

  """The item is returned because it is damaged or defective."""
  DEFECTIVE

  """The item is returned because the buyer did not like the style."""
  STYLE

  """The item is returned because the buyer did not like the color."""
  COLOR

  """
  The item is returned for another reason. For this value, a return reason note is also provided.
  """
  OTHER

  """The item is returned because of an unknown reason."""
  UNKNOWN
}

"""The input fields to refund a return."""
input ReturnRefundInput {
  """The ID of the return."""
  returnId: ID!

  """A list of return line items to refund."""
  returnRefundLineItems: [ReturnRefundLineItemInput!]!

  """The shipping amount to refund."""
  refundShipping: RefundShippingInput

  """A list of duties to refund."""
  refundDuties: [RefundDutyInput!]

  """A list of transactions involved in refunding the return."""
  orderTransactions: [ReturnRefundOrderTransactionInput!] = []

  """Whether to send a refund notification to the customer."""
  notifyCustomer: Boolean = false
}

"""The input fields for a return refund line item."""
input ReturnRefundLineItemInput {
  """The ID of the return line item to be refunded."""
  returnLineItemId: ID!

  """The quantity of the return line item to be refunded."""
  quantity: Int!
}

"""The input fields to create order transactions when refunding a return."""
input ReturnRefundOrderTransactionInput {
  """
  The amount of money for the transaction in the presentment currency of the order.
  """
  transactionAmount: MoneyInput!

  """
  The ID of the parent order transaction. The transaction must be of kind `CAPTURE` or a `SALE`.
  """
  parentId: ID!
}

"""Return type for `returnRefund` mutation."""
type ReturnRefundPayload {
  """The created refund."""
  refund: Refund

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""Return type for `returnReopen` mutation."""
type ReturnReopenPayload {
  """The reopened return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""The input fields for requesting a return."""
input ReturnRequestInput {
  """The ID of the order that's being returned."""
  orderId: ID!

  """The line items that are being handled in the return."""
  returnLineItems: [ReturnRequestLineItemInput!]!
}

"""The input fields for a return line item."""
input ReturnRequestLineItemInput {
  """
  The ID of the fulfillment line item to be returned.
  Specifically, this field expects a `FulfillmentLineItem.id`.
  """
  fulfillmentLineItemId: ID!

  """The quantity of the item that's being returned."""
  quantity: Int!

  """The reason why the line item is being returned."""
  returnReason: ReturnReason!

  """
  A note from the customer that describes the item to be returned.
  For example, the note can communicate issues with the item to the merchant.
  Maximum length: 300 characters.
  """
  customerNote: String
}

"""Return type for `returnRequest` mutation."""
type ReturnRequestPayload {
  """The requested return."""
  return: Return

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""The status of a return."""
enum ReturnStatus {
  """The return has been canceled."""
  CANCELED

  """The return has been completed."""
  CLOSED

  """The return is in progress."""
  OPEN

  """The return was requested."""
  REQUESTED

  """The return was declined."""
  DECLINED
}

"""An error that occurs during the execution of a return mutation."""
type ReturnUserError implements DisplayableError {
  """The error code."""
  code: ReturnErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
A reverse delivery is a post-fulfillment object that represents a buyer sending a package to a merchant.
For example, a buyer requests a return, and a merchant sends the buyer a shipping label.
The reverse delivery contains the context of the items sent back, how they're being sent back
(for example, a shipping label), and the current state of the delivery (tracking information).
"""
type ReverseDelivery implements Node {
  """The deliverable associated with the reverse delivery."""
  deliverable: ReverseDeliveryDeliverable

  """The ID of the reverse delivery."""
  id: ID!

  """The reverse delivery line items attached to the reverse delivery."""
  reverseDeliveryLineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReverseDeliveryLineItemConnection!

  """The `ReverseFulfillmentOrder` associated with the reverse delivery."""
  reverseFulfillmentOrder: ReverseFulfillmentOrder!
}

"""
An auto-generated type for paginating through multiple ReverseDeliveries.
"""
type ReverseDeliveryConnection {
  """A list of edges."""
  edges: [ReverseDeliveryEdge!]!

  """A list of the nodes contained in ReverseDeliveryEdge."""
  nodes: [ReverseDelivery!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `reverseDeliveryCreateWithShipping` mutation."""
type ReverseDeliveryCreateWithShippingPayload {
  """The created reverse delivery."""
  reverseDelivery: ReverseDelivery

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""The delivery method and artifacts associated with a reverse delivery."""
union ReverseDeliveryDeliverable = ReverseDeliveryShippingDeliverable

"""The input fields to dispose a reverse delivery line item."""
input ReverseDeliveryDisposeInput {
  """The ID of the reverse delivery line item."""
  reverseDeliveryLineItemId: ID!

  """The quantity of the reverse delivery line item to dispose."""
  quantity: Int!

  """The final arrangement for the reverse delivery line item."""
  dispositionType: ReverseFulfillmentOrderDispositionType!

  """
  The ID of the location where the reverse delivery line item is to be disposed. This is required
            when the disposition type is RESTOCKED.
  """
  locationId: ID
}

"""Return type for `reverseDeliveryDispose` mutation."""
type ReverseDeliveryDisposePayload {
  """The disposed reverse delivery line items."""
  reverseDeliveryLineItems: [ReverseDeliveryLineItem!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""
An auto-generated type which holds one ReverseDelivery and a cursor during pagination.
"""
type ReverseDeliveryEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReverseDeliveryEdge."""
  node: ReverseDelivery!
}

"""The input fields for a reverse label."""
input ReverseDeliveryLabelInput {
  """
  The URL of the label file. If a label file was uploaded to be attached to the
  delivery, then provide the temporary staged URL.
  """
  fileUrl: URL!
}

"""The return label file information for a reverse delivery."""
type ReverseDeliveryLabelV2 {
  """The date and time when the reverse delivery label was created."""
  createdAt: DateTime!

  """A public link that can be used to download the label image."""
  publicFileUrl: URL

  """The date and time when the reverse delivery label was updated."""
  updatedAt: DateTime!
}

"""The details about a reverse delivery line item."""
type ReverseDeliveryLineItem implements Node {
  """The dispositions of the item."""
  dispositions: [ReverseFulfillmentOrderDisposition!]!

  """A globally-unique ID."""
  id: ID!

  """The expected number of units."""
  quantity: Int!

  """The corresponding reverse fulfillment order line item."""
  reverseFulfillmentOrderLineItem: ReverseFulfillmentOrderLineItem!
}

"""
An auto-generated type for paginating through multiple ReverseDeliveryLineItems.
"""
type ReverseDeliveryLineItemConnection {
  """A list of edges."""
  edges: [ReverseDeliveryLineItemEdge!]!

  """A list of the nodes contained in ReverseDeliveryLineItemEdge."""
  nodes: [ReverseDeliveryLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ReverseDeliveryLineItem and a cursor during pagination.
"""
type ReverseDeliveryLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReverseDeliveryLineItemEdge."""
  node: ReverseDeliveryLineItem!
}

"""The input fields for a reverse delivery line item."""
input ReverseDeliveryLineItemInput {
  """The ID of the related reverse fulfillment order line item."""
  reverseFulfillmentOrderLineItemId: ID!

  """The quantity of the item to be included in the delivery."""
  quantity: Int!
}

"""
A reverse shipping deliverable that may include a label and tracking information.
"""
type ReverseDeliveryShippingDeliverable {
  """The return label attached to the reverse delivery."""
  label: ReverseDeliveryLabelV2

  """The information to track the reverse delivery."""
  tracking: ReverseDeliveryTrackingV2
}

"""Return type for `reverseDeliveryShippingUpdate` mutation."""
type ReverseDeliveryShippingUpdatePayload {
  """The updated reverse delivery."""
  reverseDelivery: ReverseDelivery

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""The input fields for tracking information about a return delivery."""
input ReverseDeliveryTrackingInput {
  """The tracking number for the label."""
  number: String

  """
  The tracking URL for the carrier. If the carrier isn't supported by Shopify,
  then provide the tracking URL of the delivery.
  """
  url: URL
}

"""Represents the information used to track a reverse delivery."""
type ReverseDeliveryTrackingV2 {
  """
  The provider of the tracking information, in a human-readable format for display purposes.
  """
  carrierName: String

  """The identifier used by the courier to identify the shipment."""
  number: String

  """The URL to track a shipment."""
  url: URL
}

"""
A group of one or more items in a return that will be processed at a fulfillment service.
There can be more than one reverse fulfillment order for a return at a given location.
"""
type ReverseFulfillmentOrder implements Node {
  """A globally-unique ID."""
  id: ID!

  """
  The list of reverse fulfillment order line items for the reverse fulfillment order.
  """
  lineItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReverseFulfillmentOrderLineItemConnection!

  """The order associated with the reverse fulfillment order."""
  order: Order!

  """The list of reverse deliveries for the reverse fulfillment order."""
  reverseDeliveries(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ReverseDeliveryConnection!

  """The status of the reverse fulfillment order."""
  status: ReverseFulfillmentOrderStatus!

  """
  The current confirmation for the reverse fulfillment order from a third-party logistics service. 
  If no third-party service is involved, then this value is `nil`.
  """
  thirdPartyConfirmation: ReverseFulfillmentOrderThirdPartyConfirmation
}

"""
An auto-generated type for paginating through multiple ReverseFulfillmentOrders.
"""
type ReverseFulfillmentOrderConnection {
  """A list of edges."""
  edges: [ReverseFulfillmentOrderEdge!]!

  """A list of the nodes contained in ReverseFulfillmentOrderEdge."""
  nodes: [ReverseFulfillmentOrder!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields to dispose a reverse fulfillment order line item."""
input ReverseFulfillmentOrderDisposeInput {
  """The ID of the reverse fulfillment order line item."""
  reverseFulfillmentOrderLineItemId: ID!

  """The quantity of the reverse fulfillment order line item to dispose."""
  quantity: Int!

  """
  The ID of the location where the reverse fulfillment order line item is to be disposed.
          This is required when the disposition type is RESTOCKED.
  """
  locationId: ID

  """The final arrangement for the reverse fulfillment order line item."""
  dispositionType: ReverseFulfillmentOrderDispositionType!
}

"""Return type for `reverseFulfillmentOrderDispose` mutation."""
type ReverseFulfillmentOrderDisposePayload {
  """The disposed reverse fulfillment order line items."""
  reverseFulfillmentOrderLineItems: [ReverseFulfillmentOrderLineItem!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ReturnUserError!]!
}

"""The details of the arrangement of an item."""
type ReverseFulfillmentOrderDisposition implements Node {
  """A globally-unique ID."""
  id: ID!

  """The location where the disposition occurred."""
  location: Location

  """The number of disposed units."""
  quantity: Int!

  """The final arrangement of an item."""
  type: ReverseFulfillmentOrderDispositionType!
}

"""The final arrangement of an item from a reverse fulfillment order."""
enum ReverseFulfillmentOrderDispositionType {
  """An item that was restocked."""
  RESTOCKED

  """
  An item that requires further processing before being restocked or discarded.
  """
  PROCESSING_REQUIRED

  """An item that wasn't restocked."""
  NOT_RESTOCKED

  """An item that was expected but absent."""
  MISSING
}

"""
An auto-generated type which holds one ReverseFulfillmentOrder and a cursor during pagination.
"""
type ReverseFulfillmentOrderEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReverseFulfillmentOrderEdge."""
  node: ReverseFulfillmentOrder!
}

"""The details about a reverse fulfillment order line item."""
type ReverseFulfillmentOrderLineItem implements Node {
  """The dispositions of the item."""
  dispositions: [ReverseFulfillmentOrderDisposition!]!

  """
  The corresponding fulfillment line item for a reverse fulfillment order line item.
  """
  fulfillmentLineItem: FulfillmentLineItem!

  """A globally-unique ID."""
  id: ID!

  """The total number of units to be processed."""
  totalQuantity: Int!
}

"""
An auto-generated type for paginating through multiple ReverseFulfillmentOrderLineItems.
"""
type ReverseFulfillmentOrderLineItemConnection {
  """A list of edges."""
  edges: [ReverseFulfillmentOrderLineItemEdge!]!

  """A list of the nodes contained in ReverseFulfillmentOrderLineItemEdge."""
  nodes: [ReverseFulfillmentOrderLineItem!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ReverseFulfillmentOrderLineItem and a cursor during pagination.
"""
type ReverseFulfillmentOrderLineItemEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ReverseFulfillmentOrderLineItemEdge."""
  node: ReverseFulfillmentOrderLineItem!
}

"""The status of a reverse fulfillment order."""
enum ReverseFulfillmentOrderStatus {
  """The reverse fulfillment order has been canceled."""
  CANCELED

  """The reverse fulfillment order has been completed."""
  CLOSED

  """The reverse fulfillment order is in progress."""
  OPEN
}

"""The third-party confirmation of a reverse fulfillment order."""
type ReverseFulfillmentOrderThirdPartyConfirmation {
  """The status of the reverse fulfillment order third-party confirmation."""
  status: ReverseFulfillmentOrderThirdPartyConfirmationStatus!
}

"""The status of a reverse fulfillment order third-party confirmation."""
enum ReverseFulfillmentOrderThirdPartyConfirmationStatus {
  """The reverse fulfillment order was accepted by the fulfillment service."""
  ACCEPTED

  """
  The reverse fulfillment order cancelation was accepted by the fulfillment service.
  """
  CANCEL_ACCEPTED

  """
  The reverse fulfillment order cancelation was rejected by the fulfillment service.
  """
  CANCEL_REJECTED

  """
  The reverse fulfillment order is awaiting acceptance by the fulfillment service.
  """
  PENDING_ACCEPTANCE

  """
  The reverse fulfillment order is awaiting cancelation by the fulfillment service.
  """
  PENDING_CANCELATION

  """The reverse fulfillment order was rejected by the fulfillment service."""
  REJECTED
}

"""
An individual sale record associated with a sales agreement. Every money value
in an order's sales data is represented in the currency's smallest unit. When
amounts are divided across multiple line items, such as taxes or order
discounts, the amounts might not divide evenly across all of the line items on
the order. To address this, the remaining currency units that couldn't be
divided evenly are allocated one at a time, starting with the first line item,
until they are all accounted for. In aggregate, the values sum up correctly. In
isolation, one line item might have a different tax or discount amount than
another line item of the same price, before taxes and discounts. This is because
the amount could not be divided evenly across the items. The allocation of
currency units across line items is immutable. After they are allocated,
currency units are never reallocated or redistributed among the line items.
"""
interface Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""The possible order action types for a sale."""
enum SaleActionType {
  """A purchase or charge."""
  ORDER

  """A removal or return."""
  RETURN

  """A change to the price, taxes, or discounts for a prior purchase."""
  UPDATE

  """
  An unknown order action. Represents new actions that may be added in future versions.
  """
  UNKNOWN
}

"""An auto-generated type for paginating through multiple Sales."""
type SaleConnection {
  """A list of edges."""
  edges: [SaleEdge!]!

  """A list of the nodes contained in SaleEdge."""
  nodes: [Sale!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one Sale and a cursor during pagination.
"""
type SaleEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SaleEdge."""
  node: Sale!
}

"""
The possible line types for a sale record. One of the possible order line types
for a sale is an adjustment. Sales adjustments occur when a refund is issued for
a line item that is either more or less than the total value of the line item.
Examples are restocking fees and goodwill payments. When this happens, Shopify
produces a sales agreement with sale records for each line item that is returned
or refunded and an additional sale record for the adjustment (for example, a
restocking fee). The sales records for the returned or refunded items represent
the reversal of the original line item sale value. The additional adjustment
sale record represents the difference between the original total value of all
line items that were refunded, and the actual amount refunded.
"""
enum SaleLineType {
  """A product purchased, returned or exchanged."""
  PRODUCT

  """A tip added by the customer."""
  TIP

  """A gift card."""
  GIFT_CARD

  """A shipping cost."""
  SHIPPING

  """A duty charge."""
  DUTY

  """
  An unknown sale line. Represents new types that may be added in future versions.
  """
  UNKNOWN

  """A sale adjustment."""
  ADJUSTMENT
}

"""
A contract between a merchant and a customer to do business. Shopify creates a
sales agreement whenever an order is placed, edited, or refunded. A sales
agreement has one or more sales records, which provide itemized details about
the initial agreement or subsequent changes made to the order. For example, when
a customer places an order, Shopify creates the order, generates a sales
agreement, and records a sale for each line item purchased in the order. A sale
record is specific to a type of order line. Order lines can represent different
things such as a purchased product, a tip added by a customer, shipping costs
collected at checkout, and more.
"""
interface SalesAgreement {
  """The application that created the agreement."""
  app: App

  """The date and time at which the agreement occured."""
  happenedAt: DateTime!

  """The unique ID for the agreement."""
  id: ID!

  """The reason the agremeent was created."""
  reason: OrderActionType!

  """The sales associated with the agreement."""
  sales(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SaleConnection!

  """The staff member associated with the agreement."""
  user: StaffMember
}

"""
An auto-generated type for paginating through multiple SalesAgreements.
"""
type SalesAgreementConnection {
  """A list of edges."""
  edges: [SalesAgreementEdge!]!

  """A list of the nodes contained in SalesAgreementEdge."""
  nodes: [SalesAgreement!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SalesAgreement and a cursor during pagination.
"""
type SalesAgreementEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SalesAgreementEdge."""
  node: SalesAgreement!
}

"""The tax allocated to a sale from a single tax line."""
type SaleTax {
  """
  The portion of the total tax amount on the related sale that comes from the associated tax line.
  """
  amount: MoneyBag!

  """The unique ID for the sale tax."""
  id: ID!

  """The tax line associated with the sale."""
  taxLine: TaxLine!
}

"""
A saved search is a representation of a search query saved in the admin.
"""
type SavedSearch implements LegacyInteroperability & Node {
  """The filters of a saved search."""
  filters: [SearchFilter!]!

  """A globally-unique ID."""
  id: ID!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The name of a saved search."""
  name: String!

  """
  The query string of a saved search. This includes search terms and filters.
  """
  query: String!

  """The type of resource this saved search is searching in."""
  resourceType: SearchResultType!

  """The search terms of a saved search."""
  searchTerms: String!
}

"""An auto-generated type for paginating through multiple SavedSearches."""
type SavedSearchConnection {
  """A list of edges."""
  edges: [SavedSearchEdge!]!

  """A list of the nodes contained in SavedSearchEdge."""
  nodes: [SavedSearch!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields to create a saved search."""
input SavedSearchCreateInput {
  """The type of resource this saved search is searching in."""
  resourceType: SearchResultType!

  """A descriptive name of the saved search."""
  name: String!

  """
  The query string of a saved search. This includes search terms and filters.
  """
  query: String!
}

"""Return type for `savedSearchCreate` mutation."""
type SavedSearchCreatePayload {
  """The saved search that was created."""
  savedSearch: SavedSearch

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields to delete a saved search."""
input SavedSearchDeleteInput {
  """ID of the saved search to delete."""
  id: ID!
}

"""Return type for `savedSearchDelete` mutation."""
type SavedSearchDeletePayload {
  """The ID of the saved search that was deleted."""
  deletedSavedSearchId: ID

  """The shop of the saved search that was deleted."""
  shop: Shop!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one SavedSearch and a cursor during pagination.
"""
type SavedSearchEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SavedSearchEdge."""
  node: SavedSearch!
}

"""The input fields to update a saved search."""
input SavedSearchUpdateInput {
  """ID of the saved search to update."""
  id: ID!

  """A descriptive name of the saved search."""
  name: String

  """
  The query string of a saved search. This included search terms and filters.
  """
  query: String
}

"""Return type for `savedSearchUpdate` mutation."""
type SavedSearchUpdatePayload {
  """The saved search that was updated."""
  savedSearch: SavedSearch

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Script discount applications capture the intentions of a discount that
was created by a Shopify Script for an order's line item or shipping line.

Discount applications don't represent the actual final amount discounted on a
line (line item or shipping line). The actual amount discounted on a line is
represented by the [DiscountAllocation](https://shopify.dev/api/admin-graphql/latest/objects/discountallocation) object.
"""
type ScriptDiscountApplication implements DiscountApplication {
  """
  The method by which the discount's value is applied to its entitled items.
  """
  allocationMethod: DiscountApplicationAllocationMethod!

  """The description of the application as defined by the Script."""
  description: String! @deprecated(reason: "Use `title` instead.")

  """
  An ordered index that can be used to identify the discount application and indicate the precedence
  of the discount application for calculations.
  """
  index: Int!

  """How the discount amount is distributed on the discounted lines."""
  targetSelection: DiscountApplicationTargetSelection!

  """Whether the discount is applied on line items or shipping lines."""
  targetType: DiscountApplicationTargetType!

  """The title of the application as defined by the Script."""
  title: String!

  """The value of the discount application."""
  value: PricingValue!
}

"""
<div class="note"><h4>Theme app extensions</h4>
  <p>Your app might not pass App Store review if it uses script tags instead of
theme app extensions. All new apps, and apps that integrate with Online Store
2.0 themes, should use theme app extensions, such as app blocks or app embed
blocks. Script tags are an alternative you can use with only vintage themes. <a
href="/apps/online-store#what-integration-method-should-i-use"
target="_blank">Learn more</a>.</p></div>


A script tag represents remote JavaScript code that is loaded into the pages of
a shop's storefront or the order status page of checkout.
"""
type ScriptTag implements LegacyInteroperability & Node {
  """
  Whether the Shopify CDN can cache and serve the script tag.
  If `true`, then the script will be cached and served by the CDN.
  The cache expires 15 minutes after the script tag is successfully returned.
  If `false`, then the script will be served as is.
  """
  cache: Boolean!

  """The date and time when the script tag was created."""
  createdAt: DateTime!

  """
  The page or pages on the online store that the script should be included.
  """
  displayScope: ScriptTagDisplayScope!

  """A globally-unique ID."""
  id: ID!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The URL to the remote script."""
  src: URL!

  """The date and time when the script tag was last updated."""
  updatedAt: DateTime!
}

"""An auto-generated type for paginating through multiple ScriptTags."""
type ScriptTagConnection {
  """A list of edges."""
  edges: [ScriptTagEdge!]!

  """A list of the nodes contained in ScriptTagEdge."""
  nodes: [ScriptTag!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `scriptTagCreate` mutation."""
type ScriptTagCreatePayload {
  """The script tag that was created."""
  scriptTag: ScriptTag

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `scriptTagDelete` mutation."""
type ScriptTagDeletePayload {
  """The ID of the deleted script tag."""
  deletedScriptTagId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
The page or pages on the online store where the script should be included.
"""
enum ScriptTagDisplayScope {
  """
  Include the script on both the web storefront and the order status page.
  """
  ALL

  """Include the script only on the order status page."""
  ORDER_STATUS

  """Include the script only on the web storefront."""
  ONLINE_STORE
}

"""
An auto-generated type which holds one ScriptTag and a cursor during pagination.
"""
type ScriptTagEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ScriptTagEdge."""
  node: ScriptTag!
}

"""
The input fields for a script tag. This input object is used when creating or updating
a script tag to specify its URL, where it should be included, and how it will be cached.
"""
input ScriptTagInput {
  """
  The URL of the remote script. For example: `https://example.com/path/to/script.js`.
  """
  src: URL

  """
  The page or pages on the online store where the script should be included.
  """
  displayScope: ScriptTagDisplayScope

  """
  Whether the Shopify CDN can cache and serve the script tag.
  If `true`, then the script will be cached and served by the CDN.
  The cache expires 15 minutes after the script tag is successfully returned.
  If `false`, then the script is served as is.
  The default value is `false`.
  """
  cache: Boolean = false
}

"""Return type for `scriptTagUpdate` mutation."""
type ScriptTagUpdatePayload {
  """The script tag that was updated."""
  scriptTag: ScriptTag

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""A filter in a search query represented by a key value pair."""
type SearchFilter {
  """The key of the search filter."""
  key: String!

  """The value of the search filter."""
  value: String!
}

"""
A list of search filters along with their specific options in value and label pair for filtering.
"""
type SearchFilterOptions {
  """A list of options that can be use to filter product availability."""
  productAvailability: [FilterOption!]!
}

"""Represents an individual result returned from a search."""
type SearchResult {
  """Returns the search result description text."""
  description: String

  """Returns the Image resource presented to accompany a search result."""
  image: Image

  """Returns the ID of the resource returned in the search result."""
  reference: Node!

  """Returns the resource title."""
  title: String!

  """Returns the absolute URL to the resource in the search result."""
  url: URL!
}

"""The connection type for SearchResult."""
type SearchResultConnection {
  """A list of edges."""
  edges: [SearchResultEdge!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!

  """Information to aid in pagination."""
  resultsAfterCount: Int! @deprecated(reason: "The provided information is not accurate.")
}

"""
An auto-generated type which holds one SearchResult and a cursor during pagination.
"""
type SearchResultEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SearchResultEdge."""
  node: SearchResult!
}

"""Specifies the type of resources to be returned from a search."""
enum SearchResultType {
  CUSTOMER
  DRAFT_ORDER
  PRODUCT
  COLLECTION

  """A file."""
  FILE
  ONLINE_STORE_PAGE
  ONLINE_STORE_BLOG
  ONLINE_STORE_ARTICLE

  """A URL redirect."""
  URL_REDIRECT
  PRICE_RULE

  """A code discount redeem code."""
  DISCOUNT_REDEEM_CODE
  ORDER
}

"""A dynamic collection of customers based on specific criteria."""
type Segment implements Node {
  """The date and time when the segment was added to the store."""
  creationDate: DateTime!

  """A globally-unique ID."""
  id: ID!

  """The date and time when the segment was last updated."""
  lastEditDate: DateTime!

  """The name of the segment."""
  name: String!

  """
  A precise definition of the segment. The definition is composed of a combination of conditions on facts about customers.
  """
  query: String!
}

"""
A filter that takes a value that's associated with an object. For example, the
`tags` field is associated with the
[`Customer`](/api/admin-graphql/latest/objects/Customer) object.
"""
type SegmentAssociationFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""The statistics of a given attribute."""
type SegmentAttributeStatistics {
  """The average of a given attribute."""
  average: Float!

  """The sum of a given attribute."""
  sum: Float!
}

"""A filter with a Boolean value that's been added to a segment query."""
type SegmentBooleanFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""An auto-generated type for paginating through multiple Segments."""
type SegmentConnection {
  """A list of edges."""
  edges: [SegmentEdge!]!

  """A list of the nodes contained in SegmentEdge."""
  nodes: [Segment!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `segmentCreate` mutation."""
type SegmentCreatePayload {
  """The newly created segment."""
  segment: Segment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""A filter with a date value that's been added to a segment query."""
type SegmentDateFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""Return type for `segmentDelete` mutation."""
type SegmentDeletePayload {
  """ID of the deleted segment."""
  deletedSegmentId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one Segment and a cursor during pagination.
"""
type SegmentEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SegmentEdge."""
  node: Segment!
}

"""
A filter with a set of possible values that's been added to a segment query.
"""
type SegmentEnumFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""
A filter that's used to segment customers based on the date that an event
occured. For example, the `product_bought` event filter allows you to segment
customers based on what products they've bought.
"""
type SegmentEventFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The parameters for an event segment filter."""
  parameters: [SegmentEventFilterParameter!]!

  """The query name of the filter."""
  queryName: String!

  """The return value type for an event segment filter."""
  returnValueType: String!
}

"""The parameters for an event segment filter."""
type SegmentEventFilterParameter {
  """The localized description of the parameter."""
  localizedDescription: String!

  """The localized name of the parameter."""
  localizedName: String!

  """Whether the parameter is optional."""
  optional: Boolean!

  """The type of the parameter."""
  parameterType: String!

  """The query name of the parameter."""
  queryName: String!
}

"""The filters used in segment queries associated with a shop."""
interface SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""An auto-generated type for paginating through multiple SegmentFilters."""
type SegmentFilterConnection {
  """A list of edges."""
  edges: [SegmentFilterEdge!]!

  """A list of the nodes contained in SegmentFilterEdge."""
  nodes: [SegmentFilter!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SegmentFilter and a cursor during pagination.
"""
type SegmentFilterEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SegmentFilterEdge."""
  node: SegmentFilter!
}

"""
A filter with a double-precision, floating-point value that's been added to a segment query.
"""
type SegmentFloatFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""A filter with an integer that's been added to a segment query."""
type SegmentIntegerFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""The response type for the `segmentMembership` object."""
type SegmentMembership {
  """
  A Boolean that indicates whether or not the customer in the query is a member
  of the segment, which is identified using the `segmentId`.
  """
  isMember: Boolean!

  """A `segmentId` that's used for testing membership."""
  segmentId: ID!
}

"""
A list of maps that contain `segmentId` IDs and `isMember` Booleans. The maps represent segment memberships.
"""
type SegmentMembershipResponse {
  """The membership status for the given list of segments."""
  memberships: [SegmentMembership!]!
}

"""
A segment and its corresponding saved search. 
For example, you can use `SegmentMigration` to retrieve the segment ID that corresponds to a saved search ID.
"""
type SegmentMigration {
  """A globally-unique ID."""
  id: ID!

  """The ID of the saved search."""
  savedSearchId: ID!

  """The ID of the segment."""
  segmentId: ID
}

"""
An auto-generated type for paginating through multiple SegmentMigrations.
"""
type SegmentMigrationConnection {
  """A list of edges."""
  edges: [SegmentMigrationEdge!]!

  """A list of the nodes contained in SegmentMigrationEdge."""
  nodes: [SegmentMigration!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SegmentMigration and a cursor during pagination.
"""
type SegmentMigrationEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SegmentMigrationEdge."""
  node: SegmentMigration!
}

"""The set of valid sort keys for the Segment query."""
enum SegmentSortKeys {
  """Sort by the `creation_date` value."""
  CREATION_DATE

  """Sort by the `last_edit_date` value."""
  LAST_EDIT_DATE

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""The statistics of a given segment."""
type SegmentStatistics {
  """The statistics of a given attribute."""
  attributeStatistics(
    """The attribute that statistics are retrieved for."""
    attributeName: String!
  ): SegmentAttributeStatistics!

  """The total number of members in a given segment."""
  totalCount: Int! @deprecated(reason: "Use CustomerSegmentMemberConnection.totalCount instead.")
}

"""A filter with a string that's been added to a segment query."""
type SegmentStringFilter implements SegmentFilter {
  """The localized name of the filter."""
  localizedName: String!

  """Whether a file can have multiple values for a single customer."""
  multiValue: Boolean!

  """The query name of the filter."""
  queryName: String!
}

"""Return type for `segmentUpdate` mutation."""
type SegmentUpdatePayload {
  """The updated segment."""
  segment: Segment

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
A list of suggested values associated with an individual segment. A
segment is a group of members, such as customers, that meet specific
criteria.
"""
type SegmentValue {
  """
  The localized version of the value's name. This name is displayed to the merchant.
  """
  localizedValue: String!

  """The name of the query associated with the suggestion."""
  queryName: String!
}

"""An auto-generated type for paginating through multiple SegmentValues."""
type SegmentValueConnection {
  """A list of edges."""
  edges: [SegmentValueEdge!]!

  """A list of the nodes contained in SegmentValueEdge."""
  nodes: [SegmentValue!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SegmentValue and a cursor during pagination.
"""
type SegmentValueEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SegmentValueEdge."""
  node: SegmentValue!
}

"""
Properties used by customers to select a product variant.
Products can have multiple options, like different sizes or colors.
"""
type SelectedOption {
  """The product option’s name."""
  name: String!

  """The product option’s value."""
  value: String!
}

"""
Represents how a product can be sold and purchased. Selling plans and associated records (selling plan groups
and policies) are deleted 48 hours after a merchant uninstalls their subscriptions app. We recommend backing
up these records if you need to restore them later.

For more information on selling plans, refer to
[*Creating and managing selling plans*](https://shopify.dev/docs/apps/selling-strategies/subscriptions/selling-plans).
"""
type SellingPlan implements Node {
  """A selling plan policy which describes the recurring billing details."""
  billingPolicy: SellingPlanBillingPolicy!

  """The category used to classify the selling plan for reporting purposes."""
  category: SellingPlanCategory

  """The date and time when the selling plan was created."""
  createdAt: DateTime!

  """A selling plan policy which describes the delivery details."""
  deliveryPolicy: SellingPlanDeliveryPolicy!

  """Buyer facing string which describes the selling plan commitment."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """When to reserve inventory for a selling plan."""
  inventoryPolicy: SellingPlanInventoryPolicy

  """
  A customer-facing description of the selling plan.
  
  If your store supports multiple currencies, then don't include
  country-specific pricing content, such as "Buy monthly, get 10$ CAD off". This
  field won't be converted to reflect different currencies.
  """
  name: String!

  """
  The values of all options available on the selling plan. Selling plans are
  grouped together in Liquid when they're created by the same app, and have the
  same `selling_plan_group.name` and `selling_plan_group.options` values.
  """
  options: [String!]!

  """
  Relative position of the selling plan for display. A lower position will be displayed before a higher position.
  """
  position: Int

  """Selling plan pricing details."""
  pricingPolicies: [SellingPlanPricingPolicy!]!
}

"""Represents a selling plan policy anchor."""
type SellingPlanAnchor {
  """
  The cutoff day for the anchor.
  
  If `type` is WEEKDAY, then the value must be between 1-7. Shopify interprets
  the days of the week according to ISO 8601, where 1 is Monday.
  
  If `type` is MONTHDAY, then the value must be between 1-31.
  
  If `type` is YEARDAY, then the value must be `null`.
  """
  cutoffDay: Int

  """
  The day of the anchor.
  
  If `type` is WEEKDAY, then the value must be between 1-7. Shopify interprets
  the days of the week according to ISO 8601, where 1 is Monday.
  
  If `type` isn't WEEKDAY, then the value must be between 1-31.
  """
  day: Int!

  """
  The month of the anchor. If type is different than YEARDAY, then the value must
  be `null` or between 1-12.
  """
  month: Int

  """
  Represents the anchor type, it can be one one of WEEKDAY, MONTHDAY, YEARDAY.
  """
  type: SellingPlanAnchorType!
}

"""The input fields required to create or update a selling plan anchor."""
input SellingPlanAnchorInput {
  """Represents the anchor type, must be one of WEEKDAY, MONTHDAY, YEARDAY."""
  type: SellingPlanAnchorType

  """
  The day of the anchor.
  
  If `type` is WEEKDAY, then the value must be between 1-7. Shopify interprets
  the days of the week according to ISO 8601, where 1 is Monday.
  
  If `type` isn't WEEKDAY, then the value must be between 1-31.
  """
  day: Int

  """
  The month of the anchor. If type is different than YEARDAY, then the value must
  be `null` or between 1-12.
  """
  month: Int

  """
  The cutoff day of the anchor.
  
  If `type` is WEEKDAY, then the value must be between 1-7. Shopify interprets
  the days of the week according to ISO 8601, where 1 is Monday.
  
  If `type` is MONTHDAY, then the value must be between 1-31.
  
  If `type` is YEARDAY, then the value must be `null`.
  
  This field should only be set if the cutoff field for the delivery policy is `null`.
  """
  cutoffDay: Int
}

"""Represents the anchor type."""
enum SellingPlanAnchorType {
  """Which day of the week, between 1-7."""
  WEEKDAY

  """Which day of the month, between 1-31."""
  MONTHDAY

  """
  Which days of the month and year, month between 1-12, and day between 1-31.
  """
  YEARDAY
}

"""
Represents the billing frequency associated to the selling plan (for example, bill every week, or bill every
three months). The selling plan billing policy and associated records (selling plan groups, selling plans, pricing
policies, and delivery policy) are deleted 48 hours after a merchant uninstalls their subscriptions app.
We recommend backing up these records if you need to restore them later.
"""
union SellingPlanBillingPolicy = SellingPlanFixedBillingPolicy | SellingPlanRecurringBillingPolicy

"""
The input fields that are required to create or update a billing policy type.
"""
input SellingPlanBillingPolicyInput {
  """The fixed billing policy details."""
  fixed: SellingPlanFixedBillingPolicyInput

  """The recurring billing policy details."""
  recurring: SellingPlanRecurringBillingPolicyInput
}

"""
The category of the selling plan. For the `OTHER` category,
         you must fill out our [request form](https://docs.google.com/forms/d/e/1FAIpQLSeU18Xmw0Q61V8wdH-dfGafFqIBfRchQKUO8WAF3yJTvgyyZQ/viewform),
         where we'll review your request for a new purchase option.
"""
enum SellingPlanCategory {
  """The selling plan is for anything not in one of the other categories."""
  OTHER

  """The selling plan is for pre-orders."""
  PRE_ORDER

  """The selling plan is for subscriptions."""
  SUBSCRIPTION

  """The selling plan is for try before you buy purchases."""
  TRY_BEFORE_YOU_BUY
}

"""
The amount charged at checkout when the full amount isn't charged at checkout.
"""
type SellingPlanCheckoutCharge {
  """The charge type for the checkout charge."""
  type: SellingPlanCheckoutChargeType!

  """The charge value for the checkout charge."""
  value: SellingPlanCheckoutChargeValue!
}

"""
The input fields that are required to create or update a checkout charge.
"""
input SellingPlanCheckoutChargeInput {
  """The checkout charge type defined by the policy."""
  type: SellingPlanCheckoutChargeType

  """The checkout charge value defined by the policy."""
  value: SellingPlanCheckoutChargeValueInput
}

"""The percentage value of the price used for checkout charge."""
type SellingPlanCheckoutChargePercentageValue {
  """The percentage value of the price used for checkout charge."""
  percentage: Float!
}

"""The checkout charge when the full amount isn't charged at checkout."""
enum SellingPlanCheckoutChargeType {
  """The checkout charge is a percentage of the product or variant price."""
  PERCENTAGE

  """The checkout charge is a fixed price amount."""
  PRICE
}

"""The portion of the price to be charged at checkout."""
union SellingPlanCheckoutChargeValue = MoneyV2 | SellingPlanCheckoutChargePercentageValue

"""
The input fields required to create or update an checkout charge value.
"""
input SellingPlanCheckoutChargeValueInput {
  """The percentage value."""
  percentage: Float

  """The fixed value for an checkout charge."""
  fixedValue: Decimal
}

"""An auto-generated type for paginating through multiple SellingPlans."""
type SellingPlanConnection {
  """A list of edges."""
  edges: [SellingPlanEdge!]!

  """A list of the nodes contained in SellingPlanEdge."""
  nodes: [SellingPlan!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
Represents the delivery frequency associated to the selling plan (for example, deliver every month, or deliver
every other week). The selling plan delivery policy and associated records (selling plan groups, selling plans,
pricing policies, and billing policy) are deleted 48 hours after a merchant uninstalls their subscriptions app.
We recommend backing up these records if you need to restore them later.
"""
union SellingPlanDeliveryPolicy = SellingPlanFixedDeliveryPolicy | SellingPlanRecurringDeliveryPolicy

"""
The input fields that are required to create or update a delivery policy.
"""
input SellingPlanDeliveryPolicyInput {
  """The fixed delivery policy details."""
  fixed: SellingPlanFixedDeliveryPolicyInput

  """The recurring delivery policy details."""
  recurring: SellingPlanRecurringDeliveryPolicyInput
}

"""
An auto-generated type which holds one SellingPlan and a cursor during pagination.
"""
type SellingPlanEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SellingPlanEdge."""
  node: SellingPlan!
}

"""The fixed selling plan billing policy."""
type SellingPlanFixedBillingPolicy {
  """The checkout charge when the full amount isn't charged at checkout."""
  checkoutCharge: SellingPlanCheckoutCharge!

  """The exact time when to capture the full payment."""
  remainingBalanceChargeExactTime: DateTime

  """
  The period after remaining_balance_charge_trigger, before capturing the full payment. Expressed as an ISO8601 duration.
  """
  remainingBalanceChargeTimeAfterCheckout: String

  """When to capture payment for amount due."""
  remainingBalanceChargeTrigger: SellingPlanRemainingBalanceChargeTrigger!
}

"""The input fields required to create or update a fixed billing policy."""
input SellingPlanFixedBillingPolicyInput {
  """When to capture the payment for the amount due."""
  remainingBalanceChargeTrigger: SellingPlanRemainingBalanceChargeTrigger

  """The date and time to capture the full payment."""
  remainingBalanceChargeExactTime: DateTime

  """
  The period after capturing the payment for the amount due
  (`remainingBalanceChargeTrigger`), and before capturing the full payment.
  Expressed as an ISO8601 duration.
  """
  remainingBalanceChargeTimeAfterCheckout: String

  """The checkout charge policy for the selling plan."""
  checkoutCharge: SellingPlanCheckoutChargeInput
}

"""Represents a fixed selling plan delivery policy."""
type SellingPlanFixedDeliveryPolicy {
  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchor!]!

  """A buffer period for orders to be included in next fulfillment anchor."""
  cutoff: Int

  """The date and time when the fulfillment should trigger."""
  fulfillmentExactTime: DateTime

  """
  What triggers the fulfillment. The value must be one of ANCHOR, ASAP, EXACT_TIME, or UNKNOWN.
  """
  fulfillmentTrigger: SellingPlanFulfillmentTrigger!

  """
  Whether the delivery policy is merchant or buyer-centric.
  Buyer-centric delivery policies state the time when the buyer will receive the goods.
  Merchant-centric delivery policies state the time when the fulfillment should be started.
  Currently, only merchant-centric delivery policies are supported.
  """
  intent: SellingPlanFixedDeliveryPolicyIntent!

  """
  The fulfillment or delivery behavior of the first fulfillment when the order
  is placed before the anchor. The default value for this field is `ASAP`.
  """
  preAnchorBehavior: SellingPlanFixedDeliveryPolicyPreAnchorBehavior!
}

"""The input fields required to create or update a fixed delivery policy."""
input SellingPlanFixedDeliveryPolicyInput {
  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchorInput!]

  """What triggers the fulfillment."""
  fulfillmentTrigger: SellingPlanFulfillmentTrigger

  """The date and time when the fulfillment should trigger."""
  fulfillmentExactTime: DateTime

  """A buffer period for orders to be included in a cycle."""
  cutoff: Int

  """Whether the delivery policy is merchant or buyer-centric."""
  intent: SellingPlanFixedDeliveryPolicyIntent

  """The pre-anchor behavior."""
  preAnchorBehavior: SellingPlanFixedDeliveryPolicyPreAnchorBehavior
}

"""Possible intentions of a Delivery Policy."""
enum SellingPlanFixedDeliveryPolicyIntent {
  """
  A merchant-centric delivery policy. Mark this delivery policy to define when the merchant should start fulfillment.
  """
  FULFILLMENT_BEGIN
}

"""
The fulfillment or delivery behavior of the first fulfillment when the orderis placed before the anchor.
"""
enum SellingPlanFixedDeliveryPolicyPreAnchorBehavior {
  """
  Orders placed can be fulfilled / delivered immediately. Orders placed inside a
  cutoff can be fulfilled / delivered at the next anchor.
  """
  ASAP

  """
  Orders placed can be fulfilled / delivered at the next anchor date.
  Orders placed inside a cutoff will skip the next anchor and can be fulfilled /
  delivered at the following anchor.
  """
  NEXT
}

"""Represents a fixed selling plan pricing policy."""
type SellingPlanFixedPricingPolicy implements SellingPlanPricingPolicyBase {
  """The price adjustment type."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!

  """The price adjustment value."""
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!

  """
  The date and time when the fixed selling plan pricing policy was created.
  """
  createdAt: DateTime!
}

"""
The input fields required to create or update a fixed selling plan pricing policy.
"""
input SellingPlanFixedPricingPolicyInput {
  """ID of the pricing policy."""
  id: ID

  """Price adjustment type defined by the policy."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType

  """Price adjustment value defined by the policy."""
  adjustmentValue: SellingPlanPricingPolicyValueInput
}

"""Describes what triggers fulfillment."""
enum SellingPlanFulfillmentTrigger {
  """Use the anchor values to calculate fulfillment date."""
  ANCHOR

  """As soon as possible."""
  ASAP

  """At an exact time defined by the fulfillment_exact_time field."""
  EXACT_TIME

  """Unknown. Usually to be determined in the future."""
  UNKNOWN
}

"""
Represents a selling method (for example, "Subscribe and save" or "Pre-paid"). Selling plan groups
and associated records (selling plans and policies) are deleted 48 hours after a merchant
uninstalls their subscriptions app. We recommend backing up these records if you need to restore them later.
"""
type SellingPlanGroup implements Node {
  """The ID for app, exposed in Liquid and product JSON."""
  appId: String

  """
  Whether the given product is directly associated to the selling plan group.
  """
  appliesToProduct(
    """The ID of the product."""
    productId: ID!
  ): Boolean!

  """
  Whether the given product variant is directly associated to the selling plan group.
  """
  appliesToProductVariant(
    """The ID of the product."""
    productVariantId: ID!
  ): Boolean!

  """
  Whether any of the product variants of the given product are associated to the selling plan group.
  """
  appliesToProductVariants(
    """The ID of the product."""
    productId: ID!
  ): Boolean!

  """The date and time when the selling plan group was created."""
  createdAt: DateTime!

  """The merchant-facing description of the selling plan group."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """The merchant-facing label of the selling plan group."""
  merchantCode: String!

  """The buyer-facing label of the selling plan group."""
  name: String!

  """
  The values of all options available on the selling plan group. Selling plans
  are grouped together in Liquid when they're created by the same app, and have
  the same `selling_plan_group.name` and `selling_plan_group.options` values.
  """
  options: [String!]!

  """The relative position of the selling plan group for display."""
  position: Int

  """A count of products associated to the selling plan group."""
  productCount: Int!

  """A count of product variants associated to the selling plan group."""
  productVariantCount(
    """The ID of the product to scope the count to."""
    productId: ID
  ): Int!

  """Product variants associated to the selling plan group."""
  productVariants(
    """Filters the product variants by a product ID."""
    productId: ID

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductVariantConnection!

  """Products associated to the selling plan group."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ProductConnection!

  """Selling plans associated to the selling plan group."""
  sellingPlans(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SellingPlanConnection!

  """A summary of the policies associated to the selling plan group."""
  summary: String
}

"""Return type for `sellingPlanGroupAddProducts` mutation."""
type SellingPlanGroupAddProductsPayload {
  """The updated selling plan group."""
  sellingPlanGroup: SellingPlanGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Return type for `sellingPlanGroupAddProductVariants` mutation."""
type SellingPlanGroupAddProductVariantsPayload {
  """The updated selling plan group."""
  sellingPlanGroup: SellingPlanGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""
An auto-generated type for paginating through multiple SellingPlanGroups.
"""
type SellingPlanGroupConnection {
  """A list of edges."""
  edges: [SellingPlanGroupEdge!]!

  """A list of the nodes contained in SellingPlanGroupEdge."""
  nodes: [SellingPlanGroup!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `sellingPlanGroupCreate` mutation."""
type SellingPlanGroupCreatePayload {
  """The created selling plan group object."""
  sellingPlanGroup: SellingPlanGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Return type for `sellingPlanGroupDelete` mutation."""
type SellingPlanGroupDeletePayload {
  """The ID of the deleted selling plan group object."""
  deletedSellingPlanGroupId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""
An auto-generated type which holds one SellingPlanGroup and a cursor during pagination.
"""
type SellingPlanGroupEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SellingPlanGroupEdge."""
  node: SellingPlanGroup!
}

"""The input fields required to create or update a selling plan group."""
input SellingPlanGroupInput {
  """Buyer facing label of the selling plan group."""
  name: String

  """ID for app, exposed in Liquid and product JSON."""
  appId: String

  """Merchant facing label of the selling plan group."""
  merchantCode: String

  """Merchant facing description of the selling plan group."""
  description: String

  """List of selling plans to create."""
  sellingPlansToCreate: [SellingPlanInput!]

  """List of selling plans to update."""
  sellingPlansToUpdate: [SellingPlanInput!]

  """List of selling plans ids to delete."""
  sellingPlansToDelete: [ID!]

  """
  The values of all options available on the selling plan group. Selling plans
  are grouped together in Liquid when they're created by the same app, and have
  the same `selling_plan_group.name` and `selling_plan_group.options` values.
  """
  options: [String!]

  """
  Relative value for display purposes of the selling plan group. A lower position will be displayed before a higher one.
  """
  position: Int
}

"""Return type for `sellingPlanGroupRemoveProducts` mutation."""
type SellingPlanGroupRemoveProductsPayload {
  """The removed product ids."""
  removedProductIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Return type for `sellingPlanGroupRemoveProductVariants` mutation."""
type SellingPlanGroupRemoveProductVariantsPayload {
  """The removed product variant ids."""
  removedProductVariantIds: [ID!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""The input fields for resource association with a Selling Plan Group."""
input SellingPlanGroupResourceInput {
  """The IDs of the Variants to add to the Selling Plan Group."""
  productVariantIds: [ID!]

  """The IDs of the Products to add to the Selling Plan Group."""
  productIds: [ID!]
}

"""The set of valid sort keys for the SellingPlanGroup query."""
enum SellingPlanGroupSortKeys {
  """Sort by the `name` value."""
  NAME

  """Sort by the `updated_at` value."""
  UPDATED_AT

  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Return type for `sellingPlanGroupUpdate` mutation."""
type SellingPlanGroupUpdatePayload {
  """The IDs of the deleted Subscription Plans."""
  deletedSellingPlanIds: [ID!]

  """The updated Selling Plan Group."""
  sellingPlanGroup: SellingPlanGroup

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SellingPlanGroupUserError!]!
}

"""Represents a selling plan group custom error."""
type SellingPlanGroupUserError implements DisplayableError {
  """The error code."""
  code: SellingPlanGroupUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `SellingPlanGroupUserError`.
"""
enum SellingPlanGroupUserErrorCode {
  """The input value is blank."""
  BLANK

  """The input value should be equal to the value allowed."""
  EQUAL_TO

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN

  """
  The input value should be greater than or equal to the minimum value allowed.
  """
  GREATER_THAN_OR_EQUAL_TO

  """The input value isn't included in the list."""
  INCLUSION

  """The input value is invalid."""
  INVALID

  """The input value should be less than the maximum value allowed."""
  LESS_THAN

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value is not a number."""
  NOT_A_NUMBER

  """The record with the ID used as the input value couldn't be found."""
  NOT_FOUND

  """The input value needs to be blank."""
  PRESENT

  """The input value is already taken."""
  TAKEN

  """The input value is too big."""
  TOO_BIG

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT

  """The input value is the wrong length."""
  WRONG_LENGTH

  """Exceeded the selling plan limit (31)."""
  SELLING_PLAN_COUNT_UPPER_BOUND

  """Must include at least one selling plan."""
  SELLING_PLAN_COUNT_LOWER_BOUND

  """
  Selling plan's billing policy max cycles must be greater than min cycles.
  """
  SELLING_PLAN_MAX_CYCLES_MUST_BE_GREATER_THAN_MIN_CYCLES

  """Selling plan's billing and delivery policies anchors must be equal."""
  SELLING_PLAN_BILLING_AND_DELIVERY_POLICY_ANCHORS_MUST_BE_EQUAL

  """Selling plan's billing cycle must be a multiple of delivery cycle."""
  SELLING_PLAN_BILLING_CYCLE_MUST_BE_A_MULTIPLE_OF_DELIVERY_CYCLE

  """Selling plan's pricing policies must contain one fixed pricing policy."""
  SELLING_PLAN_PRICING_POLICIES_MUST_CONTAIN_A_FIXED_PRICING_POLICY

  """
  Cannot define option2 on this selling plan as there's no label on the parent selling plan group.
  """
  SELLING_PLAN_MISSING_OPTION2_LABEL_ON_PARENT_GROUP

  """
  Cannot define option3 on this selling plan as there's no label on the parent selling plan group.
  """
  SELLING_PLAN_MISSING_OPTION3_LABEL_ON_PARENT_GROUP

  """Selling plan's option2 is required because option2 exists."""
  SELLING_PLAN_OPTION2_REQUIRED_AS_DEFINED_ON_PARENT_GROUP

  """Selling plan's option3 is required because option3 exists."""
  SELLING_PLAN_OPTION3_REQUIRED_AS_DEFINED_ON_PARENT_GROUP

  """Selling plans can't have more than 2 pricing policies."""
  SELLING_PLAN_PRICING_POLICIES_LIMIT

  """The selling plan list provided contains 1 or more invalid IDs."""
  RESOURCE_LIST_CONTAINS_INVALID_IDS

  """Product variant does not exist."""
  PRODUCT_VARIANT_DOES_NOT_EXIST

  """Product does not exist."""
  PRODUCT_DOES_NOT_EXIST

  """Selling plan group does not exist."""
  GROUP_DOES_NOT_EXIST

  """Selling plan group could not be deleted."""
  GROUP_COULD_NOT_BE_DELETED

  """Could not add the resource to the selling plan group."""
  ERROR_ADDING_RESOURCE_TO_GROUP

  """Missing delivery policy."""
  SELLING_PLAN_DELIVERY_POLICY_MISSING

  """Missing billing policy."""
  SELLING_PLAN_BILLING_POLICY_MISSING

  """Selling plan does not exist."""
  PLAN_DOES_NOT_EXIST

  """Selling plan ID must be specified to update."""
  PLAN_ID_MUST_BE_SPECIFIED_TO_UPDATE

  """Only one billing policy type can be defined."""
  ONLY_NEED_ONE_BILLING_POLICY_TYPE

  """Only one delivery policy type can be defined."""
  ONLY_NEED_ONE_DELIVERY_POLICY_TYPE

  """Only one pricing policy type can be defined."""
  ONLY_NEED_ONE_PRICING_POLICY_TYPE

  """Billing and delivery policy types must be the same."""
  BILLING_AND_DELIVERY_POLICY_TYPES_MUST_BE_THE_SAME

  """Only one pricing policy adjustment value type can be defined."""
  ONLY_NEED_ONE_PRICING_POLICY_VALUE

  """Pricing policy's adjustment value and adjustment type must match."""
  PRICING_POLICY_ADJUSTMENT_VALUE_AND_TYPE_MUST_MATCH

  """Cannot have multiple selling plans with the same name."""
  SELLING_PLAN_DUPLICATE_NAME

  """Cannot have multiple selling plans with the same options."""
  SELLING_PLAN_DUPLICATE_OPTIONS

  """A fixed selling plan can have at most one pricing policy."""
  SELLING_PLAN_FIXED_PRICING_POLICIES_LIMIT

  """
  A fixed billing policy's remaining_balance_charge_exact_time can't be blank
  when the remaining_balance_charge_trigger is EXACT_TIME.
  """
  REMAINING_BALANCE_CHARGE_EXACT_TIME_REQUIRED

  """A fixed billing policy's checkout charge value and type must match."""
  CHECKOUT_CHARGE_VALUE_AND_TYPE_MUST_MATCH

  """A fixed billing policy's checkout charge can have at most one value."""
  ONLY_NEED_ONE_CHECKOUT_CHARGE_VALUE

  """
  A fixed billing policy's remaining_balance_charge_exact_time must not be
  present when the remaining_balance_charge_trigger isn't EXACT_TIME.
  """
  REMAINING_BALANCE_CHARGE_EXACT_TIME_NOT_ALLOWED

  """
  A fixed billing policy's remaining_balance_charge_time_after_checkout must be
  present and greater than zero when the remaining_balance_charge_trigger is
  TIME_AFTER_CHECKOUT.
  """
  REMAINING_BALANCE_CHARGE_TIME_AFTER_CHECKOUT_MUST_BE_GREATER_THAN_ZERO

  """
  A fixed billing policy's remaining_balance_charge_trigger must be
  NO_REMAINING_BALANCE when the checkout_charge_type is PERCENTAGE and
  checkout_charge_value is 100.
  """
  REMAINING_BALANCE_CHARGE_TRIGGER_ON_FULL_CHECKOUT

  """
  A fixed billing policy's remaining_balance_charge_trigger can't be
  NO_REMAINING_BALANCE when the checkout_charge_type is PERCENTAGE and
  checkout_charge_value is less than 100.
  """
  REMAINING_BALANCE_CHARGE_TRIGGER_NO_REMAINING_BALANCE_ON_PARTIAL_PERCENTAGE_CHECKOUT_CHARGE

  """
  A fixed billing policy's remaining_balance_charge_trigger can't be
  NO_REMAINING_BALANCE when the checkout_charge_type is PRICE.
  """
  REMAINING_BALANCE_CHARGE_TRIGGER_NO_REMAINING_BALANCE_ON_PRICE_CHECKOUT_CHARGE

  """
  A fixed billing policy's fulfillment_exact_time can't be blank when the fulfillment_trigger is EXACT_TIME.
  """
  FULFILLMENT_EXACT_TIME_REQUIRED

  """
  A fixed billing policy's fulfillment_exact_time must not be present when the fulfillment_trigger isn't EXACT_TIME.
  """
  FULFILLMENT_EXACT_TIME_NOT_ALLOWED

  """
  A fixed delivery policy's anchors must not be present when the fulfillment_trigger isn't ANCHOR.
  """
  SELLING_PLAN_ANCHORS_NOT_ALLOWED

  """
  A fixed delivery policy's anchors must be present when the fulfillment_trigger is ANCHOR.
  """
  SELLING_PLAN_ANCHORS_REQUIRED

  """A selling plan can't have both fixed and recurring billing policies."""
  ONLY_ONE_OF_FIXED_OR_RECURRING_BILLING

  """A selling plan can't have both fixed and recurring delivery policies."""
  ONLY_ONE_OF_FIXED_OR_RECURRING_DELIVERY
}

"""The input fields to create or update a selling plan."""
input SellingPlanInput {
  """ID of the selling plan."""
  id: ID

  """Buyer facing string which describes the selling plan content."""
  name: String

  """Buyer facing string which describes the selling plan commitment."""
  description: String

  """Selling plan policy which describes the billing details."""
  billingPolicy: SellingPlanBillingPolicyInput

  """A selling plan policy which describes the delivery details."""
  deliveryPolicy: SellingPlanDeliveryPolicyInput

  """A selling plan policy which describes the inventory details."""
  inventoryPolicy: SellingPlanInventoryPolicyInput

  """
  The pricing policies which describe the pricing details. Each selling plan
  can only contain a maximum of 2 pricing policies.
  """
  pricingPolicies: [SellingPlanPricingPolicyInput!]

  """
  The values of all options available on the selling plan. Selling plans are
  grouped together in Liquid when they're created by the same app, and have the
  same `selling_plan_group.name` and `selling_plan_group.options` values.
  """
  options: [String!]

  """
  Relative value for display purposes of this plan. A lower position will be displayed before a higher one.
  """
  position: Int

  """
  The category used to classify this selling plan for reporting purposes.
  """
  category: SellingPlanCategory
}

"""Represents valid selling plan interval."""
enum SellingPlanInterval {
  """Day interval."""
  DAY

  """Week interval."""
  WEEK

  """Month interval."""
  MONTH

  """Year interval."""
  YEAR
}

"""The selling plan inventory policy."""
type SellingPlanInventoryPolicy {
  """When to reserve inventory for the order."""
  reserve: SellingPlanReserve!
}

"""The input fields required to create or update an inventory policy."""
input SellingPlanInventoryPolicyInput {
  """
  When to reserve inventory for the order. The value must be ON_FULFILLMENT or ON_SALE.
  """
  reserve: SellingPlanReserve
}

"""
Represents the type of pricing associated to the selling plan (for example, a $10 or 20% discount that is set
for a limited period or that is fixed for the duration of the subscription). Selling plan pricing policies and
associated records (selling plan groups, selling plans, billing policy, and delivery policy) are deleted 48
hours after a merchant uninstalls their subscriptions app. We recommend backing up these records if you need
to restore them later.
"""
union SellingPlanPricingPolicy = SellingPlanFixedPricingPolicy | SellingPlanRecurringPricingPolicy

"""Represents a selling plan pricing policy adjustment type."""
enum SellingPlanPricingPolicyAdjustmentType {
  """Percentage off adjustment."""
  PERCENTAGE

  """Fixed amount off adjustment."""
  FIXED_AMOUNT

  """Price of the policy."""
  PRICE
}

"""Represents a selling plan pricing policy adjustment value type."""
union SellingPlanPricingPolicyAdjustmentValue = MoneyV2 | SellingPlanPricingPolicyPercentageValue

"""Represents selling plan pricing policy common fields."""
interface SellingPlanPricingPolicyBase {
  """The price adjustment type."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!

  """The price adjustment value."""
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!
}

"""
The input fields required to create or update a selling plan pricing policy.
"""
input SellingPlanPricingPolicyInput {
  """Recurring pricing policy details."""
  recurring: SellingPlanRecurringPricingPolicyInput

  """Fixed pricing policy details."""
  fixed: SellingPlanFixedPricingPolicyInput
}

"""The percentage value of a selling plan pricing policy percentage type."""
type SellingPlanPricingPolicyPercentageValue {
  """The percentage value."""
  percentage: Float!
}

"""
The input fields required to create or update a pricing policy adjustment value.
"""
input SellingPlanPricingPolicyValueInput {
  """The percentage value."""
  percentage: Float

  """The fixed value for an fixed amount off or a new policy price."""
  fixedValue: Decimal
}

"""Represents a recurring selling plan billing policy."""
type SellingPlanRecurringBillingPolicy {
  """
  Specific anchor dates upon which the billing interval calculations should be made.
  """
  anchors: [SellingPlanAnchor!]!

  """The date and time when the selling plan billing policy was created."""
  createdAt: DateTime!

  """The billing frequency, it can be either: day, week, month or year."""
  interval: SellingPlanInterval!

  """The number of intervals between billings."""
  intervalCount: Int!

  """Maximum number of billing iterations."""
  maxCycles: Int

  """Minimum number of billing iterations."""
  minCycles: Int
}

"""
The input fields required to create or update a recurring billing policy.
"""
input SellingPlanRecurringBillingPolicyInput {
  """The billing frequency, it can be either: day, week, month or year."""
  interval: SellingPlanInterval

  """The number of intervals between billings."""
  intervalCount: Int

  """
  Specific anchor dates upon which the billing interval calculations should be made.
  """
  anchors: [SellingPlanAnchorInput!]

  """Minimum number of billing iterations."""
  minCycles: Int

  """Maximum number of billing iterations."""
  maxCycles: Int
}

"""Represents a recurring selling plan delivery policy."""
type SellingPlanRecurringDeliveryPolicy {
  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchor!]!

  """The date and time when the selling plan delivery policy was created."""
  createdAt: DateTime!

  """
  Number of days which represent a buffer period for orders to be included in a cycle.
  """
  cutoff: Int

  """
  Whether the delivery policy is merchant or buyer-centric.
  Buyer-centric delivery policies state the time when the buyer will receive the goods.
  Merchant-centric delivery policies state the time when the fulfillment should be started.
  Currently, only merchant-centric delivery policies are supported.
  """
  intent: SellingPlanRecurringDeliveryPolicyIntent!

  """The delivery frequency, it can be either: day, week, month or year."""
  interval: SellingPlanInterval!

  """The number of intervals between deliveries."""
  intervalCount: Int!

  """
  The fulfillment or delivery behavior of the first fulfillment when the order
  is placed before the anchor. The default value for this field is `ASAP`.
  """
  preAnchorBehavior: SellingPlanRecurringDeliveryPolicyPreAnchorBehavior!
}

"""The input fields to create or update a recurring delivery policy."""
input SellingPlanRecurringDeliveryPolicyInput {
  """The delivery frequency, it can be either: day, week, month or year."""
  interval: SellingPlanInterval

  """The number of intervals between deliveries."""
  intervalCount: Int

  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchorInput!]

  """A buffer period for orders to be included in a cycle."""
  cutoff: Int

  """
  Intention of this delivery policy, it can be either: delivery or fulfillment.
  """
  intent: SellingPlanRecurringDeliveryPolicyIntent

  """The pre-anchor behavior. It can be either: asap or next."""
  preAnchorBehavior: SellingPlanRecurringDeliveryPolicyPreAnchorBehavior
}

"""Whether the delivery policy is merchant or buyer-centric."""
enum SellingPlanRecurringDeliveryPolicyIntent {
  """
  A merchant-centric delivery policy. Mark this delivery policy to define when the merchant should start fulfillment.
  """
  FULFILLMENT_BEGIN
}

"""
The fulfillment or delivery behaviors of the first fulfillment when the orderis placed before the anchor.
"""
enum SellingPlanRecurringDeliveryPolicyPreAnchorBehavior {
  """
  The orders placed can be fulfilled or delivered immediately. The orders placed
  inside a cutoff can be fulfilled or delivered at the next anchor.
  """
  ASAP

  """
  The orders placed can be fulfilled or delivered at the next anchor date.
  The orders placed inside a cutoff will skip the next anchor and can be fulfilled or
  delivered at the following anchor.
  """
  NEXT
}

"""Represents a recurring selling plan pricing policy."""
type SellingPlanRecurringPricingPolicy implements SellingPlanPricingPolicyBase {
  """The price adjustment type."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!

  """The price adjustment value."""
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!

  """Cycle after which this pricing policy applies."""
  afterCycle: Int

  """
  The date and time when the recurring selling plan pricing policy was created.
  """
  createdAt: DateTime!
}

"""
The input fields required to create or update a recurring selling plan pricing policy.
"""
input SellingPlanRecurringPricingPolicyInput {
  """ID of the pricing policy."""
  id: ID

  """Price adjustment type defined by the policy."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType

  """Price adjustment value defined by the policy."""
  adjustmentValue: SellingPlanPricingPolicyValueInput

  """Cycle after which the pricing policy applies."""
  afterCycle: Int!
}

"""When to capture the payment for the remaining amount due."""
enum SellingPlanRemainingBalanceChargeTrigger {
  """When there's no remaining balance to be charged after checkout."""
  NO_REMAINING_BALANCE

  """
  At an exact time defined by the remaining_balance_charge_exact_time field.
  """
  EXACT_TIME

  """
  After the duration defined by the remaining_balance_charge_time_after_checkout field.
  """
  TIME_AFTER_CHECKOUT
}

"""When to reserve inventory for a selling plan."""
enum SellingPlanReserve {
  """Reserve inventory when order is fulfilled."""
  ON_FULFILLMENT

  """Reserve inventory at time of sale."""
  ON_SALE
}

"""SEO information."""
type SEO {
  """SEO Description."""
  description: String

  """SEO Title."""
  title: String
}

"""The input fields for SEO information."""
input SEOInput {
  """SEO title of the product."""
  title: String

  """SEO description of the product."""
  description: String
}

"""The class of the discount for combining purposes."""
enum ShippingDiscountClass {
  """Combined as a shipping discount."""
  SHIPPING
}

"""
Represents the shipping details that the customer chose for their order.
"""
type ShippingLine {
  """
  A reference to the carrier service that provided the rate.
  Present when the rate was computed by a third-party carrier service.
  """
  carrierIdentifier: String

  """A reference to the shipping method."""
  code: String

  """Whether the shipping line is custom or not."""
  custom: Boolean!

  """The general classification of the delivery method."""
  deliveryCategory: String

  """The discounts that have been allocated to the shipping line."""
  discountAllocations: [DiscountAllocation!]!

  """The pre-tax shipping price with discounts applied."""
  discountedPrice: MoneyV2! @deprecated(reason: "Use `discountedPriceSet` instead.")

  """The pre-tax shipping price with discounts applied."""
  discountedPriceSet: MoneyBag!

  """A globally-unique ID."""
  id: ID

  """The pre-tax shipping price without any discounts applied."""
  originalPrice: MoneyV2! @deprecated(reason: "Use `originalPriceSet` instead.")

  """The pre-tax shipping price without any discounts applied."""
  originalPriceSet: MoneyBag!

  """The phone number at the shipping address."""
  phone: String

  """Returns the price of the shipping line."""
  price: Money! @deprecated(reason: "Use `originalPriceSet` instead.")

  """
  The fulfillment service requested for the shipping method.
  Present if the shipping method requires processing by a third party fulfillment service.
  """
  requestedFulfillmentService: FulfillmentService

  """
  A unique identifier for the shipping rate. The format can change without notice and isn't meant to be shown to users.
  """
  shippingRateHandle: String

  """Returns the rate source for the shipping line."""
  source: String

  """The TaxLine objects connected to this shipping line."""
  taxLines: [TaxLine!]!

  """Returns the title of the shipping line."""
  title: String!
}

"""An auto-generated type for paginating through multiple ShippingLines."""
type ShippingLineConnection {
  """A list of edges."""
  edges: [ShippingLineEdge!]!

  """A list of the nodes contained in ShippingLineEdge."""
  nodes: [ShippingLine!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ShippingLine and a cursor during pagination.
"""
type ShippingLineEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ShippingLineEdge."""
  node: ShippingLine!
}

"""The input fields for specifying the shipping details for the order."""
input ShippingLineInput {
  """Price of the shipping rate."""
  price: Money

  """A unique identifier for the shipping rate."""
  shippingRateHandle: String

  """Title of the shipping rate."""
  title: String
}

"""A sale associated with a shipping charge."""
type ShippingLineSale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """
  The shipping line item for the associated sale. `shippingLine` is not available if the `SaleActionType` is a return.
  """
  shippingLine: ShippingLine

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""
The shipping method for the delivery. Customers will see applicable shipping methods in the shipping section of checkout.
"""
type ShippingMethod {
  """A unique code associated with the rate. For example: `expedited_mail`"""
  code: String!

  """
  A description of the rate, which customers will see at checkout.
  For example: `Local delivery`, `Free Express Worldwide`, `Includes tracking and insurance`.
  """
  label: String!
}

"""Return type for `shippingPackageDelete` mutation."""
type ShippingPackageDeletePayload {
  """The ID of the deleted shipping package."""
  deletedId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `shippingPackageMakeDefault` mutation."""
type ShippingPackageMakeDefaultPayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Type of a shipping package."""
enum ShippingPackageType {
  """A shipping box."""
  BOX

  """A flat rate packaging supplied by a carrier."""
  FLAT_RATE

  """An envelope."""
  ENVELOPE

  """A soft-pack, bubble-wrap or vinyl envelope."""
  SOFT_PACK
}

"""Return type for `shippingPackageUpdate` mutation."""
type ShippingPackageUpdatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
A shipping rate is an additional cost added to the cost of the products that were ordered.
"""
type ShippingRate {
  """Human-readable unique identifier for this shipping rate."""
  handle: String!

  """The cost associated with the shipping rate."""
  price: MoneyV2!

  """The name of the shipping rate."""
  title: String!
}

"""Represents the shipping costs refunded on the Refund."""
type ShippingRefund {
  """The monetary value of the shipping fees to be refunded."""
  amount: Money! @deprecated(reason: "Use `amountSet` instead.")

  """
  The monetary value of the shipping fees to be refunded in shop and presentment currencies.
  """
  amountSet: MoneyBag!

  """The maximum amount of shipping fees currently refundable."""
  maximumRefundable: Money! @deprecated(reason: "Use `maximumRefundableSet` instead.")

  """
  The maximum amount of shipping fees currently refundable in shop and presentment currencies.
  """
  maximumRefundableSet: MoneyBag!

  """
  The monetary value of the tax allocated to shipping fees to be refunded.
  """
  tax: Money! @deprecated(reason: "Use `taxSet` instead.")

  """
  The monetary value of the tax allocated to shipping fees to be refunded in shop and presentment currencies.
  """
  taxSet: MoneyBag!
}

"""The input fields that are required to reimburse shipping costs."""
input ShippingRefundInput {
  """The monetary value of the shipping fees to be reimbursed."""
  amount: Money

  """Whether a full refund is provided."""
  fullRefund: Boolean
}

"""
Represents a collection of general settings and information about the shop.
"""
type Shop implements HasMetafields & HasPublishedTranslations & Node {
  """
  A list of the shop's active alert messages that appear in the Shopify admin.
  """
  alerts: [ShopAlert!]!

  """
  A list of the shop's product categories. Limit: 1000 product categories.
  """
  allProductCategories: [ProductCategory!]!

  """The token required to query the shop's reports or dashboards."""
  analyticsToken: String! @deprecated(reason: "Not supported anymore.")

  """
  The paginated list of fulfillment orders assigned to the shop locations owned by the app.
  
  Assigned fulfillment orders are fulfillment orders that are set to be fulfilled from locations
  managed by
  [fulfillment services](https://shopify.dev/api/admin-graphql/latest/objects/FulfillmentService)
  that are registered by the app.
  One app (api_client) can host multiple fulfillment services on a shop.
  Each fulfillment service manages a dedicated location on a shop.
  Assigned fulfillment orders can have associated
  [fulfillment requests](https://shopify.dev/api/admin-graphql/latest/enums/FulfillmentOrderRequestStatus),
  or might currently not be requested to be fulfilled.
  
  The app must have `read_assigned_fulfillment_orders`
  [access scope](https://shopify.dev/docs/api/usage/access-scopes)
  to be able to retrieve fulfillment orders assigned to its locations.
  
  All assigned fulfillment orders (except those with the `CLOSED` status) will be returned by default.
  Perform filtering with the `assignmentStatus` argument
  to receive only fulfillment orders that have been requested to be fulfilled.
  """
  assignedFulfillmentOrders(
    """
    The assigment status of the fulfillment orders that should be returned.
    If `assignmentStatus` argument is not provided, then
    the query will return all assigned fulfillment orders,
    except those that have the `CLOSED` status.
    """
    assignmentStatus: FulfillmentOrderAssignmentStatus

    """
    Returns fulfillment orders only for certain locations, specified by a list of location IDs.
    """
    locationIds: [ID!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: FulfillmentOrderSortKeys = ID
  ): FulfillmentOrderConnection!

  """The list of sales channels not currently installed on the shop."""
  availableChannelApps(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): AppConnection!

  """The shop's billing address information."""
  billingAddress: ShopAddress!

  """Exposes the number of channels."""
  channelCount: Int! @deprecated(reason: "Use `publicationCount` instead.")

  """List of all channel definitions associated with a shop."""
  channelDefinitionsForInstalledChannels: [AvailableChannelDefinitionsByChannel!]!

  """List of the shop's active sales channels."""
  channels(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ChannelConnection! @deprecated(reason: "Use `QueryRoot.channels` instead.")

  """Specifies whether the shop supports checkouts via Checkout API."""
  checkoutApiSupported: Boolean!

  """Return a collection by its handle."""
  collectionByHandle(
    """The handle of the collection."""
    handle: String!
  ): Collection @deprecated(reason: "Use `QueryRoot.collectionByHandle` instead.")

  """List of the shop's collection saved searches."""
  collectionSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.collectionSavedSearches` instead.")

  """List of the shop's collections."""
  collections(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CollectionSortKeys = ID

    """
    Supported filter parameters:
     - `collection_type`
     - `product_publication_status`
     - `publishable_status`
     - `published_status`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): CollectionConnection! @deprecated(reason: "Use `QueryRoot.collections` instead.")

  """
  The public-facing contact email address for the shop.
  Customers will use this email to communicate with the shop owner.
  """
  contactEmail: String!

  """Countries that have been defined in shipping zones for the shop."""
  countriesInShippingZones: CountriesInShippingZones!

  """The three letter code for the currency that the shop sells in."""
  currencyCode: CurrencyCode!

  """How currencies are displayed on your store."""
  currencyFormats: CurrencyFormats!

  """
  The presentment currency settings for the shop excluding the shop's own currency.
  """
  currencySettings(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): CurrencySettingConnection!

  """
  Whether customer accounts are required, optional, or disabled for the shop.
  """
  customerAccounts: ShopCustomerAccountsSetting!

  """List of the shop's customer saved searches."""
  customerSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CustomerSavedSearchSortKeys = ID

    """
    Supported filter parameters:
     - `name`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.customerSavedSearches` instead.")

  """A list of tags that have been added to customer accounts."""
  customerTags(
    """Returns up to the first `n` elements from the list."""
    first: Int!
  ): StringConnection!

  """Customer accounts associated to the shop."""
  customers(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: CustomerSortKeys = ID

    """
    Supported filter parameters:
     - `accepts_marketing`
     - `country`
     - `customer_date`
     - `email`
     - `last_abandoned_order_date`
     - `order_date`
     - `orders_count`
     - `phone`
     - `state`
     - `tag`
     - `tag_not`
     - `total_spent`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): CustomerConnection! @deprecated(reason: "Use `QueryRoot.customers` instead.")

  """The shop's meta description used in search engine results."""
  description: String

  """The domains configured for the shop."""
  domains: [Domain!]! @deprecated(reason: "Use `domainsPaginated` instead.")

  """List of the shop's draft order saved searches."""
  draftOrderSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.draftOrderSavedSearches` instead.")

  """A list of tags that have been added to draft orders."""
  draftOrderTags(
    """Returns up to the first `n` elements from the list."""
    first: Int!
  ): StringConnection!

  """List of saved draft orders on the shop."""
  draftOrders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: DraftOrderSortKeys = ID

    """
    Supported filter parameters:
     - `created_at`
     - `customer_id`
     - `source`
     - `status`
     - `tag`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): DraftOrderConnection! @deprecated(reason: "Use `QueryRoot.draftOrders` instead.")

  """
  The shop owner's email address.
  Shopify will use this email address to communicate with the shop owner.
  """
  email: String!

  """The presentment currencies enabled for the shop."""
  enabledPresentmentCurrencies: [CurrencyCode!]!

  """The set of features enabled for the shop."""
  features: ShopFeatures!

  """
  The paginated list of merchant-managed and third-party fulfillment orders.
  """
  fulfillmentOrders(
    """Whether to include closed fulfillment orders."""
    includeClosed: Boolean = false

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: FulfillmentOrderSortKeys = ID

    """
    Supported filter parameters:
     - `assigned_location_id`
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): FulfillmentOrderConnection! @deprecated(reason: "Use `QueryRoot.fulfillmentOrders` instead.")

  """List of the shop's installed fulfillment services."""
  fulfillmentServices: [FulfillmentService!]!

  """The shop's time zone as defined by the IANA."""
  ianaTimezone: String!

  """A globally-unique ID."""
  id: ID!

  """List of the shop's inventory items."""
  inventoryItems(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `created_at`
     - `id`
     - `sku`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): InventoryItemConnection! @deprecated(reason: "Use `QueryRoot.inventoryItems` instead.")

  """
  The number of pendings orders on the shop.
  Limited to a maximum of 10000.
  """
  limitedPendingOrderCount: LimitedPendingOrderCount!

  """List of active locations of the shop."""
  locations(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: LocationSortKeys = NAME

    """
    Supported filter parameters:
     - `active`
     - `address1`
     - `address2`
     - `city`
     - `country`
     - `legacy`
     - `name`
     - `province`
     - `zip`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """If true, also include the legacy locations of fulfillment services."""
    includeLegacy: Boolean = false

    """If true, also include the locations that are deactivated."""
    includeInactive: Boolean = false
  ): LocationConnection! @deprecated(reason: "Use `QueryRoot.locations` instead.")

  """List of a shop's marketing events."""
  marketingEvents(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: MarketingEventSortKeys = ID

    """
    Supported filter parameters:
     - `app_id`
     - `description`
     - `started_at`
     - `type`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): MarketingEventConnection! @deprecated(reason: "Use `QueryRoot.marketingEvents` instead.")

  """The approval signals for a shop to support onboarding to channel apps."""
  merchantApprovalSignals: MerchantApprovalSignals

  """Returns a metafield by namespace and key that belongs to the resource."""
  metafield(
    """The namespace for the metafield."""
    namespace: String

    """The key for the metafield."""
    key: String!
  ): Metafield

  """List of metafields that belong to the resource."""
  metafields(
    """The metafield namespace to filter by."""
    namespace: String

    """
    List of keys of metafields in the format `namespace.key`, will be returned in the same format.
    """
    keys: [String!]

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): MetafieldConnection!

  """The shop's .myshopify.com domain name."""
  myshopifyDomain: String!

  """The shop's name."""
  name: String!

  """The shop's settings related to navigation."""
  navigationSettings: [NavigationItem!]!

  """The prefix that appears before order numbers."""
  orderNumberFormatPrefix: String!

  """The suffix that appears after order numbers."""
  orderNumberFormatSuffix: String!

  """List of the shop's order saved searches."""
  orderSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.orderSavedSearches` instead.")

  """A list of tags that have been added to orders."""
  orderTags(
    """Returns up to the first `n` elements from the list."""
    first: Int!

    """Sort type."""
    sort: ShopTagSort = ALPHABETICAL
  ): StringConnection!

  """A list of the shop's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: OrderSortKeys = PROCESSED_AT

    """
    Supported filter parameters:
     - `cart_token`
     - `channel`
     - `channel_id`
     - `chargeback_status`
     - `checkout_token`
     - `confirmation_number`
     - `created_at`
     - `credit_card_last4`
     - `customer_id`
     - `delivery_method`
     - `discount_code`
     - `earliest_fulfill_by`
     - `email`
     - `financial_status`
     - `fraud_protection_level`
     - `fulfillment_location_id`
     - `fulfillment_status`
     - `gateway`
     - `location_id`
     - `name`
     - `payment_id`
     - `payment_provider_id`
     - `po_number`
     - `processed_at`
     - `reference_location_id`
     - `return_status`
     - `risk_level`
     - `sales_channel`
     - `sku`
     - `source_identifier`
     - `source_name`
     - `status`
     - `tag`
     - `tag_not`
     - `test`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): OrderConnection! @deprecated(reason: "Use `QueryRoot.orders` instead.")

  """The shop's settings related to payments."""
  paymentSettings: PaymentSettings!

  """Number of pending orders on the shop."""
  pendingOrderCount: Int! @deprecated(reason: "Use `limitedPendingOrderCount` instead.")

  """The shop's billing plan."""
  plan: ShopPlan!

  """List of the shop's price rule saved searches."""
  priceRuleSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.priceRuleSavedSearches` instead.")

  """List of the shop’s price rules."""
  priceRules(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: PriceRuleSortKeys = ID

    """
    Supported filter parameters:
     - `combines_with`
     - `created_at`
     - `discount_type`
     - `ends_at`
     - `starts_at`
     - `status`
     - `times_used`
     - `title`
     - `updated_at`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): PriceRuleConnection! @deprecated(reason: "Use `QueryRoot.priceRules` instead.")

  """The primary domain of the shop's online store."""
  primaryDomain: Domain!

  """
  Returns a private metafield by namespace and key that belongs to the resource.
  """
  privateMetafield(
    """The namespace for the private metafield."""
    namespace: String!

    """The key for the private metafield."""
    key: String!
  ): PrivateMetafield @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """List of private metafields that belong to the resource."""
  privateMetafields(
    """Filter the private metafields by namespace."""
    namespace: String

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): PrivateMetafieldConnection! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """Return a product by its handle."""
  productByHandle(
    """
    A unique string that identifies the product. Handles are automatically
    generated based on the product's title, and are always lowercase. Whitespace
    and special characters are replaced with a hyphen: `-`. If there are
    multiple consecutive whitespace or special characters, then they're replaced
    with a single hyphen. Whitespace or special characters at the beginning are
    removed. If a duplicate product title is used, then the handle is
    auto-incremented by one. For example, if you had two products called
    `Potion`, then their handles would be `potion` and `potion-1`. After a
    product has been created, changing the product title doesn't update the handle.
    """
    handle: String!
  ): Product @deprecated(reason: "Use `QueryRoot.productByHandle` instead.")

  """The list of all images of all products for the shop."""
  productImages(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductImageSortKeys = CREATED_AT
  ): ImageConnection!

  """List of the shop's product saved searches."""
  productSavedSearches(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SavedSearchConnection! @deprecated(reason: "Use `QueryRoot.productSavedSearches` instead.")

  """A list of tags that have been added to products."""
  productTags(
    """Returns up to the first `n` elements from the list."""
    first: Int!
  ): StringConnection!

  """The list of types added to products."""
  productTypes(
    """Returns up to the first `n` elements from the list."""
    first: Int!
  ): StringConnection!

  """List of the shop's product variants."""
  productVariants(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductVariantSortKeys = ID

    """
    Supported filter parameters:
     - `barcode`
     - `collection`
     - `delivery_profile_id`
     - `exclude_composite`
     - `exclude_variants_with_components`
     - `gift_card`
     - `inventory_quantity`
     - `location_id`
     - `managed`
     - `managed_by`
     - `option1`
     - `option2`
     - `option3`
     - `product_id`
     - `product_ids`
     - `product_publication_status`
     - `product_status`
     - `product_type`
     - `publishable_status`
     - `published_status`
     - `requires_components`
     - `sku`
     - `tag`
     - `tag_not`
     - `taxable`
     - `title`
     - `updated_at`
     - `vendor`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): ProductVariantConnection! @deprecated(reason: "Use `QueryRoot.productVariants` instead.")

  """The list of vendors added to products."""
  productVendors(
    """Returns up to the first `n` elements from the list."""
    first: Int!
  ): StringConnection!

  """List of the shop's products."""
  products(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: ProductSortKeys = ID

    """
    Supported filter parameters:
     - `barcode`
     - `bundles`
     - `created_at`
     - `delivery_profile_id`
     - `error_feedback`
     - `gift_card`
     - `has_only_composites`
     - `has_only_default_variant`
     - `has_variant_with_components`
     - `id`
     - `inventory_total`
     - `is_price_reduced`
     - `out_of_stock_somewhere`
     - `price`
     - `product_configuration_owner`
     - `product_publication_status`
     - `product_type`
     - `publishable_status`
     - `published_status`
     - `sku`
     - `status`
     - `tag`
     - `tag_not`
     - `title`
     - `updated_at`
     - `vendor`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String

    """
    The ID of an existing saved search.
    The search’s query string is used as the query argument.
    Refer to [SavedSearch](https://shopify.dev/api/admin-graphql/latest/objects/savedsearch).
    """
    savedSearchId: ID
  ): ProductConnection! @deprecated(reason: "Use `QueryRoot.products`.")

  """The number of publications for the shop."""
  publicationCount: Int!

  """
  The shop's limits for specific resources. For example, the maximum number
  ofvariants allowed per product, or the maximum number of locations allowed.
  """
  resourceLimits: ShopResourceLimits!

  """The URL of the rich text editor that can be used for mobile devices."""
  richTextEditorUrl: URL!

  """Fetches a list of admin search results by a specified query."""
  search(
    """The search query to filter by."""
    query: String!

    """The search result types to filter by."""
    types: [SearchResultType!]

    """Returns up to the first `n` elements from the list."""
    first: Int!

    """Returns the elements that come after the specified cursor."""
    after: String
  ): SearchResultConnection!

  """
  The list of search filter options for the shop. These can be used to filter productvisibility for the shop.
  """
  searchFilters: SearchFilterOptions!

  """Whether the shop has outstanding setup steps."""
  setupRequired: Boolean!

  """The list of countries that the shop ships to."""
  shipsToCountries: [CountryCode!]!

  """The list of all legal policies associated with a shop."""
  shopPolicies: [ShopPolicy!]!

  """Shopify Payments account information, including balances and payouts."""
  shopifyPaymentsAccount: ShopifyPaymentsAccount @deprecated(reason: "Use `QueryRoot.shopifyPaymentsAccount` instead.")

  """The paginated list of the shop's staff members."""
  staffMembers(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): StaffMemberConnection!

  """
  The storefront access token of a private application. These are scoped per-application.
  """
  storefrontAccessTokens(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): StorefrontAccessTokenConnection!

  """The URL of the shop's storefront."""
  storefrontUrl: URL! @deprecated(reason: "Use `url` instead.")

  """Whether the shop charges taxes for shipping."""
  taxShipping: Boolean!

  """Whether applicable taxes are included in the shop's product prices."""
  taxesIncluded: Boolean!

  """The shop's time zone abbreviation."""
  timezoneAbbreviation: String!

  """The shop's time zone offset."""
  timezoneOffset: String!

  """The shop's time zone offset expressed as a number of minutes."""
  timezoneOffsetMinutes: Int!

  """
  Whether transactional SMS sent by Shopify have been disabled for a shop.
  """
  transactionalSmsDisabled: Boolean!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The shop's unit system for weights and measures."""
  unitSystem: UnitSystem!

  """Fetches a list of images uploaded to the shop by their IDs."""
  uploadedImagesByIds(
    """The IDs of the uploaded images."""
    imageIds: [ID!]!
  ): [Image!]!

  """The URL of the shop's online store."""
  url: URL!

  """The shop's primary unit of weight for products and shipping."""
  weightUnit: WeightUnit!
}

"""The shop's billing address."""
type ShopAddress implements Node {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the company or organization."""
  company: String

  """Whether the address coordinates are valid."""
  coordinatesValidated: Boolean!

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  
  For example, US.
  """
  countryCode: String @deprecated(reason: "Use `countryCodeV2` instead.")

  """
  The two-letter code for the country of the address.
  
  For example, US.
  """
  countryCodeV2: CountryCode

  """The first name."""
  firstName: String @deprecated(reason: "Always null in this context.")

  """
  A formatted version of the address, customized by the provided arguments.
  """
  formatted(
    """Whether to include the company in the formatted address."""
    withCompany: Boolean = true
  ): [String!]!

  """A comma-separated list of the values for city, province, and country."""
  formattedArea: String

  """A globally-unique ID."""
  id: ID!

  """The last name."""
  lastName: String @deprecated(reason: "Always null in this context.")

  """The latitude coordinate of the address."""
  latitude: Float

  """The longitude coordinate of the address."""
  longitude: Float

  """The full name, based on firstName and lastName."""
  name: String @deprecated(reason: "Always null in this context.")

  """
  A phone number associated with the address.
  
  Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """
  The two-letter code for the region.
  
  For example, ON.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""
An alert message that appears in the Shopify admin about a problem with a store
setting, with an action to take. For example, you could show an alert to ask the
merchant to enter their billing information to activate Shopify Plus.
"""
type ShopAlert {
  """
  The text for the button in the alert that links to related information. For example, _Add credit card_.
  """
  action: ShopAlertAction!

  """
  A description of the alert and further information, such as whether the merchant will be charged.
  """
  description: String!
}

"""An action associated to a shop alert, such as adding a credit card."""
type ShopAlertAction {
  """The text for the button in the alert. For example, _Add credit card_."""
  title: String!

  """The target URL that the button links to."""
  url: URL!
}

"""
Possible branding of a shop.
Branding can be used to define the look of a shop including its styling and logo in the Shopify Admin.
"""
enum ShopBranding {
  """Shop has Shopify Gold branding."""
  SHOPIFY_GOLD

  """Shop has Shopify Plus branding."""
  SHOPIFY_PLUS

  """Shop has Rogers branding."""
  ROGERS

  """Shop has Shopify branding."""
  SHOPIFY
}

"""Represents the shop's customer account requirement preference."""
enum ShopCustomerAccountsSetting {
  REQUIRED
  OPTIONAL
  DISABLED
}

"""
Represents the feature set available to the shop.
Most fields specify whether a feature is enabled for a shop, and some fields return information
related to specific features.
"""
type ShopFeatures {
  """Whether a shop has access to Avalara AvaTax."""
  avalaraAvatax: Boolean!

  """
  The branding of the shop, which influences its look and feel in the Shopify admin.
  """
  branding: ShopBranding!

  """Whether a shop's online store can have CAPTCHA protection."""
  captcha: Boolean!

  """
  Whether a shop's online store can have CAPTCHA protection for domains not managed by Shopify.
  """
  captchaExternalDomains: Boolean!

  """Whether the delivery profiles functionality is enabled for this shop."""
  deliveryProfiles: Boolean! @deprecated(reason: "Delivery profiles are now 100% enabled across Shopify.")

  """
  Whether a shop has access to the Google Analytics dynamic remarketing feature.
  """
  dynamicRemarketing: Boolean!

  """Whether a shop can be migrated to use Shopify subscriptions."""
  eligibleForSubscriptionMigration: Boolean!

  """Whether a shop is configured properly to sell subscriptions."""
  eligibleForSubscriptions: Boolean!

  """Whether a shop can create gift cards."""
  giftCards: Boolean!

  """
  Whether a shop displays Harmonized System codes on products. This is used for customs when shipping
  internationally.
  """
  harmonizedSystemCode: Boolean!

  """Whether a shop can enable international domains."""
  internationalDomains: Boolean!

  """Whether a shop can enable international price overrides."""
  internationalPriceOverrides: Boolean!

  """Whether a shop can enable international price rules."""
  internationalPriceRules: Boolean!

  """
  Whether a shop has enabled a legacy subscription gateway to handle older subscriptions.
  """
  legacySubscriptionGatewayEnabled: Boolean!

  """
  Whether to show the Live View metrics in the Shopify admin. Live view is hidden from merchants that are on a trial
  or don't have a storefront.
  """
  liveView: Boolean!

  """Whether a shop has multi-location functionality."""
  multiLocation: Boolean! @deprecated(reason: "All shops support multi-location inventory. Use `QueryRoot.locations` to determine whether shop has more than one location.\n")

  """Whether a shop has access to the onboarding visual."""
  onboardingVisual: Boolean!

  """
  Whether a shop is configured to sell subscriptions with PayPal Express.
  """
  paypalExpressSubscriptionGatewayStatus: PaypalExpressSubscriptionsGatewayStatus!

  """Whether a shop has access to all reporting features."""
  reports: Boolean!

  """Whether a shop has ever had subscription products."""
  sellsSubscriptions: Boolean!

  """Whether the shop has a Shopify Plus subscription."""
  shopifyPlus: Boolean! @deprecated(reason: "Use Shop.plan.shopifyPlus instead.")

  """
  Whether to show metrics in the Shopify admin. Metrics are hidden for new merchants until they become meaningful.
  """
  showMetrics: Boolean!

  """Whether a shop has an online store."""
  storefront: Boolean!

  """Whether a shop is using Shopify Balance."""
  usingShopifyBalance: Boolean!
}

"""
Balance and payout information for a
[Shopify Payments](https://help.shopify.com/manual/payments/shopify-payments/getting-paid-with-shopify-payments)
account. Balance includes all balances for the currencies supported by the shop.
You can also query for a list of payouts, where each payout includes the corresponding currencyCode field.
"""
type ShopifyPaymentsAccount implements Node {
  """Whether the Shopify Payments setup is completed."""
  activated: Boolean!

  """Current balances in all currencies for the account."""
  balance: [MoneyV2!]!

  """All bank accounts configured for the Shopify Payments account."""
  bankAccounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ShopifyPaymentsBankAccountConnection!

  """
  The statement descriptor used for charges.
  
  The statement descriptor appears on a customer's credit card or bank statement when they make a purchase.
  """
  chargeStatementDescriptor: String @deprecated(reason: "Use `chargeStatementDescriptors` instead.")

  """
  The statement descriptors used for charges.
  
  These descriptors appear on a customer's credit card or bank statement when they make a purchase.
  """
  chargeStatementDescriptors: ShopifyPaymentsChargeStatementDescriptor

  """The Shopify Payments account country."""
  country: String!

  """The default payout currency for the Shopify Payments account."""
  defaultCurrency: CurrencyCode!

  """All disputes related to the Shopify Payments account."""
  disputes(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """
    Supported filter parameters:
     - `id`
     - `initiated_at`
     - `status`
    
    See the detailed [search syntax](https://shopify.dev/api/usage/search-syntax)
    for more information about using filters.
    """
    query: String
  ): ShopifyPaymentsDisputeConnection!

  """The fraud settings of the Shopify Payments account."""
  fraudSettings: ShopifyPaymentsFraudSettings!

  """A globally-unique ID."""
  id: ID!

  """The notifications settings for the account."""
  notificationSettings: ShopifyPaymentsNotificationSettings!

  """Whether the Shopify Payments account can be onboarded."""
  onboardable: Boolean!

  """The payout schedule for the account."""
  payoutSchedule: ShopifyPaymentsPayoutSchedule!

  """
  The descriptor used for payouts.
  
  The descriptor appears on a merchant's bank statement when they receive a payout.
  """
  payoutStatementDescriptor: String

  """
  All current and previous payouts made between the account and the bank account.
  """
  payouts(
    """Filter the direction of the payout."""
    transactionType: ShopifyPaymentsPayoutTransactionType

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ShopifyPaymentsPayoutConnection!

  """The permitted documents for identity verification."""
  permittedVerificationDocuments: [ShopifyPaymentsVerificationDocument!]!

  """The verifications necessary for this account."""
  verifications: [ShopifyPaymentsVerification!]!
}

"""A bank account that can receive payouts."""
type ShopifyPaymentsBankAccount implements Node {
  """The account number of the bank account."""
  accountNumber: String!

  """The last digits of the account number (the rest is redacted)."""
  accountNumberLastDigits: String!

  """The name of the bank."""
  bankName: String

  """The country of the bank."""
  country: CountryCode!

  """The date that the bank account was created."""
  createdAt: DateTime!

  """The currency of the bank account."""
  currency: CurrencyCode!

  """A globally-unique ID."""
  id: ID!

  """
  All current and previous payouts made between the account and the bank account.
  """
  payouts(
    """Filter the direction of the payout."""
    transactionType: ShopifyPaymentsPayoutTransactionType

    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): ShopifyPaymentsPayoutConnection!

  """The routing number of the bank account."""
  routingNumber: String!

  """The status of the bank account."""
  status: ShopifyPaymentsBankAccountStatus!
}

"""
An auto-generated type for paginating through multiple ShopifyPaymentsBankAccounts.
"""
type ShopifyPaymentsBankAccountConnection {
  """A list of edges."""
  edges: [ShopifyPaymentsBankAccountEdge!]!

  """A list of the nodes contained in ShopifyPaymentsBankAccountEdge."""
  nodes: [ShopifyPaymentsBankAccount!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ShopifyPaymentsBankAccount and a cursor during pagination.
"""
type ShopifyPaymentsBankAccountEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ShopifyPaymentsBankAccountEdge."""
  node: ShopifyPaymentsBankAccount!
}

"""The bank account status."""
enum ShopifyPaymentsBankAccountStatus {
  """A bank account that hasn't had any activity and that's not validated."""
  NEW

  """It was determined that the bank account exists."""
  VALIDATED

  """Bank account validation was successful."""
  VERIFIED

  """A payout to the bank account failed."""
  ERRORED
}

"""The charge descriptors for a payments account."""
interface ShopifyPaymentsChargeStatementDescriptor {
  """The default charge statement descriptor."""
  default: String

  """The prefix of the statement descriptor."""
  prefix: String!
}

"""The charge descriptors for a payments account."""
type ShopifyPaymentsDefaultChargeStatementDescriptor implements ShopifyPaymentsChargeStatementDescriptor {
  """The default charge statement descriptor."""
  default: String

  """The prefix of the statement descriptor."""
  prefix: String!
}

"""
A dispute occurs when a buyer questions the legitimacy of a charge with their financial institution.
"""
type ShopifyPaymentsDispute implements LegacyInteroperability & Node {
  """The total amount disputed by the cardholder."""
  amount: MoneyV2!

  """The deadline for evidence submission."""
  evidenceDueBy: Date

  """
  The date when evidence was sent. Returns null if evidence hasn't yet been sent.
  """
  evidenceSentOn: Date

  """
  The date when this dispute was resolved. Returns null if the dispute isn't yet resolved.
  """
  finalizedOn: Date

  """A globally-unique ID."""
  id: ID!

  """The date when this dispute was initiated."""
  initiatedAt: DateTime!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The order that contains the charge that's under dispute."""
  order: Order

  """The reason of the dispute."""
  reasonDetails: ShopifyPaymentsDisputeReasonDetails!

  """The current state of the dispute."""
  status: DisputeStatus!

  """
  Indicates if this dispute is still in the inquiry phase or has turned into a chargeback.
  """
  type: DisputeType!
}

"""
An auto-generated type for paginating through multiple ShopifyPaymentsDisputes.
"""
type ShopifyPaymentsDisputeConnection {
  """A list of edges."""
  edges: [ShopifyPaymentsDisputeEdge!]!

  """A list of the nodes contained in ShopifyPaymentsDisputeEdge."""
  nodes: [ShopifyPaymentsDispute!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ShopifyPaymentsDispute and a cursor during pagination.
"""
type ShopifyPaymentsDisputeEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ShopifyPaymentsDisputeEdge."""
  node: ShopifyPaymentsDispute!
}

"""The evidence associated with the dispute."""
type ShopifyPaymentsDisputeEvidence implements Node {
  """The activity logs associated with the dispute evidence."""
  accessActivityLog: String

  """The billing address that's provided by the customer."""
  billingAddress: MailingAddress

  """
  The cancellation policy disclosure associated with the dispute evidence.
  """
  cancellationPolicyDisclosure: String

  """The cancellation policy file associated with the dispute evidence."""
  cancellationPolicyFile: ShopifyPaymentsDisputeFileUpload

  """The cancellation rebuttal associated with the dispute evidence."""
  cancellationRebuttal: String

  """The customer communication file associated with the dispute evidence."""
  customerCommunicationFile: ShopifyPaymentsDisputeFileUpload

  """The customer's email address."""
  customerEmailAddress: String

  """The customer's first name."""
  customerFirstName: String

  """The customer's last name."""
  customerLastName: String

  """The customer purchase ip for this dispute evidence."""
  customerPurchaseIp: String

  """The dispute associated with the evidence."""
  dispute: ShopifyPaymentsDispute!

  """The file uploads associated with the dispute evidence."""
  disputeFileUploads: [ShopifyPaymentsDisputeFileUpload!]!

  """The fulfillments associated with the dispute evidence."""
  fulfillments: [ShopifyPaymentsDisputeFulfillment!]!

  """A globally-unique ID."""
  id: ID!

  """The product description for this dispute evidence."""
  productDescription: String

  """The refund policy disclosure associated with the dispute evidence."""
  refundPolicyDisclosure: String

  """The refund policy file associated with the dispute evidence."""
  refundPolicyFile: ShopifyPaymentsDisputeFileUpload

  """The refund refusal explanation associated with dispute evidence."""
  refundRefusalExplanation: String

  """The service documentation file associated with the dispute evidence."""
  serviceDocumentationFile: ShopifyPaymentsDisputeFileUpload

  """The mailing address for shipping that's provided by the customer."""
  shippingAddress: MailingAddress

  """The shipping documentation file associated with the dispute evidence."""
  shippingDocumentationFile: ShopifyPaymentsDisputeFileUpload

  """Whether the dispute evidence is submitted."""
  submitted: Boolean!

  """The uncategorized file associated with the dispute evidence."""
  uncategorizedFile: ShopifyPaymentsDisputeFileUpload

  """The uncategorized text for the dispute evidence."""
  uncategorizedText: String
}

"""The possible dispute evidence file types."""
enum ShopifyPaymentsDisputeEvidenceFileType {
  """Customer Communication File."""
  CUSTOMER_COMMUNICATION_FILE

  """Refund Policy File."""
  REFUND_POLICY_FILE

  """Cancellation Policy File."""
  CANCELLATION_POLICY_FILE

  """Uncategorized File."""
  UNCATEGORIZED_FILE

  """Shipping Documentation File."""
  SHIPPING_DOCUMENTATION_FILE

  """Service Documentation File."""
  SERVICE_DOCUMENTATION_FILE
}

"""The input fields required to update a dispute evidence object."""
input ShopifyPaymentsDisputeEvidenceUpdateInput {
  """Customer email address."""
  customerEmailAddress: String

  """Customer last name."""
  customerLastName: String

  """Customer first name."""
  customerFirstName: String

  """The shipping address associated with the dispute evidence."""
  shippingAddress: MailingAddressInput

  """Uncategorized text."""
  uncategorizedText: String

  """Activity logs."""
  accessActivityLog: String

  """Cancellation policy disclosure."""
  cancellationPolicyDisclosure: String

  """Cancellation rebuttal."""
  cancellationRebuttal: String

  """Refund policy disclosure."""
  refundPolicyDisclosure: String

  """Refund refusal explanation."""
  refundRefusalExplanation: String

  """Cancellation policy file."""
  cancellationPolicyFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Customer communication file."""
  customerCommunicationFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Refund policy file."""
  refundPolicyFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Shipping documentation file."""
  shippingDocumentationFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Uncategorized file."""
  uncategorizedFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Service documentation file."""
  serviceDocumentationFile: ShopifyPaymentsDisputeFileUploadUpdateInput

  """Whether to submit the evidence."""
  submitEvidence: Boolean = false
}

"""The file upload associated with the dispute evidence."""
type ShopifyPaymentsDisputeFileUpload implements Node {
  """The type of the file for the dispute evidence."""
  disputeEvidenceType: ShopifyPaymentsDisputeEvidenceFileType

  """The file size."""
  fileSize: Int!

  """The file type."""
  fileType: String!

  """A globally-unique ID."""
  id: ID!

  """The original file name."""
  originalFileName: String

  """The URL for accessing the file."""
  url: URL!
}

"""The input fields required to update a dispute file upload object."""
input ShopifyPaymentsDisputeFileUploadUpdateInput {
  """The ID of the file upload to be updated."""
  id: ID!

  """Whether to delete this file upload."""
  destroy: Boolean = false
}

"""The fulfillment associated with dispute evidence."""
type ShopifyPaymentsDisputeFulfillment implements Node {
  """A globally-unique ID."""
  id: ID!

  """The shipping carrier for this fulfillment."""
  shippingCarrier: String

  """The shipping date for this fulfillment."""
  shippingDate: Date

  """The shipping tracking number for this fulfillment."""
  shippingTrackingNumber: String
}

"""The reason for the dispute provided by the cardholder's bank."""
enum ShopifyPaymentsDisputeReason {
  """The cardholder claims that they didn’t authorize the payment."""
  FRAUDULENT

  """
  The dispute is uncategorized, so you should contact the customer for
  additional details to find out why the payment was disputed.
  """
  GENERAL

  """
  The customer doesn’t recognize the payment appearing on their card statement.
  """
  UNRECOGNIZED

  """
  The customer claims they were charged multiple times for the same product or service.
  """
  DUPLICATE

  """
  The customer claims that you continued to charge them after a subscription was canceled.
  """
  SUBSCRIPTION_CANCELLED

  """
  The product or service was received but was defective, damaged, or not as described.
  """
  PRODUCT_UNACCEPTABLE

  """
  The customer claims they did not receive the products or services purchased.
  """
  PRODUCT_NOT_RECEIVED

  """
  The customer claims that the purchased product was returned or the transaction
  was otherwise canceled, but you haven't yet provided a refund or credit.
  """
  CREDIT_NOT_PROCESSED

  """The customer account associated with the purchase is incorrect."""
  INCORRECT_ACCOUNT_DETAILS

  """The customer's bank account has insufficient funds."""
  INSUFFICIENT_FUNDS

  """The customer's bank can't process the charge."""
  BANK_CANNOT_PROCESS

  """
  The customer's bank can't proceed with the debit since it hasn't been authorized.
  """
  DEBIT_NOT_AUTHORIZED

  """
  The customer initiated the dispute. Contact the customer for additional details on why the payment was disputed.
  """
  CUSTOMER_INITIATED
}

"""Details regarding a dispute reason."""
type ShopifyPaymentsDisputeReasonDetails {
  """The raw code provided by the payment network."""
  networkReasonCode: String

  """The reason for the dispute provided by the cardholder's banks."""
  reason: ShopifyPaymentsDisputeReason!
}

"""
Presents all Shopify Payments information related to an extended authorization.
"""
type ShopifyPaymentsExtendedAuthorization {
  """
  The time after which the extended authorization expires. After the expiry, the merchant is unable to capture the payment.
  """
  extendedAuthorizationExpiresAt: DateTime!

  """The time after which capture will incur an additional fee."""
  standardAuthorizationExpiresAt: DateTime!
}

"""The fraud settings of a payments account."""
type ShopifyPaymentsFraudSettings {
  """Decline a charge if there's an AVS failure."""
  declineChargeOnAvsFailure: Boolean!

  """Decline a charge if there's an CVC failure."""
  declineChargeOnCvcFailure: Boolean!
}

"""The charge descriptors for a Japanese payments account."""
type ShopifyPaymentsJpChargeStatementDescriptor implements ShopifyPaymentsChargeStatementDescriptor {
  """The default charge statement descriptor."""
  default: String

  """The charge statement descriptor in kana."""
  kana: String

  """The charge statement descriptor in kanji."""
  kanji: String

  """The prefix of the statement descriptor."""
  prefix: String!
}

"""The notification settings for the account."""
type ShopifyPaymentsNotificationSettings {
  """Receive email notifications when new payouts are sent or payouts fail."""
  payouts: Boolean!
}

"""
Payouts represent the movement of money between a merchant's Shopify
Payments balance and their bank account.
"""
type ShopifyPaymentsPayout implements LegacyInteroperability & Node {
  """The bank account for the payout."""
  bankAccount: ShopifyPaymentsBankAccount

  """The total amount and currency of the payout."""
  gross: MoneyV2! @deprecated(reason: "Use `net` instead.")

  """A globally-unique ID."""
  id: ID!

  """
  The exact time when the payout was issued. The payout only contains
  balance transactions that were available at this time.
  """
  issuedAt: DateTime!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """The total amount and currency of the payout."""
  net: MoneyV2!

  """The transfer status of the payout."""
  status: ShopifyPaymentsPayoutStatus!

  """The summary of the payout."""
  summary: ShopifyPaymentsPayoutSummary!

  """The direction of the payout."""
  transactionType: ShopifyPaymentsPayoutTransactionType!
}

"""
An auto-generated type for paginating through multiple ShopifyPaymentsPayouts.
"""
type ShopifyPaymentsPayoutConnection {
  """A list of edges."""
  edges: [ShopifyPaymentsPayoutEdge!]!

  """A list of the nodes contained in ShopifyPaymentsPayoutEdge."""
  nodes: [ShopifyPaymentsPayout!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one ShopifyPaymentsPayout and a cursor during pagination.
"""
type ShopifyPaymentsPayoutEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of ShopifyPaymentsPayoutEdge."""
  node: ShopifyPaymentsPayout!
}

"""The interval at which payouts are sent to the connected bank account."""
enum ShopifyPaymentsPayoutInterval {
  """Each business day."""
  DAILY

  """Each week, on the day of week specified by weeklyAnchor."""
  WEEKLY

  """Each month, on the day of month specified by monthlyAnchor."""
  MONTHLY

  """Payouts will not be automatically made."""
  MANUAL
}

"""The payment schedule for a payments account."""
type ShopifyPaymentsPayoutSchedule {
  """The interval at which payouts are sent to the connected bank account."""
  interval: ShopifyPaymentsPayoutInterval!

  """
  The day of the month funds will be paid out.
  
  The value can be any day of the month from the 1st to the 31st.
  If the payment interval is set to monthly, this value will be used.
  Payouts scheduled between 29-31st of the month are sent on the last day of shorter months.
  """
  monthlyAnchor: Int

  """
  The day of the week funds will be paid out.
  
  The value can be any weekday from Monday to Friday.
  If the payment interval is set to weekly, this value will be used.
  """
  weeklyAnchor: DayOfTheWeek
}

"""The transfer status of the payout."""
enum ShopifyPaymentsPayoutStatus {
  """
  The payout has been created and had transactions assigned to it, but
  it has not yet been submitted to the bank.
  """
  SCHEDULED

  """The payout has been submitted to the bank."""
  IN_TRANSIT

  """The payout has been successfully deposited into the bank."""
  PAID

  """The payout has been declined by the bank."""
  FAILED

  """The payout has been canceled by Shopify."""
  CANCELED
}

"""
Breakdown of the total fees and gross of each of the different types of transactions associated
with the payout.
"""
type ShopifyPaymentsPayoutSummary {
  """Total fees for all adjustments including disputes."""
  adjustmentsFee: MoneyV2!

  """Total gross amount for all adjustments including disputes."""
  adjustmentsGross: MoneyV2!

  """Total fees for all charges."""
  chargesFee: MoneyV2!

  """Total gross amount for all charges."""
  chargesGross: MoneyV2!

  """Total fees for all refunds."""
  refundsFee: MoneyV2!

  """Total gross amount for all refunds."""
  refundsFeeGross: MoneyV2!

  """Total fees for all reserved funds."""
  reservedFundsFee: MoneyV2!

  """Total gross amount for all reserved funds."""
  reservedFundsGross: MoneyV2!

  """Total fees for all retried payouts."""
  retriedPayoutsFee: MoneyV2!

  """Total gross amount for all retried payouts."""
  retriedPayoutsGross: MoneyV2!
}

"""The possible transaction types for a payout."""
enum ShopifyPaymentsPayoutTransactionType {
  """The payout is a deposit."""
  DEPOSIT

  """The payout is a withdrawal."""
  WITHDRAWAL
}

"""
Presents all Shopify Payments specific information related to an order refund.
"""
type ShopifyPaymentsRefundSet {
  """
  The acquirer reference number (ARN) code generated for Visa/Mastercard transactions.
  """
  acquirerReferenceNumber: String
}

"""
Presents all Shopify Payments specific information related to an order transaction.
"""
type ShopifyPaymentsTransactionSet {
  """Contains all fields related to an extended authorization."""
  extendedAuthorizationSet: ShopifyPaymentsExtendedAuthorization

  """Contains all fields related to a refund."""
  refundSet: ShopifyPaymentsRefundSet
}

"""
Each subject (individual) of an account has a verification object giving
 information about the verification state.
"""
type ShopifyPaymentsVerification implements Node {
  """A globally-unique ID."""
  id: ID!

  """The status of the verification."""
  status: ShopifyPaymentsVerificationStatus!

  """The subject/individual who has to be verified."""
  subject: ShopifyPaymentsVerificationSubject!
}

"""A document which can be used to verify an individual."""
type ShopifyPaymentsVerificationDocument {
  """True if the back side of the document is required."""
  backRequired: Boolean!

  """True if the front side of the document is required."""
  frontRequired: Boolean!

  """The type of the document which can be used for verification."""
  type: ShopifyPaymentsVerificationDocumentType!
}

"""The types of possible verification documents."""
enum ShopifyPaymentsVerificationDocumentType {
  """The subject's driver's license."""
  DRIVERS_LICENSE

  """A government's identification document of the subject."""
  GOVERNMENT_IDENTIFICATION

  """The subject's passport."""
  PASSPORT
}

"""The status of a verification."""
enum ShopifyPaymentsVerificationStatus {
  """The verification has been verified."""
  VERIFIED

  """The verification has not yet been verified."""
  UNVERIFIED

  """
  The verification request has been submitted but a response has not yet been given.
  """
  PENDING
}

"""
The verification subject represents an individual that has to be verified.
"""
type ShopifyPaymentsVerificationSubject {
  """The family name of the individual to verify."""
  familyName: String!

  """The given name of the individual to verify."""
  givenName: String!
}

"""A response to a ShopifyQL query."""
interface ShopifyqlResponse {
  """A list of parse errors, if parsing fails."""
  parseErrors: [ParseError!]

  """
  The result in a tabular format with schema and row data.
            To be used as a raw 2-dimensional response of the query.
            It's always present even if query has a `VISUALIZE` keyword.
  """
  tableData: TableData
}

"""A locale that's been enabled on a shop."""
type ShopLocale {
  """The locale ISO code."""
  locale: String!

  """The market web presences that use the locale."""
  marketWebPresences: [MarketWebPresence!]!

  """The human-readable locale name."""
  name: String!

  """Whether the locale is the default locale for the shop."""
  primary: Boolean!

  """Whether the locale is visible to buyers."""
  published: Boolean!
}

"""Return type for `shopLocaleDisable` mutation."""
type ShopLocaleDisablePayload {
  """ISO code of the locale that was deleted."""
  locale: String

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `shopLocaleEnable` mutation."""
type ShopLocaleEnablePayload {
  """ISO code of the locale that was enabled."""
  shopLocale: ShopLocale

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields for a shop locale."""
input ShopLocaleInput {
  """
  Whether the locale is published. Only published locales are visible to the buyer.
  """
  published: Boolean

  """
  The market web presences on which the locale should be enabled. Pass in an
  empty array to remove the locale across all market web presences.
  """
  marketWebPresenceIds: [ID!]
}

"""Return type for `shopLocaleUpdate` mutation."""
type ShopLocaleUpdatePayload {
  """The locale that was updated."""
  shopLocale: ShopLocale

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The billing plan of the shop."""
type ShopPlan {
  """The name of the shop's billing plan."""
  displayName: String!

  """Whether the shop is a partner development shop for testing purposes."""
  partnerDevelopment: Boolean!

  """Whether the shop has a Shopify Plus subscription."""
  shopifyPlus: Boolean!
}

"""
Policy that a merchant has configured for their store, such as their refund or privacy policy.
"""
type ShopPolicy implements HasPublishedTranslations & Node {
  """The text of the policy. The maximum size is 512kb."""
  body: HTML!

  """A globally-unique ID."""
  id: ID!

  """The translations associated with the resource."""
  translations(
    """Filters translations locale."""
    locale: String!

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [PublishedTranslation!]!

  """The shop policy type."""
  type: ShopPolicyType!

  """The public URL of the policy."""
  url: URL!
}

"""Possible error codes that can be returned by `ShopPolicyUserError`."""
enum ShopPolicyErrorCode {
  """The input value is too big."""
  TOO_BIG
}

"""The input fields required to update a policy."""
input ShopPolicyInput {
  """The shop policy type."""
  type: ShopPolicyType!

  """Policy text, maximum size of 512kb."""
  body: String!
}

"""Available shop policy types."""
enum ShopPolicyType {
  """The refund policy."""
  REFUND_POLICY

  """The shipping policy."""
  SHIPPING_POLICY

  """The privacy policy."""
  PRIVACY_POLICY

  """The terms of service."""
  TERMS_OF_SERVICE

  """The terms of sale."""
  TERMS_OF_SALE

  """The legal notice."""
  LEGAL_NOTICE

  """The purchase options cancellation policy."""
  SUBSCRIPTION_POLICY

  """The contact information."""
  CONTACT_INFORMATION
}

"""Return type for `shopPolicyUpdate` mutation."""
type ShopPolicyUpdatePayload {
  """The shop policy that has been updated."""
  shopPolicy: ShopPolicy

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ShopPolicyUserError!]!
}

"""An error that occurs during the execution of a shop policy mutation."""
type ShopPolicyUserError implements DisplayableError {
  """The error code."""
  code: ShopPolicyErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Return type for `shopResourceFeedbackCreate` mutation."""
type ShopResourceFeedbackCreatePayload {
  """The shop feedback that's created."""
  feedback: AppFeedback

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ShopResourceFeedbackCreateUserError!]!
}

"""
An error that occurs during the execution of `ShopResourceFeedbackCreate`.
"""
type ShopResourceFeedbackCreateUserError implements DisplayableError {
  """The error code."""
  code: ShopResourceFeedbackCreateUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `ShopResourceFeedbackCreateUserError`.
"""
enum ShopResourceFeedbackCreateUserErrorCode {
  """The feedback for a later version of the resource was already accepted."""
  OUTDATED_FEEDBACK

  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """The input value needs to be blank."""
  PRESENT
}

"""Resource limits of a shop."""
type ShopResourceLimits {
  """Maximum number of locations allowed."""
  locationLimit: Int!

  """Maximum number of product options allowed."""
  maxProductOptions: Int!

  """The maximum number of variants allowed per product."""
  maxProductVariants: Int!

  """
  Whether the shop has reached the limit of the number of URL redirects it can make for resources.
  """
  redirectLimitReached: Boolean!

  """
  The maximum number of variants allowed per shop. If the shop has unlimited
  SKUs, then the quantity used can't be retrieved.
  """
  skuResourceLimits: ResourceLimit!
}

"""Possible sort of tags."""
enum ShopTagSort {
  """Alphabetical sort."""
  ALPHABETICAL

  """Popularity sort."""
  POPULAR
}

"""
Represents the data about a staff member's Shopify account. Merchants can use
staff member data to get more information about the staff members in their store.
"""
type StaffMember implements Node {
  """Whether the staff member is active."""
  active: Boolean!

  """The image used as the staff member's avatar in the Shopify admin."""
  avatar(
    """The default image returned if the staff member has no avatar."""
    fallback: StaffMemberDefaultImage = DEFAULT
  ): Image!

  """The staff member's email address."""
  email: String!

  """Whether the staff member's account exists."""
  exists: Boolean!

  """The staff member's first name."""
  firstName: String

  """A globally-unique ID."""
  id: ID!

  """The staff member's initials, if available."""
  initials: [String!]

  """Whether the staff member is the shop owner."""
  isShopOwner: Boolean!

  """The staff member's last name."""
  lastName: String

  """
  The staff member's preferred locale. Locale values use the format `language`
  or `language-COUNTRY`, where `language` is a two-letter language code, and
  `COUNTRY` is a two-letter country code. For example: `en` or `en-US`
  """
  locale: String!

  """The staff member's full name."""
  name: String!

  """The staff member's phone number."""
  phone: String

  """
  The data used to customize the Shopify admin experience for the staff member.
  """
  privateData: StaffMemberPrivateData!
}

"""An auto-generated type for paginating through multiple StaffMembers."""
type StaffMemberConnection {
  """A list of edges."""
  edges: [StaffMemberEdge!]!

  """A list of the nodes contained in StaffMemberEdge."""
  nodes: [StaffMember!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
Represents the fallback avatar image for a staff member. This is used only if the staff member has no avatar image.
"""
enum StaffMemberDefaultImage {
  """Returns a default avatar image for the staff member."""
  DEFAULT

  """Returns a transparent avatar image for the staff member."""
  TRANSPARENT

  """Returns a URL that returns a 404 error if the image is not present."""
  NOT_FOUND
}

"""
An auto-generated type which holds one StaffMember and a cursor during pagination.
"""
type StaffMemberEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of StaffMemberEdge."""
  node: StaffMember!
}

"""Represents access permissions for a staff member."""
enum StaffMemberPermission {
  """The staff member can manage and install apps and channels."""
  APPLICATIONS

  """The staff member can manage and install sales channels."""
  CHANNELS

  """
  The staff member can view, create, update, and delete customers, and respond
  to customer messages in the Shopify Messaging API.
  """
  CUSTOMERS

  """
  The staff member can view the Shopify Home page, which includes sales information and other shop data.
  """
  DASHBOARD

  """The staff member can view, buy, and manage domains."""
  DOMAINS

  """The staff member can create, update, and delete draft orders."""
  DRAFT_ORDERS

  """The staff member can update orders."""
  EDIT_ORDERS

  """
  The staff has the same permissions as the [store owner](https://shopify.dev/en/manual/your-account/staff-accounts/staff-permissions#store-owner-permissions)
  with some exceptions, such as modifying the account billing or deleting staff accounts.
  """
  FULL @deprecated(reason: "Use the list of the staff member's explicit permissions returned in the `StaffMember.permissions.userPermissions` field instead of `full` permission.")

  """
  The staff member can view, create, issue, and export gift cards to a CSV file.
  """
  GIFT_CARDS

  """The staff member can view and modify links and navigation menus."""
  LINKS

  """
  The staff member can create, update, and delete locations where inventory is stocked or managed.
  """
  LOCATIONS

  """
  The staff member can view and create discount codes and automatic discounts, and export discounts to a CSV file.
  """
  MARKETING

  """The staff member can view, create, and automate marketing campaigns."""
  MARKETING_SECTION

  """
  The staff member can view, create, update, delete, and cancel orders, and
  receive order notifications. The staff member can still create draft orders
  without this permission.
  """
  ORDERS

  """
  The staff member can view the Overview and Live view pages,
              which include sales information, and other shop and sales channels data.
  """
  OVERVIEWS

  """
  The staff member can view, create, update, publish, and delete blog posts and pages.
  """
  PAGES

  """The staff member can pay for an order by using a vaulted card."""
  PAY_ORDERS_BY_VAULTED_CARD

  """The staff member can view the preferences and configuration of a shop."""
  PREFERENCES

  """
  The staff member can view, create, import, and update products, collections, and inventory.
  """
  PRODUCTS

  """
  The staff member can view and create all reports, which includes sales information and other shop data.
  """
  REPORTS

  """The staff member can view, update, and publish themes."""
  THEMES

  """The staff member can view and create translations."""
  TRANSLATIONS @deprecated(reason: "Unused.")
}

"""
Represents the data used to customize the Shopify admin experience for a logged-in staff member.
"""
type StaffMemberPrivateData {
  """The URL to the staff member's account settings page."""
  accountSettingsUrl: URL!

  """The date and time when the staff member was created."""
  createdAt: DateTime!

  """Access permissions for the staff member."""
  permissions: [StaffMemberPermission!]! @deprecated(reason: "Use StaffMember.permissions.userPermissions instead")
}

"""
Information about a staged upload target, which should be used to send a request to upload
the file.

For more information on the upload process, refer to
[Upload media to Shopify](https://shopify.dev/apps/online-store/media/products#step-1-upload-media-to-shopify).
"""
type StagedMediaUploadTarget {
  """Parameters needed to authenticate a request to upload the file."""
  parameters: [StagedUploadParameter!]!

  """
  The URL to be passed as `originalSource` in
  [CreateMediaInput](https://shopify.dev/api/admin-graphql/latest/input-objects/CreateMediaInput)
  and [FileCreateInput](https://shopify.dev/api/admin-graphql/2022-04/input-objects/FileCreateInput)
  for the [productCreateMedia](https://shopify.dev/api/admin-graphql/2022-04/mutations/productCreateMedia)
  and [fileCreate](https://shopify.dev/api/admin-graphql/2022-04/mutations/fileCreate)
  mutations.
  """
  resourceUrl: URL

  """
  The URL to use when sending an request to upload the file. Should be used in conjunction with
  the parameters field.
  """
  url: URL
}

"""
The possible HTTP methods that can be used when sending a request to upload a file using information from a
[StagedMediaUploadTarget](https://shopify.dev/api/admin-graphql/latest/objects/StagedMediaUploadTarget).
"""
enum StagedUploadHttpMethodType {
  """The POST HTTP method."""
  POST

  """The PUT HTTP method."""
  PUT
}

"""The input fields for generating staged upload targets."""
input StagedUploadInput {
  """The file's intended Shopify resource type."""
  resource: StagedUploadTargetGenerateUploadResource!

  """The file's name and extension."""
  filename: String!

  """The file's MIME type."""
  mimeType: String!

  """
  The HTTP method to be used when sending a request to upload the file using the returned staged
  upload target.
  """
  httpMethod: StagedUploadHttpMethodType = PUT

  """
  The size of the file to upload, in bytes. This is required when the request's resource property is set to
  [VIDEO](https://shopify.dev/api/admin-graphql/latest/enums/StagedUploadTargetGenerateUploadResource#value-video)
  or [MODEL_3D](https://shopify.dev/api/admin-graphql/latest/enums/StagedUploadTargetGenerateUploadResource#value-model3d).
  """
  fileSize: UnsignedInt64
}

"""
The parameters required to authenticate a file upload request using a
[StagedMediaUploadTarget's url field](https://shopify.dev/api/admin-graphql/latest/objects/StagedMediaUploadTarget#field-stagedmediauploadtarget-url).

For more information on the upload process, refer to
[Upload media to Shopify](https://shopify.dev/apps/online-store/media/products#step-1-upload-media-to-shopify).
"""
type StagedUploadParameter {
  """The parameter's name."""
  name: String!

  """The parameter's value."""
  value: String!
}

"""Return type for `stagedUploadsCreate` mutation."""
type StagedUploadsCreatePayload {
  """The staged upload targets that were generated."""
  stagedTargets: [StagedMediaUploadTarget!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
Information about the staged target.

Deprecated in favor of
[StagedMediaUploadTarget](https://shopify.dev/api/admin-graphql/latest/objects/StagedMediaUploadTarget),
which is returned by the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stagedUploadsCreate).
"""
type StagedUploadTarget {
  """The parameters of an image to be uploaded."""
  parameters: [ImageUploadParameter!]!

  """The image URL."""
  url: String!
}

"""
The required fields and parameters to generate the URL upload an"
asset to Shopify.

Deprecated in favor of
[StagedUploadInput](https://shopify.dev/api/admin-graphql/latest/objects/StagedUploadInput),
which is used by the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stagedUploadsCreate).
"""
input StagedUploadTargetGenerateInput {
  """The resource type being uploaded."""
  resource: StagedUploadTargetGenerateUploadResource!

  """The filename of the asset being uploaded."""
  filename: String!

  """The MIME type of the asset being uploaded."""
  mimeType: String!

  """The HTTP method to be used by the staged upload."""
  httpMethod: StagedUploadHttpMethodType = PUT

  """The size of the file to upload, in bytes."""
  fileSize: UnsignedInt64
}

"""Return type for `stagedUploadTargetGenerate` mutation."""
type StagedUploadTargetGeneratePayload {
  """The signed parameters that can be used to upload the asset."""
  parameters: [MutationsStagedUploadTargetGenerateUploadParameter!]!

  """The signed URL where the asset can be uploaded."""
  url: String!

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The resource type to receive."""
enum StagedUploadTargetGenerateUploadResource {
  """
  An image associated with a collection.
  
  For example, after uploading an image, you can use the
  [collectionUpdate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/collectionUpdate)
  to add the image to a collection.
  """
  COLLECTION_IMAGE

  """
  Represents any file other than HTML.
  
  For example, after uploading the file, you can add the file to the
  [Files page](https://shopify.com/admin/settings/files) in Shopify admin using the
  [fileCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/fileCreate).
  """
  FILE

  """
  An image.
  
  For example, after uploading an image, you can add the image to a product using the
  [productCreateMedia mutation](https://shopify.dev/api/admin-graphql/latest/mutations/productCreateMedia)
  or to the [Files page](https://shopify.com/admin/settings/files) in Shopify admin using the
  [fileCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/fileCreate).
  """
  IMAGE

  """
  A Shopify hosted 3d model.
  
  For example, after uploading the 3d model, you can add the 3d model to a product using the
  [productCreateMedia mutation](https://shopify.dev/api/admin-graphql/latest/mutations/productCreateMedia).
  """
  MODEL_3D

  """
  An image that's associated with a product.
  
  For example, after uploading the image, you can add the image to a product using the
  [productCreateMedia mutation](https://shopify.dev/api/admin-graphql/latest/mutations/productCreateMedia).
  """
  PRODUCT_IMAGE

  """
  An image.
  
  For example, after uploading the image, you can add the image to the
  [Files page](https://shopify.com/admin/settings/files) in Shopify admin using the
  [fileCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/fileCreate).
  """
  SHOP_IMAGE

  """
  A Shopify-hosted video.
  
  For example, after uploading the video, you can add the video to a product using the
  [productCreateMedia mutation](https://shopify.dev/api/admin-graphql/latest/mutations/productCreateMedia)
  or to the [Files page](https://shopify.com/admin/settings/files) in Shopify admin using the
  [fileCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/fileCreate).
  """
  VIDEO

  """
  Represents bulk mutation variables.
  
  For example, bulk mutation variables can be used for bulk operations using the
  [bulkOperationRunMutation mutation](https://shopify.dev/api/admin-graphql/latest/mutations/bulkOperationRunMutation).
  """
  BULK_MUTATION_VARIABLES

  """
  Represents a label associated with a return.
  
  For example, once uploaded, this resource can be used to [create a
  ReverseDelivery](https://shopify.dev/api/admin-graphql/unstable/mutations/reverseDeliveryCreateWithShipping).
  """
  RETURN_LABEL

  """
  Represents a redirect CSV file.
  
  Example usage: This resource can be used for creating a
  [UrlRedirectImport](https://shopify.dev/api/admin-graphql/2022-04/objects/UrlRedirectImport)
  object for use in the
  [urlRedirectImportCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/urlRedirectImportCreate).
  """
  URL_REDIRECT_IMPORT
}

"""Return type for `stagedUploadTargetsGenerate` mutation."""
type StagedUploadTargetsGeneratePayload {
  """The staged upload targets that were generated."""
  urls: [StagedUploadTarget!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An image to be uploaded.

Deprecated in favor of
[StagedUploadInput](https://shopify.dev/api/admin-graphql/latest/objects/StagedUploadInput),
which is used by the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stagedUploadsCreate).
"""
input StageImageInput {
  """The image resource."""
  resource: StagedUploadTargetGenerateUploadResource!

  """The image filename."""
  filename: String!

  """The image MIME type."""
  mimeType: String!

  """HTTP method to be used by the staged upload."""
  httpMethod: StagedUploadHttpMethodType = PUT
}

"""
Represents the details of a specific type of product within the [Shopify product
taxonomy](https://help.shopify.com/txt/product_taxonomy/en.txt).
"""
type StandardizedProductType {
  """
  The product taxonomy node associated with the standardized product type.
  """
  productTaxonomyNode: ProductTaxonomyNode
}

"""
Provides the fields and values to use when adding a standard product type to a
product. The [Shopify product
taxonomy](https://help.shopify.com/txt/product_taxonomy/en.txt) contains the
full list of available values.
"""
input StandardizedProductTypeInput {
  """
  The ID of the node in the Shopify taxonomy that represents the product type.
  """
  productTaxonomyNodeId: ID!
}

"""Return type for `standardMetafieldDefinitionEnable` mutation."""
type StandardMetafieldDefinitionEnablePayload {
  """The metafield definition that was created."""
  createdDefinition: MetafieldDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [StandardMetafieldDefinitionEnableUserError!]!
}

"""
An error that occurs during the execution of `StandardMetafieldDefinitionEnable`.
"""
type StandardMetafieldDefinitionEnableUserError implements DisplayableError {
  """The error code."""
  code: StandardMetafieldDefinitionEnableUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `StandardMetafieldDefinitionEnableUserError`.
"""
enum StandardMetafieldDefinitionEnableUserErrorCode {
  """The input value is invalid."""
  INVALID

  """The input value is already taken."""
  TAKEN

  """The standard metafield definition template was not found."""
  TEMPLATE_NOT_FOUND

  """The maximum number of definitions per owner type has been exceeded."""
  LIMIT_EXCEEDED

  """The namespace and key is already in use for a set of your metafields."""
  UNSTRUCTURED_ALREADY_EXISTS

  """
  The definition type is not eligible to be used as collection condition.
  """
  TYPE_NOT_ALLOWED_FOR_CONDITIONS
}

"""
Standard metafield definition templates provide preset configurations to create metafield definitions.
Each template has a specific namespace and key that we've reserved to have specific meanings for common use cases.

Refer to the [list of standard metafield definitions](https://shopify.dev/apps/metafields/definitions/standard-definitions).
"""
type StandardMetafieldDefinitionTemplate implements Node {
  """The description of the standard metafield definition."""
  description: String

  """A globally-unique ID."""
  id: ID!

  """
  The key owned by the definition after the definition has been activated.
  """
  key: String!

  """The human-readable name for the standard metafield definition."""
  name: String!

  """
  The namespace owned by the definition after the definition has been activated.
  """
  namespace: String!

  """
  The list of resource types that the standard metafield definition can be applied to.
  """
  ownerTypes: [MetafieldOwnerType!]!

  """
  The associated [metafield definition
  type](https://shopify.dev/apps/metafields/definitions/types) that the
  metafield stores.
  """
  type: MetafieldDefinitionType!

  """The configured validations for the standard metafield definition."""
  validations: [MetafieldDefinitionValidation!]!

  """
  Whether metafields for the definition are by default visible using the Storefront API.
  """
  visibleToStorefrontApi: Boolean!
}

"""
An auto-generated type for paginating through multiple StandardMetafieldDefinitionTemplates.
"""
type StandardMetafieldDefinitionTemplateConnection {
  """A list of edges."""
  edges: [StandardMetafieldDefinitionTemplateEdge!]!

  """
  A list of the nodes contained in StandardMetafieldDefinitionTemplateEdge.
  """
  nodes: [StandardMetafieldDefinitionTemplate!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one StandardMetafieldDefinitionTemplate and a cursor during pagination.
"""
type StandardMetafieldDefinitionTemplateEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of StandardMetafieldDefinitionTemplateEdge."""
  node: StandardMetafieldDefinitionTemplate!
}

"""Return type for `standardMetaobjectDefinitionEnable` mutation."""
type StandardMetaobjectDefinitionEnablePayload {
  """
  The metaobject definition that was enabled using the standard template.
  """
  metaobjectDefinition: MetaobjectDefinition

  """The list of errors that occurred from executing the mutation."""
  userErrors: [MetaobjectUserError!]!
}

"""
A token that's used to delegate unauthenticated access scopes to clients that need to access
the unauthenticated Storefront API. An app can have a maximum of 100 active storefront access
tokens for each shop.
"""
type StorefrontAccessToken implements Node {
  """List of permissions associated with the token."""
  accessScopes: [AccessScope!]!

  """The issued public access token."""
  accessToken: String!

  """The date and time when the public access token was created."""
  createdAt: DateTime!

  """A globally-unique ID."""
  id: ID!

  """
  An arbitrary title for each token determined by the developer, used for reference         purposes.
  """
  title: String!

  """The date and time when the storefront access token was updated."""
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple StorefrontAccessTokens.
"""
type StorefrontAccessTokenConnection {
  """A list of edges."""
  edges: [StorefrontAccessTokenEdge!]!

  """A list of the nodes contained in StorefrontAccessTokenEdge."""
  nodes: [StorefrontAccessToken!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `storefrontAccessTokenCreate` mutation."""
type StorefrontAccessTokenCreatePayload {
  """The user's shop."""
  shop: Shop!

  """The storefront access token."""
  storefrontAccessToken: StorefrontAccessToken

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""The input fields to delete a storefront access token."""
input StorefrontAccessTokenDeleteInput {
  """The ID of the storefront access token to delete."""
  id: ID!
}

"""Return type for `storefrontAccessTokenDelete` mutation."""
type StorefrontAccessTokenDeletePayload {
  """The ID of the deleted storefront access token."""
  deletedStorefrontAccessTokenId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one StorefrontAccessToken and a cursor during pagination.
"""
type StorefrontAccessTokenEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of StorefrontAccessTokenEdge."""
  node: StorefrontAccessToken!
}

"""The input fields for a storefront access token."""
input StorefrontAccessTokenInput {
  """A title for the storefront access token."""
  title: String!
}

"""
Represents a unique identifier in the Storefront API. A `StorefrontID` value can
be used wherever an ID is expected in the Storefront API.

Example value: `"Z2lkOi8vc2hvcGlmeS9Qcm9kdWN0LzEwMDc5Nzg1MTAw"`.
"""
scalar StorefrontID

"""An auto-generated type for paginating through a list of Strings."""
type StringConnection {
  """A list of edges."""
  edges: [StringEdge!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one String and a cursor during pagination.
"""
type StringEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of StringEdge."""
  node: String!
}

"""Represents an applied code discount."""
type SubscriptionAppliedCodeDiscount {
  """The unique ID."""
  id: ID!

  """The redeem code of the discount that applies on the subscription."""
  redeemCode: String!

  """The reason that the discount on the subscription draft is rejected."""
  rejectionReason: SubscriptionDiscountRejectionReason
}

"""
A record of an execution of the subscription billing process. Billing attempts use
idempotency keys to avoid duplicate order creation. A successful billing attempt
will create an order.
"""
type SubscriptionBillingAttempt implements Node {
  """The date and time when the billing attempt was completed."""
  completedAt: DateTime

  """The date and time when the billing attempt was created."""
  createdAt: DateTime!

  """A code corresponding to a payment error during processing."""
  errorCode: SubscriptionBillingAttemptErrorCode

  """A message describing a payment error during processing."""
  errorMessage: String

  """A globally-unique ID."""
  id: ID!

  """A unique key generated by the client to avoid duplicate payments."""
  idempotencyKey: String!

  """
  The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow.
  """
  nextActionUrl: URL

  """The result of this billing attempt if completed successfully."""
  order: Order

  """
  The date and time used to calculate fulfillment intervals for a billing attempt that
  successfully completed after the current anchor date. To prevent fulfillment from being
  pushed to the next anchor date, this field can override the billing attempt date.
  """
  originTime: DateTime

  """Whether the billing attempt is still processing."""
  ready: Boolean!

  """The subscription contract."""
  subscriptionContract: SubscriptionContract!
}

"""
An auto-generated type for paginating through multiple SubscriptionBillingAttempts.
"""
type SubscriptionBillingAttemptConnection {
  """A list of edges."""
  edges: [SubscriptionBillingAttemptEdge!]!

  """A list of the nodes contained in SubscriptionBillingAttemptEdge."""
  nodes: [SubscriptionBillingAttempt!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `subscriptionBillingAttemptCreate` mutation."""
type SubscriptionBillingAttemptCreatePayload {
  """The subscription billing attempt."""
  subscriptionBillingAttempt: SubscriptionBillingAttempt

  """The list of errors that occurred from executing the mutation."""
  userErrors: [BillingAttemptUserError!]!
}

"""
An auto-generated type which holds one SubscriptionBillingAttempt and a cursor during pagination.
"""
type SubscriptionBillingAttemptEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionBillingAttemptEdge."""
  node: SubscriptionBillingAttempt!
}

"""
The possible error codes associated with making billing attempts. The error codes supplement the
`error_message` to provide consistent results and help with dunning management.
"""
enum SubscriptionBillingAttemptErrorCode {
  """Payment method was not found."""
  PAYMENT_METHOD_NOT_FOUND

  """Payment provider is not enabled."""
  PAYMENT_PROVIDER_IS_NOT_ENABLED

  """
  Payment method is invalid. Please update or create a new payment method.
  """
  INVALID_PAYMENT_METHOD

  """There was an unexpected error during the billing attempt."""
  UNEXPECTED_ERROR

  """Payment method is expired."""
  EXPIRED_PAYMENT_METHOD

  """Payment method was declined by processor."""
  PAYMENT_METHOD_DECLINED

  """There was an error during the authentication."""
  AUTHENTICATION_ERROR

  """Gateway is in test mode and attempted to bill a live payment method."""
  TEST_MODE

  """Payment method was canceled by buyer."""
  BUYER_CANCELED_PAYMENT_METHOD

  """Customer was not found."""
  CUSTOMER_NOT_FOUND

  """Customer is invalid."""
  CUSTOMER_INVALID

  """The shipping address is either missing or invalid."""
  INVALID_SHIPPING_ADDRESS

  """
  The billing agreement ID or the transaction ID for the customer's payment method is invalid.
  """
  INVALID_CUSTOMER_BILLING_AGREEMENT

  """A payment has already been made for this invoice."""
  INVOICE_ALREADY_PAID

  """
  Payment method cannot be used with the current payment gateway test mode configuration.
  """
  PAYMENT_METHOD_INCOMPATIBLE_WITH_GATEWAY_CONFIG

  """The amount is too small."""
  AMOUNT_TOO_SMALL

  """No inventory location found or enabled."""
  INVENTORY_ALLOCATIONS_NOT_FOUND
}

"""The input fields required to complete a subscription billing attempt."""
input SubscriptionBillingAttemptInput {
  """
  A unique key generated by the client to avoid duplicate payments. For more
  information, refer to [Idempotent
  requests](https://shopify.dev/api/usage/idempotent-requests).
  """
  idempotencyKey: String!

  """
  The date and time used to calculate fulfillment intervals for a billing attempt that
  successfully completed after the current anchor date. To prevent fulfillment from being
  pushed to the next anchor date, this field can override the billing attempt date.
  """
  originTime: DateTime

  """
  Select the specific billing cycle to be billed.
  Default to bill the current billing cycle if not specified.
  """
  billingCycleSelector: SubscriptionBillingCycleSelector
}

"""A subscription billing cycle."""
type SubscriptionBillingCycle {
  """The date on which the billing attempt is expected to be made."""
  billingAttemptExpectedDate: DateTime!

  """The list of billing attempts associated with the billing cycle."""
  billingAttempts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionBillingAttemptConnection!

  """The end date of the billing cycle."""
  cycleEndAt: DateTime!

  """The index of the billing cycle."""
  cycleIndex: Int!

  """The start date of the billing cycle."""
  cycleStartAt: DateTime!

  """Whether this billing cycle was edited."""
  edited: Boolean!

  """The active edited contract for the billing cycle."""
  editedContract: SubscriptionBillingCycleEditedContract

  """Whether this billing cycle was skipped."""
  skipped: Boolean!

  """The subscription contract that the billing cycle belongs to."""
  sourceContract: SubscriptionContract!

  """The status of the billing cycle."""
  status: SubscriptionBillingCycleBillingCycleStatus!
}

"""The possible status values of a subscription billing cycle."""
enum SubscriptionBillingCycleBillingCycleStatus {
  """The billing cycle is billed."""
  BILLED

  """The billing cycle hasn't been billed."""
  UNBILLED
}

"""
An auto-generated type for paginating through multiple SubscriptionBillingCycles.
"""
type SubscriptionBillingCycleConnection {
  """A list of edges."""
  edges: [SubscriptionBillingCycleEdge!]!

  """A list of the nodes contained in SubscriptionBillingCycleEdge."""
  nodes: [SubscriptionBillingCycle!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
Return type for `subscriptionBillingCycleContractDraftCommit` mutation.
"""
type SubscriptionBillingCycleContractDraftCommitPayload {
  """The committed Subscription Billing Cycle Edited Contract object."""
  contract: SubscriptionBillingCycleEditedContract

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""
Return type for `subscriptionBillingCycleContractDraftConcatenate` mutation.
"""
type SubscriptionBillingCycleContractDraftConcatenatePayload {
  """The Subscription Draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionBillingCycleContractEdit` mutation."""
type SubscriptionBillingCycleContractEditPayload {
  """The draft subscription contract object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""
An auto-generated type which holds one SubscriptionBillingCycle and a cursor during pagination.
"""
type SubscriptionBillingCycleEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionBillingCycleEdge."""
  node: SubscriptionBillingCycle!
}

"""Return type for `subscriptionBillingCycleEditDelete` mutation."""
type SubscriptionBillingCycleEditDeletePayload {
  """The list of updated billing cycles."""
  billingCycles: [SubscriptionBillingCycle!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionBillingCycleUserError!]!
}

"""Represents a subscription contract with billing cycles."""
type SubscriptionBillingCycleEditedContract implements SubscriptionContractBase {
  """The subscription app that the subscription contract is registered to."""
  app: App

  """The URL of the subscription contract page on the subscription app."""
  appAdminUrl: URL

  """The billing cycles that the edited contract belongs to."""
  billingCycles(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: SubscriptionBillingCyclesSortKeys = CYCLE_INDEX
  ): SubscriptionBillingCycleConnection!

  """The date and time when the subscription contract was created."""
  createdAt: DateTime!

  """The currency that's used for the subscription contract."""
  currencyCode: CurrencyCode!

  """A list of the custom attributes to be added to the generated orders."""
  customAttributes: [Attribute!]!

  """The customer to whom the subscription contract belongs."""
  customer: Customer

  """The customer payment method that's used for the subscription contract."""
  customerPaymentMethod(
    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false
  ): CustomerPaymentMethod

  """The delivery method for each billing of the subscription contract."""
  deliveryMethod: SubscriptionDeliveryMethod

  """The delivery price for each billing of the subscription contract."""
  deliveryPrice: MoneyV2!

  """
  The list of subscription discounts associated with the subscription contract.
  """
  discounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionManualDiscountConnection!

  """The number of lines associated with the subscription contract."""
  lineCount: Int!

  """
  The list of subscription lines associated with the subscription contract.
  """
  lines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """The note field that will be applied to the generated orders."""
  note: String

  """A list of the subscription contract's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): OrderConnection!

  """The date and time when the subscription contract was updated."""
  updatedAt: DateTime!
}

"""Return type for `subscriptionBillingCycleEditsDelete` mutation."""
type SubscriptionBillingCycleEditsDeletePayload {
  """The list of updated billing cycles."""
  billingCycles: [SubscriptionBillingCycle!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionBillingCycleUserError!]!
}

"""
Possible error codes that can be returned by `SubscriptionBillingCycleUserError`.
"""
enum SubscriptionBillingCycleErrorCode {
  """The input value is invalid."""
  INVALID

  """Can't find the billing cycle."""
  CYCLE_NOT_FOUND

  """
  There's no contract or schedule edit associated with the targeted billing cycle(s).
  """
  NO_CYCLE_EDITS

  """The index selector is invalid."""
  INVALID_CYCLE_INDEX

  """The date selector is invalid."""
  INVALID_DATE

  """
  Billing cycle schedule edit input provided is empty. Must take in parameters to modify schedule.
  """
  EMPTY_BILLING_CYCLE_EDIT_SCHEDULE_INPUT

  """Billing date cannot be set on skipped billing cycle."""
  BILLING_DATE_SET_ON_SKIPPED

  """
  Billing date of a cycle cannot be set to a value outside of its billing date range.
  """
  OUT_OF_BOUNDS

  """
  Billing cycle selector cannot select upcoming billing cycle past limit.
  """
  UPCOMING_CYCLE_LIMIT_EXCEEDED

  """
  Billing cycle selector cannot select billing cycle outside of index range.
  """
  CYCLE_INDEX_OUT_OF_RANGE

  """
  Billing cycle selector cannot select billing cycle outside of start date range.
  """
  CYCLE_START_DATE_OUT_OF_RANGE

  """Billing cycle has incomplete billing attempts in progress."""
  INCOMPLETE_BILLING_ATTEMPTS
}

"""
The input fields for specifying the subscription contract and selecting the associated billing cycle.
"""
input SubscriptionBillingCycleInput {
  """The ID of the subscription contract associated with the billing cycle."""
  contractId: ID!

  """Selects the billing cycle by date or index."""
  selector: SubscriptionBillingCycleSelector!
}

"""
The input fields for parameters to modify the schedule of a specific billing cycle.
"""
input SubscriptionBillingCycleScheduleEditInput {
  """Sets the skip status for the billing cycle."""
  skip: Boolean

  """Sets the expected billing date for the billing cycle."""
  billingDate: DateTime

  """The reason for editing."""
  reason: SubscriptionBillingCycleScheduleEditInputScheduleEditReason!
}

"""
The input fields for possible reasons for editing the billing cycle's schedule.
"""
enum SubscriptionBillingCycleScheduleEditInputScheduleEditReason {
  """Buyer initiated the schedule edit."""
  BUYER_INITIATED

  """Merchant initiated the schedule edit."""
  MERCHANT_INITIATED

  """Developer initiated the schedule edit."""
  DEV_INITIATED
}

"""Return type for `subscriptionBillingCycleScheduleEdit` mutation."""
type SubscriptionBillingCycleScheduleEditPayload {
  """The updated billing cycle."""
  billingCycle: SubscriptionBillingCycle

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionBillingCycleUserError!]!
}

"""
The input fields to select a subset of subscription billing cycles within a date range.
"""
input SubscriptionBillingCyclesDateRangeSelector {
  """The start date and time for the range."""
  startDate: DateTime!

  """The end date and time for the range."""
  endDate: DateTime!
}

"""
The input fields to select SubscriptionBillingCycle by either date or index.
"""
input SubscriptionBillingCycleSelector {
  """Returns a billing cycle by index."""
  index: Int

  """Returns a billing cycle by date."""
  date: DateTime
}

"""
The input fields to select a subset of subscription billing cycles within an index range.
"""
input SubscriptionBillingCyclesIndexRangeSelector {
  """The start index for the range."""
  startIndex: Int!

  """The end index for the range."""
  endIndex: Int!
}

"""The set of valid sort keys for the SubscriptionBillingCycles query."""
enum SubscriptionBillingCyclesSortKeys {
  """Sort by the `cycle_index` value."""
  CYCLE_INDEX

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""Select subscription billing cycles to be targeted."""
enum SubscriptionBillingCyclesTargetSelection {
  """Target all current and upcoming subscription billing cycles."""
  ALL
}

"""The possible errors for a subscription billing cycle."""
type SubscriptionBillingCycleUserError implements DisplayableError {
  """The error code."""
  code: SubscriptionBillingCycleErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents a Subscription Billing Policy."""
type SubscriptionBillingPolicy {
  """
  Specific anchor dates upon which the billing interval calculations should be made.
  """
  anchors: [SellingPlanAnchor!]!

  """
  The kind of interval that's associated with this schedule (e.g. Monthly, Weekly, etc).
  """
  interval: SellingPlanInterval!

  """The number of billing intervals between invoices."""
  intervalCount: Int!

  """Maximum amount of cycles after which the subscription ends."""
  maxCycles: Int

  """Minimum amount of cycles required in the subscription."""
  minCycles: Int
}

"""The input fields for a Subscription Billing Policy."""
input SubscriptionBillingPolicyInput {
  """
  The kind of interval that's associated with this schedule (e.g. Monthly, Weekly, etc).
  """
  interval: SellingPlanInterval!

  """The number of billing intervals between invoices."""
  intervalCount: Int!

  """Minimum amount of cycles required in the subscription."""
  minCycles: Int

  """Maximum amount of cycles required in the subscription."""
  maxCycles: Int

  """
  Specific anchor dates upon which the billing interval calculations should be made.
  """
  anchors: [SellingPlanAnchorInput!] = []
}

"""Represents a Subscription Contract."""
type SubscriptionContract implements Node & SubscriptionContractBase {
  """The subscription app that the subscription contract is registered to."""
  app: App

  """The URL of the subscription contract page on the subscription app."""
  appAdminUrl: URL

  """
  The list of billing attempts associated with the subscription contract.
  """
  billingAttempts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionBillingAttemptConnection!

  """The billing policy associated with the subscription contract."""
  billingPolicy: SubscriptionBillingPolicy!

  """The date and time when the subscription contract was created."""
  createdAt: DateTime!

  """The currency that's used for the subscription contract."""
  currencyCode: CurrencyCode!

  """A list of the custom attributes to be added to the generated orders."""
  customAttributes: [Attribute!]!

  """The customer to whom the subscription contract belongs."""
  customer: Customer

  """The customer payment method that's used for the subscription contract."""
  customerPaymentMethod(
    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false
  ): CustomerPaymentMethod

  """The delivery method for each billing of the subscription contract."""
  deliveryMethod: SubscriptionDeliveryMethod

  """The delivery policy associated with the subscription contract."""
  deliveryPolicy: SubscriptionDeliveryPolicy!

  """The delivery price for each billing of the subscription contract."""
  deliveryPrice: MoneyV2!

  """
  The list of subscription discounts associated with the subscription contract.
  """
  discounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionManualDiscountConnection!

  """A globally-unique ID."""
  id: ID!

  """The current status of the last payment."""
  lastPaymentStatus: SubscriptionContractLastPaymentStatus

  """The number of lines associated with the subscription contract."""
  lineCount: Int!

  """
  The list of subscription lines associated with the subscription contract.
  """
  lines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """The next billing date for the subscription contract."""
  nextBillingDate: DateTime

  """The note field that will be applied to the generated orders."""
  note: String

  """A list of the subscription contract's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): OrderConnection!

  """The order from which this contract originated."""
  originOrder: Order

  """The current status of the subscription contract."""
  status: SubscriptionContractSubscriptionStatus!

  """The date and time when the subscription contract was updated."""
  updatedAt: DateTime!
}

"""Represents subscription contract common fields."""
interface SubscriptionContractBase {
  """The subscription app that the subscription contract is registered to."""
  app: App

  """The URL of the subscription contract page on the subscription app."""
  appAdminUrl: URL

  """The currency that's used for the subscription contract."""
  currencyCode: CurrencyCode!

  """A list of the custom attributes to be added to the generated orders."""
  customAttributes: [Attribute!]!

  """The customer to whom the subscription contract belongs."""
  customer: Customer

  """The customer payment method that's used for the subscription contract."""
  customerPaymentMethod(
    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false
  ): CustomerPaymentMethod

  """The delivery method for each billing of the subscription contract."""
  deliveryMethod: SubscriptionDeliveryMethod

  """The delivery price for each billing of the subscription contract."""
  deliveryPrice: MoneyV2!

  """
  The list of subscription discounts associated with the subscription contract.
  """
  discounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionManualDiscountConnection!

  """The number of lines associated with the subscription contract."""
  lineCount: Int!

  """
  The list of subscription lines associated with the subscription contract.
  """
  lines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """The note field that will be applied to the generated orders."""
  note: String

  """A list of the subscription contract's orders."""
  orders(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): OrderConnection!

  """The date and time when the subscription contract was updated."""
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple SubscriptionContracts.
"""
type SubscriptionContractConnection {
  """A list of edges."""
  edges: [SubscriptionContractEdge!]!

  """A list of the nodes contained in SubscriptionContractEdge."""
  nodes: [SubscriptionContract!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""The input fields required to create a Subscription Contract."""
input SubscriptionContractCreateInput {
  """The ID of the customer to associate with the subscription contract."""
  customerId: ID!

  """The next billing date for the subscription contract."""
  nextBillingDate: DateTime!

  """The currency used for the subscription contract."""
  currencyCode: CurrencyCode!

  """The attributes used as input for the Subscription Draft."""
  contract: SubscriptionDraftInput!
}

"""Return type for `subscriptionContractCreate` mutation."""
type SubscriptionContractCreatePayload {
  """The Subscription Contract object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""
An auto-generated type which holds one SubscriptionContract and a cursor during pagination.
"""
type SubscriptionContractEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionContractEdge."""
  node: SubscriptionContract!
}

"""
Possible error codes that can be returned by `SubscriptionContractUserError`.
"""
enum SubscriptionContractErrorCode {
  """The input value is invalid."""
  INVALID
}

"""
The possible status values of the last payment on a subscription contract.
"""
enum SubscriptionContractLastPaymentStatus {
  """Successful subscription billing attempt."""
  SUCCEEDED

  """Failed subscription billing attempt."""
  FAILED
}

"""Return type for `subscriptionContractSetNextBillingDate` mutation."""
type SubscriptionContractSetNextBillingDatePayload {
  """The updated Subscription Contract object."""
  contract: SubscriptionContract

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionContractUserError!]!
}

"""The possible status values of a subscription."""
enum SubscriptionContractSubscriptionStatus {
  """The contract is active and continuing per its policies."""
  ACTIVE

  """
  The contract is temporarily paused and is expected to resume in the future.
  """
  PAUSED

  """The contract was ended by an unplanned customer action."""
  CANCELLED

  """
  The contract has ended per the expected circumstances. All billing and deliverycycles of the subscriptions were executed.
  """
  EXPIRED

  """
  The contract ended because billing failed and no further billing attempts are expected.
  """
  FAILED
}

"""Return type for `subscriptionContractUpdate` mutation."""
type SubscriptionContractUpdatePayload {
  """The Subscription Contract object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Represents a Subscription Contract error."""
type SubscriptionContractUserError implements DisplayableError {
  """The error code."""
  code: SubscriptionContractErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents a Subscription Line Pricing Cycle Adjustment."""
type SubscriptionCyclePriceAdjustment {
  """Price adjustment type."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!

  """Price adjustment value."""
  adjustmentValue: SellingPlanPricingPolicyAdjustmentValue!

  """The number of cycles required before this pricing policy applies."""
  afterCycle: Int!

  """The computed price after the adjustments applied."""
  computedPrice: MoneyV2!
}

"""
Describes the delivery method to use to get the physical goods to the customer.
"""
union SubscriptionDeliveryMethod = SubscriptionDeliveryMethodLocalDelivery | SubscriptionDeliveryMethodPickup | SubscriptionDeliveryMethodShipping

"""
Specifies delivery method fields for a subscription draft.
This is an input union: one, and only one, field can be provided.
The field provided will determine which delivery method is to be used.
"""
input SubscriptionDeliveryMethodInput {
  """The input fields for the shipping delivery method."""
  shipping: SubscriptionDeliveryMethodShippingInput

  """The input fields for the local delivery method."""
  localDelivery: SubscriptionDeliveryMethodLocalDeliveryInput

  """The input fields for the pickup delivery method."""
  pickup: SubscriptionDeliveryMethodPickupInput
}

"""
A local delivery method, which includes a mailing address and a local delivery option.
"""
type SubscriptionDeliveryMethodLocalDelivery {
  """The address to deliver to."""
  address: SubscriptionMailingAddress!

  """The details of the local delivery method to use."""
  localDeliveryOption: SubscriptionDeliveryMethodLocalDeliveryOption!
}

"""
The input fields for a local delivery method.

This input accepts partial input. When a field is not provided,
its prior value is left unchanged.
"""
input SubscriptionDeliveryMethodLocalDeliveryInput {
  """The address to deliver to."""
  address: MailingAddressInput

  """The details of the local delivery method to use."""
  localDeliveryOption: SubscriptionDeliveryMethodLocalDeliveryOptionInput
}

"""The selected delivery option on a subscription contract."""
type SubscriptionDeliveryMethodLocalDeliveryOption {
  """A custom reference to the delivery method for use with automations."""
  code: String

  """
  The details displayed to the customer to describe the local delivery option.
  """
  description: String

  """
  The delivery instructions that the customer can provide to the merchant.
  """
  instructions: String

  """
  The phone number that the customer provided to the merchant.
  Formatted using E.164 standard. For example, `+16135551111`.
  """
  phone: String!

  """The presentment title of the local delivery option."""
  presentmentTitle: String

  """The title of the local delivery option."""
  title: String
}

"""The input fields for local delivery option."""
input SubscriptionDeliveryMethodLocalDeliveryOptionInput {
  """The title of the local delivery option."""
  title: String

  """The presentment title of the local delivery option."""
  presentmentTitle: String

  """
  The details displayed to the customer to describe the local delivery option.
  """
  description: String

  """A custom reference to the delivery method for use with automations."""
  code: String

  """
  The phone number that the customer must provide to the merchant.
  Formatted using E.164 standard. For example, `+16135551111`.
  """
  phone: String!

  """
  The delivery instructions that the customer can provide to the merchant.
  """
  instructions: String
}

"""A delivery method with a pickup option."""
type SubscriptionDeliveryMethodPickup {
  """The details of the pickup delivery method to use."""
  pickupOption: SubscriptionDeliveryMethodPickupOption!
}

"""
The input fields for a pickup delivery method.

This input accepts partial input. When a field is not provided,
its prior value is left unchanged.
"""
input SubscriptionDeliveryMethodPickupInput {
  """The details of the pickup method to use."""
  pickupOption: SubscriptionDeliveryMethodPickupOptionInput
}

"""Represents the selected pickup option on a subscription contract."""
type SubscriptionDeliveryMethodPickupOption {
  """A custom reference to the delivery method for use with automations."""
  code: String

  """The details displayed to the customer to describe the pickup option."""
  description: String

  """The location where the customer will pickup the merchandise."""
  location: Location!

  """The presentment title of the pickup option."""
  presentmentTitle: String

  """The title of the pickup option."""
  title: String
}

"""The input fields for pickup option."""
input SubscriptionDeliveryMethodPickupOptionInput {
  """The title of the pickup option."""
  title: String

  """The presentment title of the pickup option."""
  presentmentTitle: String

  """The details displayed to the customer to describe the pickup option."""
  description: String

  """A custom reference to the delivery method for use with automations."""
  code: String

  """The ID of the pickup location."""
  locationId: ID!
}

"""
Represents a shipping delivery method: a mailing address and a shipping option.
"""
type SubscriptionDeliveryMethodShipping {
  """The address to ship to."""
  address: SubscriptionMailingAddress!

  """The details of the shipping method to use."""
  shippingOption: SubscriptionDeliveryMethodShippingOption!
}

"""
Specifies shipping delivery method fields.

This input accepts partial input. When a field is not provided,
its prior value is left unchanged.
"""
input SubscriptionDeliveryMethodShippingInput {
  """The address to ship to."""
  address: MailingAddressInput

  """The details of the shipping method to use."""
  shippingOption: SubscriptionDeliveryMethodShippingOptionInput
}

"""Represents the selected shipping option on a subscription contract."""
type SubscriptionDeliveryMethodShippingOption {
  """
  The carrier service that's providing this shipping option.
  This field isn't currently supported and returns null.
  """
  carrierService: DeliveryCarrierService @deprecated(reason: "This field has never been implemented.")

  """The code of the shipping option."""
  code: String

  """The description of the shipping option."""
  description: String

  """The presentment title of the shipping option."""
  presentmentTitle: String

  """The title of the shipping option."""
  title: String
}

"""The input fields for shipping option."""
input SubscriptionDeliveryMethodShippingOptionInput {
  """The title of the shipping option."""
  title: String

  """The presentment title of the shipping option."""
  presentmentTitle: String

  """The description of the shipping option."""
  description: String

  """The code of the shipping option."""
  code: String

  """The carrier service ID of the shipping option."""
  carrierServiceId: ID
}

"""The delivery option for a subscription contract."""
union SubscriptionDeliveryOption = SubscriptionLocalDeliveryOption | SubscriptionPickupOption | SubscriptionShippingOption

"""
The result of the query to fetch delivery options for the subscription contract.
"""
union SubscriptionDeliveryOptionResult = SubscriptionDeliveryOptionResultFailure | SubscriptionDeliveryOptionResultSuccess

"""
A failure to find the available delivery options for a subscription contract.
"""
type SubscriptionDeliveryOptionResultFailure {
  """The reason for the failure."""
  message: String
}

"""The delivery option for a subscription contract."""
type SubscriptionDeliveryOptionResultSuccess {
  """The available delivery options."""
  deliveryOptions: [SubscriptionDeliveryOption!]!
}

"""Represents a Subscription Delivery Policy."""
type SubscriptionDeliveryPolicy {
  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchor!]!

  """
  The kind of interval that's associated with this schedule (e.g. Monthly, Weekly, etc).
  """
  interval: SellingPlanInterval!

  """The number of delivery intervals between deliveries."""
  intervalCount: Int!
}

"""The input fields for a Subscription Delivery Policy."""
input SubscriptionDeliveryPolicyInput {
  """
  The kind of interval that's associated with this schedule (e.g. Monthly, Weekly, etc).
  """
  interval: SellingPlanInterval!

  """The number of billing intervals between invoices."""
  intervalCount: Int!

  """
  The specific anchor dates upon which the delivery interval calculations should be made.
  """
  anchors: [SellingPlanAnchorInput!] = []
}

"""Subscription draft discount types."""
union SubscriptionDiscount = SubscriptionAppliedCodeDiscount | SubscriptionManualDiscount

"""Represents what a particular discount reduces from a line price."""
type SubscriptionDiscountAllocation {
  """Allocation amount."""
  amount: MoneyV2!

  """Discount that created the allocation."""
  discount: SubscriptionDiscount!
}

"""
An auto-generated type for paginating through multiple SubscriptionDiscounts.
"""
type SubscriptionDiscountConnection {
  """A list of edges."""
  edges: [SubscriptionDiscountEdge!]!

  """A list of the nodes contained in SubscriptionDiscountEdge."""
  nodes: [SubscriptionDiscount!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SubscriptionDiscount and a cursor during pagination.
"""
type SubscriptionDiscountEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionDiscountEdge."""
  node: SubscriptionDiscount!
}

"""Represents the subscription lines the discount applies on."""
type SubscriptionDiscountEntitledLines {
  """
  Specify whether the subscription discount will apply on all subscription lines.
  """
  all: Boolean!

  """
  The list of subscription lines associated with the subscription discount.
  """
  lines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!
}

"""The value of the discount and how it will be applied."""
type SubscriptionDiscountFixedAmountValue {
  """The fixed amount value of the discount."""
  amount: MoneyV2!

  """Whether the amount is applied per item."""
  appliesOnEachItem: Boolean!
}

"""The percentage value of the discount."""
type SubscriptionDiscountPercentageValue {
  """The percentage value of the discount."""
  percentage: Int!
}

"""The reason a discount on a subscription draft was rejected."""
enum SubscriptionDiscountRejectionReason {
  """Discount code is not found."""
  NOT_FOUND

  """Discount does not apply to any of the given line items."""
  NO_ENTITLED_LINE_ITEMS

  """Quantity of items does not qualify for the discount."""
  QUANTITY_NOT_IN_RANGE

  """Purchase amount of items does not qualify for the discount."""
  PURCHASE_NOT_IN_RANGE

  """Given customer does not qualify for the discount."""
  CUSTOMER_NOT_ELIGIBLE

  """Discount usage limit has been reached."""
  USAGE_LIMIT_REACHED

  """Customer usage limit has been reached."""
  CUSTOMER_USAGE_LIMIT_REACHED

  """Discount is inactive."""
  CURRENTLY_INACTIVE

  """No applicable shipping lines."""
  NO_ENTITLED_SHIPPING_LINES

  """Purchase type does not qualify for the discount."""
  INCOMPATIBLE_PURCHASE_TYPE

  """Internal error during discount code validation."""
  INTERNAL_ERROR
}

"""The value of the discount and how it will be applied."""
union SubscriptionDiscountValue = SubscriptionDiscountFixedAmountValue | SubscriptionDiscountPercentageValue

"""Represents a Subscription Draft."""
type SubscriptionDraft implements Node {
  """
  The billing cycle that the subscription contract will be associated with.
  """
  billingCycle: SubscriptionBillingCycle

  """The billing policy for the subscription contract."""
  billingPolicy: SubscriptionBillingPolicy!

  """
  The billing cycles of the contracts that will be concatenated to the subscription contract.
  """
  concatenatedBillingCycles(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false

    """Sort the underlying list by the given key."""
    sortKey: SubscriptionBillingCyclesSortKeys = CYCLE_INDEX
  ): SubscriptionBillingCycleConnection!

  """The currency used for the subscription contract."""
  currencyCode: CurrencyCode!

  """A list of the custom attributes to be added to the generated orders."""
  customAttributes: [Attribute!]!

  """The customer to whom the subscription contract belongs."""
  customer: Customer!

  """The customer payment method used for the subscription contract."""
  customerPaymentMethod(
    """Whether to show the customer's revoked payment method."""
    showRevoked: Boolean = false
  ): CustomerPaymentMethod

  """The delivery method for each billing of the subscription contract."""
  deliveryMethod: SubscriptionDeliveryMethod

  """
  The available delivery options for a given delivery address. Returns `null` for pending requests.
  """
  deliveryOptions(
    """The address to deliver the subscription contract to."""
    deliveryAddress: MailingAddressInput
  ): SubscriptionDeliveryOptionResult

  """The delivery policy for the subscription contract."""
  deliveryPolicy: SubscriptionDeliveryPolicy!

  """The delivery price for each billing the subscription contract."""
  deliveryPrice: MoneyV2

  """
  The list of subscription discounts which will be associated with the subscription contract.
  """
  discounts(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionDiscountConnection!

  """
  The list of subscription discounts to be added to the subscription contract.
  """
  discountsAdded(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionDiscountConnection!

  """
  The list of subscription discounts to be removed from the subscription contract.
  """
  discountsRemoved(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionDiscountConnection!

  """
  The list of subscription discounts to be updated on the subscription contract.
  """
  discountsUpdated(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionDiscountConnection!

  """A globally-unique ID."""
  id: ID!

  """
  The list of subscription lines which will be associated with the subscription contract.
  """
  lines(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """
  The list of subscription lines to be added to the subscription contract.
  """
  linesAdded(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """
  The list of subscription lines to be removed from the subscription contract.
  """
  linesRemoved(
    """Returns up to the first `n` elements from the list."""
    first: Int

    """Returns the elements that come after the specified cursor."""
    after: String

    """Returns up to the last `n` elements from the list."""
    last: Int

    """Returns the elements that come before the specified cursor."""
    before: String

    """Reverse the order of the underlying list."""
    reverse: Boolean = false
  ): SubscriptionLineConnection!

  """The next billing date for the subscription contract."""
  nextBillingDate: DateTime

  """The note field that will be applied to the generated orders."""
  note: String

  """The original subscription contract."""
  originalContract: SubscriptionContract

  """
  Available Shipping Options for a given delivery address. Returns NULL for pending requests.
  """
  shippingOptions(
    """The address to delivery the subscription contract to."""
    deliveryAddress: MailingAddressInput
  ): SubscriptionShippingOptionResult @deprecated(reason: "Use `deliveryOptions` instead.")

  """The current status of the subscription contract."""
  status: SubscriptionContractSubscriptionStatus
}

"""Return type for `subscriptionDraftCommit` mutation."""
type SubscriptionDraftCommitPayload {
  """The updated Subscription Contract object."""
  contract: SubscriptionContract

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftDiscountAdd` mutation."""
type SubscriptionDraftDiscountAddPayload {
  """The added Subscription Discount."""
  discountAdded: SubscriptionManualDiscount

  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftDiscountCodeApply` mutation."""
type SubscriptionDraftDiscountCodeApplyPayload {
  """The added subscription discount."""
  appliedDiscount: SubscriptionAppliedCodeDiscount

  """The subscription contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftDiscountRemove` mutation."""
type SubscriptionDraftDiscountRemovePayload {
  """The removed subscription draft discount."""
  discountRemoved: SubscriptionDiscount

  """The subscription contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftDiscountUpdate` mutation."""
type SubscriptionDraftDiscountUpdatePayload {
  """The updated Subscription Discount."""
  discountUpdated: SubscriptionManualDiscount

  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""
Possible error codes that can be returned by `SubscriptionDraftUserError`.
"""
enum SubscriptionDraftErrorCode {
  """This line has already been removed."""
  ALREADY_REMOVED

  """Input value is not present."""
  PRESENCE

  """Subscription draft has been already committed."""
  COMMITTED

  """Value is not in range."""
  NOT_IN_RANGE

  """The value is not an integer."""
  NOT_AN_INTEGER

  """The maximum number of cycles must be greater than the minimum."""
  SELLING_PLAN_MAX_CYCLES_MUST_BE_GREATER_THAN_MIN_CYCLES

  """
  The delivery policy interval must be a multiple of the billing policy interval.
  """
  DELIVERY_MUST_BE_MULTIPLE_OF_BILLING

  """Next billing date is invalid."""
  INVALID_BILLING_DATE

  """Note length is too long."""
  INVALID_NOTE_LENGTH

  """Must have at least one line."""
  INVALID_LINES

  """Discount must have at least one entitled line."""
  NO_ENTITLED_LINES

  """The customer doesn't exist."""
  CUSTOMER_DOES_NOT_EXIST

  """The payment method customer must be the same as the contract customer."""
  CUSTOMER_MISMATCH

  """The delivery method can't be blank if any lines require shipping."""
  DELIVERY_METHOD_REQUIRED

  """The after cycle attribute must be unique between cycle discounts."""
  CYCLE_DISCOUNTS_UNIQUE_AFTER_CYCLE

  """The adjustment value must the same type as the adjustment type."""
  INVALID_ADJUSTMENT_TYPE

  """The adjustment value must be either fixed_value or percentage."""
  INVALID_ADJUSTMENT_VALUE

  """
  Another operation updated the contract concurrently as the commit was in progress.
  """
  STALE_CONTRACT

  """Currency is not enabled."""
  CURRENCY_NOT_ENABLED

  """
  Cannot update a subscription contract with a current or upcoming billing cycle contract edit.
  """
  HAS_FUTURE_EDITS

  """
  Cannot commit a billing cycle contract draft with this mutation. Please use SubscriptionBillingCycleContractDraftCommit.
  """
  BILLING_CYCLE_PRESENT

  """
  Cannot commit a contract draft with this mutation. Please use SubscriptionDraftCommit.
  """
  BILLING_CYCLE_ABSENT

  """Delivery policy cannot be updated for billing cycle contract drafts."""
  BILLING_CYCLE_CONTRACT_DRAFT_DELIVERY_POLICY_INVALID

  """Billing policy cannot be updated for billing cycle contract drafts."""
  BILLING_CYCLE_CONTRACT_DRAFT_BILLING_POLICY_INVALID

  """
  Contract draft must be a billing cycle contract draft for contract concatenation.
  """
  CONCATENATION_BILLING_CYCLE_CONTRACT_DRAFT_REQUIRED

  """
  Concatenated contracts cannot contain duplicate subscription contracts.
  """
  DUPLICATE_CONCATENATED_CONTRACTS

  """
  Billing cycle selector cannot select upcoming billing cycle past limit.
  """
  UPCOMING_CYCLE_LIMIT_EXCEEDED

  """
  Billing cycle selector cannot select billing cycle outside of index range.
  """
  CYCLE_INDEX_OUT_OF_RANGE

  """
  Billing cycle selector cannot select billing cycle outside of start date range.
  """
  CYCLE_START_DATE_OUT_OF_RANGE

  """
  Billing cycle selector requires exactly one of index or date to be provided.
  """
  CYCLE_SELECTOR_VALIDATE_ONE_OF

  """
  Maximum number of concatenated contracts on a billing cycle contract draft exceeded.
  """
  EXCEEDED_MAX_CONCATENATED_CONTRACTS

  """The input value is invalid."""
  INVALID

  """The input value is blank."""
  BLANK

  """The input value should be greater than the minimum allowed value."""
  GREATER_THAN

  """
  The input value should be greater than or equal to the minimum value allowed.
  """
  GREATER_THAN_OR_EQUAL_TO

  """The input value should be less than the maximum value allowed."""
  LESS_THAN

  """
  The input value should be less than or equal to the maximum value allowed.
  """
  LESS_THAN_OR_EQUAL_TO

  """The input value is too long."""
  TOO_LONG

  """The input value is too short."""
  TOO_SHORT
}

"""Return type for `subscriptionDraftFreeShippingDiscountAdd` mutation."""
type SubscriptionDraftFreeShippingDiscountAddPayload {
  """The added subscription free shipping discount."""
  discountAdded: SubscriptionManualDiscount

  """The subscription contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""
Return type for `subscriptionDraftFreeShippingDiscountUpdate` mutation.
"""
type SubscriptionDraftFreeShippingDiscountUpdatePayload {
  """The updated Subscription Discount."""
  discountUpdated: SubscriptionManualDiscount

  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""The input fields required to create a Subscription Draft."""
input SubscriptionDraftInput {
  """The current status of the subscription contract."""
  status: SubscriptionContractSubscriptionStatus

  """The ID of the payment method to be used for the subscription contract."""
  paymentMethodId: ID

  """The next billing date for the subscription contract."""
  nextBillingDate: DateTime

  """The billing policy for the subscription contract."""
  billingPolicy: SubscriptionBillingPolicyInput

  """The delivery policy for the subscription contract."""
  deliveryPolicy: SubscriptionDeliveryPolicyInput

  """The shipping price for each renewal the subscription contract."""
  deliveryPrice: Decimal

  """The delivery method for the subscription contract."""
  deliveryMethod: SubscriptionDeliveryMethodInput

  """The note field that will be applied to the generated orders."""
  note: String

  """A list of the custom attributes added to the subscription contract."""
  customAttributes: [AttributeInput!]
}

"""Return type for `subscriptionDraftLineAdd` mutation."""
type SubscriptionDraftLineAddPayload {
  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The added Subscription Line."""
  lineAdded: SubscriptionLine

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftLineRemove` mutation."""
type SubscriptionDraftLineRemovePayload {
  """
  The list of updated subscription discounts impacted by the removed line.
  """
  discountsUpdated: [SubscriptionManualDiscount!]

  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The removed Subscription Line."""
  lineRemoved: SubscriptionLine

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftLineUpdate` mutation."""
type SubscriptionDraftLineUpdatePayload {
  """The Subscription Contract draft object."""
  draft: SubscriptionDraft

  """The updated Subscription Line."""
  lineUpdated: SubscriptionLine

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Return type for `subscriptionDraftUpdate` mutation."""
type SubscriptionDraftUpdatePayload {
  """The Subscription Draft object."""
  draft: SubscriptionDraft

  """The list of errors that occurred from executing the mutation."""
  userErrors: [SubscriptionDraftUserError!]!
}

"""Represents a Subscription Draft error."""
type SubscriptionDraftUserError implements DisplayableError {
  """The error code."""
  code: SubscriptionDraftErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
The input fields for a subscription free shipping discount on a contract.
"""
input SubscriptionFreeShippingDiscountInput {
  """The title associated with the subscription free shipping discount."""
  title: String

  """
  The maximum number of times the subscription free shipping discount will be applied on orders.
  """
  recurringCycleLimit: Int
}

"""Represents a Subscription Line."""
type SubscriptionLine {
  """
  The price per unit for the subscription line in the contract's currency.
  """
  currentPrice: MoneyV2!

  """List of custom attributes associated to the line item."""
  customAttributes: [Attribute!]!

  """Discount allocations."""
  discountAllocations: [SubscriptionDiscountAllocation!]!

  """The unique ID."""
  id: ID!

  """Total line price including all discounts."""
  lineDiscountedPrice: MoneyV2!

  """Describe the price changes of the line over time."""
  pricingPolicy: SubscriptionPricingPolicy

  """The product ID associated with the subscription line."""
  productId: ID

  """The quantity of the unit selected for the subscription line."""
  quantity: Int!

  """Whether physical shipping is required for the variant."""
  requiresShipping: Boolean!

  """
  The selling plan ID associated to the line.
  
  Indicates which selling plan was used to create this
  contract line initially. The selling plan ID is also used to
  find the associated delivery profile.
  
  The subscription contract, subscription line, or selling plan might have
  changed. As a result, the selling plan's attributes might not
  match the information on the contract.
  """
  sellingPlanId: ID

  """
  The selling plan name associated to the line. This name describes
  the order line items created from this subscription line
  for both merchants and customers.
  
  The value can be different from the selling plan's name, because both
  the selling plan's name and the subscription line's selling_plan_name
  attribute can be updated independently.
  """
  sellingPlanName: String

  """Variant SKU number of the item associated with the subscription line."""
  sku: String

  """Whether the variant is taxable."""
  taxable: Boolean!

  """Product title of the item associated with the subscription line."""
  title: String!

  """The product variant ID associated with the subscription line."""
  variantId: ID

  """The image associated with the line item's variant or product."""
  variantImage: Image

  """
  Product variant title of the item associated with the subscription line.
  """
  variantTitle: String
}

"""
An auto-generated type for paginating through multiple SubscriptionLines.
"""
type SubscriptionLineConnection {
  """A list of edges."""
  edges: [SubscriptionLineEdge!]!

  """A list of the nodes contained in SubscriptionLineEdge."""
  nodes: [SubscriptionLine!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SubscriptionLine and a cursor during pagination.
"""
type SubscriptionLineEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionLineEdge."""
  node: SubscriptionLine!
}

"""
The input fields required to add a new subscription line to a contract.
"""
input SubscriptionLineInput {
  """The ID of the product variant the subscription line refers to."""
  productVariantId: ID!

  """The quantity of the product."""
  quantity: Int!

  """The price of the product."""
  currentPrice: Decimal!

  """The custom attributes for this subscription line."""
  customAttributes: [AttributeInput!]

  """The selling plan for the subscription line."""
  sellingPlanId: ID

  """
  The selling plan name for the subscription line.
  
  Defaults to using the selling plan's current name when not specified.
  """
  sellingPlanName: String

  """Describes expected price changes of the subscription line over time."""
  pricingPolicy: SubscriptionPricingPolicyInput
}

"""The input fields required to update a subscription line on a contract."""
input SubscriptionLineUpdateInput {
  """The ID of the product variant the subscription line refers to."""
  productVariantId: ID

  """The quantity of the product."""
  quantity: Int

  """The selling plan for the subscription line."""
  sellingPlanId: ID

  """The selling plan name for the subscription line."""
  sellingPlanName: String

  """The price of the product."""
  currentPrice: Decimal

  """The custom attributes for this subscription line."""
  customAttributes: [AttributeInput!]

  """Describes expected price changes of the subscription line over time."""
  pricingPolicy: SubscriptionPricingPolicyInput
}

"""A local delivery option for a subscription contract."""
type SubscriptionLocalDeliveryOption {
  """The code of the local delivery option."""
  code: String!

  """The description of the local delivery option."""
  description: String

  """Whether a phone number is required for the local delivery option."""
  phoneRequired: Boolean!

  """The presentment title of the local delivery option."""
  presentmentTitle: String

  """The price of the local delivery option."""
  price: MoneyV2

  """The title of the local delivery option."""
  title: String!
}

"""Represents a Mailing Address on a Subscription."""
type SubscriptionMailingAddress {
  """
  The first line of the address. Typically the street address or PO Box number.
  """
  address1: String

  """
  The second line of the address. Typically the number of the apartment, suite, or unit.
  """
  address2: String

  """The name of the city, district, village, or town."""
  city: String

  """The name of the customer's company or organization."""
  company: String

  """The name of the country."""
  country: String

  """
  The two-letter code for the country of the address.
  
  For example, US.
  """
  countryCode: CountryCode

  """The first name of the customer."""
  firstName: String

  """The last name of the customer."""
  lastName: String

  """The full name of the customer, based on firstName and lastName."""
  name: String

  """
  A unique phone number for the customer. Formatted using E.164 standard. For example, _+16135551111_.
  """
  phone: String

  """The region of the address, such as the province, state, or district."""
  province: String

  """
  The two-letter code for the region.
  
  For example, ON.
  """
  provinceCode: String

  """The zip or postal code of the address."""
  zip: String
}

"""Custom subscription discount."""
type SubscriptionManualDiscount {
  """Entitled line items used to apply the subscription discount on."""
  entitledLines: SubscriptionDiscountEntitledLines!

  """The unique ID."""
  id: ID!

  """
  The maximum number of times the subscription discount will be applied on orders.
  """
  recurringCycleLimit: Int

  """The reason that the discount on the subscription draft is rejected."""
  rejectionReason: SubscriptionDiscountRejectionReason

  """Type of line the discount applies on."""
  targetType: DiscountTargetType!

  """The title associated with the subscription discount."""
  title: String

  """The type of the subscription discount."""
  type: DiscountType!

  """The number of times the discount was applied."""
  usageCount: Int!

  """The value of the subscription discount."""
  value: SubscriptionDiscountValue!
}

"""
An auto-generated type for paginating through multiple SubscriptionManualDiscounts.
"""
type SubscriptionManualDiscountConnection {
  """A list of edges."""
  edges: [SubscriptionManualDiscountEdge!]!

  """A list of the nodes contained in SubscriptionManualDiscountEdge."""
  nodes: [SubscriptionManualDiscount!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one SubscriptionManualDiscount and a cursor during pagination.
"""
type SubscriptionManualDiscountEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of SubscriptionManualDiscountEdge."""
  node: SubscriptionManualDiscount!
}

"""The input fields for the subscription lines the discount applies on."""
input SubscriptionManualDiscountEntitledLinesInput {
  """
  Specify whether the subscription discount will apply on all subscription lines.
  """
  all: Boolean

  """
  The ID of the lines to add to or remove from the subscription discount.
  """
  lines: SubscriptionManualDiscountLinesInput
}

"""
The input fields for the fixed amount value of the discount and distribution on the lines.
"""
input SubscriptionManualDiscountFixedAmountInput {
  """Fixed amount value."""
  amount: Float

  """Whether the amount is intended per line item or once per subscription."""
  appliesOnEachItem: Boolean
}

"""The input fields for a subscription discount on a contract."""
input SubscriptionManualDiscountInput {
  """The title associated with the subscription discount."""
  title: String

  """Percentage or fixed amount value of the discount."""
  value: SubscriptionManualDiscountValueInput

  """
  The maximum number of times the subscription discount will be applied on orders.
  """
  recurringCycleLimit: Int

  """Entitled line items used to apply the subscription discount on."""
  entitledLines: SubscriptionManualDiscountEntitledLinesInput
}

"""The input fields for line items that the discount refers to."""
input SubscriptionManualDiscountLinesInput {
  """The ID of the lines to add to the subscription discount."""
  add: [ID!]

  """The ID of the lines to remove from the subscription discount."""
  remove: [ID!]
}

"""The input fields for the discount value and its distribution."""
input SubscriptionManualDiscountValueInput {
  """The percentage value of the discount. Value must be between 0 - 100."""
  percentage: Int

  """Fixed amount input in the currency defined by the subscription."""
  fixedAmount: SubscriptionManualDiscountFixedAmountInput
}

"""A pickup option to deliver a subscription contract."""
type SubscriptionPickupOption {
  """The code of the pickup option."""
  code: String!

  """The description of the pickup option."""
  description: String

  """The pickup location."""
  location: Location!

  """Whether a phone number is required for the pickup option."""
  phoneRequired: Boolean!

  """
  The estimated amount of time it takes for the pickup to be ready. For example, "Usually ready in 24 hours".).
  """
  pickupTime: String!

  """The presentment title of the pickup option."""
  presentmentTitle: String

  """The price of the pickup option."""
  price: MoneyV2

  """The title of the pickup option."""
  title: String!
}

"""Represents a Subscription Line Pricing Policy."""
type SubscriptionPricingPolicy {
  """
  The base price per unit for the subscription line in the contract's currency.
  """
  basePrice: MoneyV2!

  """The adjustments per cycle for the subscription line."""
  cycleDiscounts: [SubscriptionCyclePriceAdjustment!]!
}

"""
The input fields for an array containing all pricing changes for each billing cycle.
"""
input SubscriptionPricingPolicyCycleDiscountsInput {
  """The cycle after which the pricing policy applies."""
  afterCycle: Int!

  """The price adjustment type."""
  adjustmentType: SellingPlanPricingPolicyAdjustmentType!

  """The price adjustment value."""
  adjustmentValue: SellingPlanPricingPolicyValueInput!

  """The computed price after the adjustments are applied."""
  computedPrice: Decimal!
}

"""
The input fields for expected price changes of the subscription line over time.
"""
input SubscriptionPricingPolicyInput {
  """
  The base price per unit for the subscription line in the contract's currency.
  """
  basePrice: Decimal!

  """An array containing all pricing changes for each billing cycle."""
  cycleDiscounts: [SubscriptionPricingPolicyCycleDiscountsInput!]!
}

"""A shipping option to deliver a subscription contract."""
type SubscriptionShippingOption {
  """
  The carrier service that's providing this shipping option.
  This field isn't currently supported and returns null.
  """
  carrierService: DeliveryCarrierService @deprecated(reason: "This field has never been implemented.")

  """The code of the shipping option."""
  code: String!

  """The description of the shipping option."""
  description: String

  """If a phone number is required for the shipping option."""
  phoneRequired: Boolean

  """The presentment title of the shipping option."""
  presentmentTitle: String

  """The price of the shipping option."""
  price: MoneyV2

  """The title of the shipping option."""
  title: String!
}

"""
The result of the query to fetch shipping options for the subscription contract.
"""
union SubscriptionShippingOptionResult = SubscriptionShippingOptionResultFailure | SubscriptionShippingOptionResultSuccess

"""
Failure determining available shipping options for delivery of a subscription contract.
"""
type SubscriptionShippingOptionResultFailure {
  """Failure reason."""
  message: String
}

"""A shipping option for delivery of a subscription contract."""
type SubscriptionShippingOptionResultSuccess {
  """Available shipping options."""
  shippingOptions: [SubscriptionShippingOption!]!
}

"""
A suggested transaction. Suggested transaction are usually used in the context of refunds
and exchanges.
"""
type SuggestedOrderTransaction {
  """The masked account number associated with the payment method."""
  accountNumber: String

  """The amount of the transaction."""
  amount: Money! @deprecated(reason: "Use `amountSet` instead.")

  """
  The amount and currency of the suggested order transaction in shop and presentment currencies.
  """
  amountSet: MoneyBag!

  """
  The human-readable payment gateway name suggested to process the transaction.
  """
  formattedGateway: String

  """The suggested payment gateway used to process the transaction."""
  gateway: String

  """Specifies the kind of the suggested order transaction."""
  kind: SuggestedOrderTransactionKind!

  """
  Specifies the available amount to refund on the gateway. Only available within SuggestedRefund.
  """
  maximumRefundable: Money @deprecated(reason: "Use `maximumRefundableSet` instead.")

  """
  Specifies the available amount to refund on the gateway in shop and
  presentment currencies. Only available within SuggestedRefund.
  """
  maximumRefundableSet: MoneyBag

  """
  The associated parent transaction, for example the authorization of a capture.
  """
  parentTransaction: OrderTransaction
}

"""Specifies the kind of the suggested order transaction."""
enum SuggestedOrderTransactionKind {
  """A suggested refund transaction for an order."""
  SUGGESTED_REFUND
}

"""
Represents a refund suggested by Shopify based on the items being reimbursed.
You can then use the suggested refund object to generate an actual refund.
"""
type SuggestedRefund {
  """The total monetary value to be refunded."""
  amount: Money! @deprecated(reason: "Use `amountSet` instead.")

  """
  The total monetary value to be refunded in shop and presentment currencies.
  """
  amountSet: MoneyBag!

  """The sum of all the discounted prices of the line items being refunded."""
  discountedSubtotalSet: MoneyBag!

  """The total monetary value available to refund."""
  maximumRefundable: Money! @deprecated(reason: "Use `maximumRefundableSet` instead.")

  """
  The total monetary value available to refund in shop and presentment currencies.
  """
  maximumRefundableSet: MoneyBag!

  """A list of duties to be refunded from the order."""
  refundDuties: [RefundDuty!]!

  """A list of line items to be refunded, along with restock instructions."""
  refundLineItems: [RefundLineItem!]!

  """The shipping costs to be refunded from the order."""
  shipping: ShippingRefund!

  """The sum of all the prices of the line items being refunded."""
  subtotal: Money! @deprecated(reason: "Use `subtotalSet` instead.")

  """
  The sum of all the prices of the line items being refunded in shop and presentment currencies.
  """
  subtotalSet: MoneyBag!

  """A list of suggested order transactions."""
  suggestedTransactions: [SuggestedOrderTransaction!]!

  """
  The total cart discount amount that was applied to all line items in this refund.
  """
  totalCartDiscountAmountSet: MoneyBag!

  """
  The sum of all the duties being refunded from the order in shop and presentment currencies. The value must be positive.
  """
  totalDutiesSet: MoneyBag!

  """
  The sum of the taxes being refunded from the order in shop and presentment currencies. The value must be positive.
  """
  totalTaxSet: MoneyBag!

  """
  The sum of the taxes being refunded from the order. The value must be positive.
  """
  totalTaxes: Money! @deprecated(reason: "Use `totalTaxSet` instead.")
}

"""
Represents a return refund suggested by Shopify based on the items being
reimbursed. You can then use the suggested refund object to generate an actual
refund for the return.
"""
type SuggestedReturnRefund {
  """
  The total monetary value to be refunded in shop and presentment currencies.
  """
  amount: MoneyBag!

  """The sum of all the discounted prices of the line items being refunded."""
  discountedSubtotal: MoneyBag!

  """
  The total monetary value available to refund in shop and presentment currencies.
  """
  maximumRefundable: MoneyBag!

  """A list of duties to be refunded from the order."""
  refundDuties: [RefundDuty!]!

  """The shipping costs to be refunded from the order."""
  shipping: ShippingRefund!

  """
  The sum of all the prices of the line items being refunded in shop and presentment currencies.
  """
  subtotal: MoneyBag!

  """A list of suggested order transactions."""
  suggestedTransactions: [SuggestedOrderTransaction!]!

  """
  The total cart discount amount that was applied to all line items in this refund.
  """
  totalCartDiscountAmount: MoneyBag!

  """
  The sum of all the duties being refunded from the order in shop and presentment currencies. The value must be positive.
  """
  totalDuties: MoneyBag!

  """
  The sum of the taxes being refunded in shop and presentment currencies. The value must be positive.
  """
  totalTax: MoneyBag!
}

"""
The result in a tabular format with schema information and formatted and unformatted row data.
"""
type TableData {
  """The data table columns."""
  columns: [TableDataColumn!]!

  """The formatted data values."""
  rowData: [[String!]!]!

  """The unformatted data values."""
  unformattedData: JSON!
}

"""
A nested array representation of the data. An index in an array represents a row number.
"""
type TableDataColumn {
  """The data type of the column value."""
  dataType: String!

  """The display name of the column in the data model."""
  displayName: String!

  """The name of the column in the data model."""
  name: String!
}

"""The default table response structure for a ShopifyQL query."""
type TableResponse implements ShopifyqlResponse {
  """A list of parse errors, if parsing fails."""
  parseErrors: [ParseError!]

  """The result in a tabular format with schema and row data."""
  tableData: TableData
}

"""Return type for `tagsAdd` mutation."""
type TagsAddPayload {
  """The object that was updated."""
  node: Node

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `tagsRemove` mutation."""
type TagsRemovePayload {
  """The object that was updated."""
  node: Node

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Available customer tax exemptions."""
enum TaxExemption {
  """
  This customer is exempt from specific taxes for holding a valid STATUS_CARD_EXEMPTION in Canada.
  """
  CA_STATUS_CARD_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in British Columbia.
  """
  CA_BC_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Manitoba.
  """
  CA_MB_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Saskatchewan.
  """
  CA_SK_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid DIPLOMAT_EXEMPTION in Canada.
  """
  CA_DIPLOMAT_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid COMMERCIAL_FISHERY_EXEMPTION in British Columbia.
  """
  CA_BC_COMMERCIAL_FISHERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid COMMERCIAL_FISHERY_EXEMPTION in Manitoba.
  """
  CA_MB_COMMERCIAL_FISHERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid COMMERCIAL_FISHERY_EXEMPTION in Nova Scotia.
  """
  CA_NS_COMMERCIAL_FISHERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid COMMERCIAL_FISHERY_EXEMPTION in Prince Edward Island.
  """
  CA_PE_COMMERCIAL_FISHERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid COMMERCIAL_FISHERY_EXEMPTION in Saskatchewan.
  """
  CA_SK_COMMERCIAL_FISHERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid PRODUCTION_AND_MACHINERY_EXEMPTION in British Columbia.
  """
  CA_BC_PRODUCTION_AND_MACHINERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid PRODUCTION_AND_MACHINERY_EXEMPTION in Saskatchewan.
  """
  CA_SK_PRODUCTION_AND_MACHINERY_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid SUB_CONTRACTOR_EXEMPTION in British Columbia.
  """
  CA_BC_SUB_CONTRACTOR_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid SUB_CONTRACTOR_EXEMPTION in Saskatchewan.
  """
  CA_SK_SUB_CONTRACTOR_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid CONTRACTOR_EXEMPTION in British Columbia.
  """
  CA_BC_CONTRACTOR_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid CONTRACTOR_EXEMPTION in Saskatchewan.
  """
  CA_SK_CONTRACTOR_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid PURCHASE_EXEMPTION in Ontario.
  """
  CA_ON_PURCHASE_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid FARMER_EXEMPTION in Manitoba.
  """
  CA_MB_FARMER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid FARMER_EXEMPTION in Nova Scotia.
  """
  CA_NS_FARMER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid FARMER_EXEMPTION in Saskatchewan.
  """
  CA_SK_FARMER_EXEMPTION

  """
  This customer is exempt from VAT for purchases within the EU that is shipping from outside of customer's country.
  """
  EU_REVERSE_CHARGE_EXEMPTION_RULE

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Alabama.
  """
  US_AL_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Alaska.
  """
  US_AK_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Arizona.
  """
  US_AZ_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Arkansas.
  """
  US_AR_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in California.
  """
  US_CA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Colorado.
  """
  US_CO_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Connecticut.
  """
  US_CT_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Delaware.
  """
  US_DE_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Florida.
  """
  US_FL_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Georgia.
  """
  US_GA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Hawaii.
  """
  US_HI_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Idaho.
  """
  US_ID_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Illinois.
  """
  US_IL_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Indiana.
  """
  US_IN_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Iowa.
  """
  US_IA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Kansas.
  """
  US_KS_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Kentucky.
  """
  US_KY_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Louisiana.
  """
  US_LA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Maine.
  """
  US_ME_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Maryland.
  """
  US_MD_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Massachusetts.
  """
  US_MA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Michigan.
  """
  US_MI_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Minnesota.
  """
  US_MN_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Mississippi.
  """
  US_MS_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Missouri.
  """
  US_MO_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Montana.
  """
  US_MT_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Nebraska.
  """
  US_NE_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Nevada.
  """
  US_NV_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in New Hampshire.
  """
  US_NH_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in New Jersey.
  """
  US_NJ_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in New Mexico.
  """
  US_NM_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in New York.
  """
  US_NY_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in North Carolina.
  """
  US_NC_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in North Dakota.
  """
  US_ND_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Ohio.
  """
  US_OH_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Oklahoma.
  """
  US_OK_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Oregon.
  """
  US_OR_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Pennsylvania.
  """
  US_PA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Rhode Island.
  """
  US_RI_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in South Carolina.
  """
  US_SC_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in South Dakota.
  """
  US_SD_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Tennessee.
  """
  US_TN_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Texas.
  """
  US_TX_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Utah.
  """
  US_UT_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Vermont.
  """
  US_VT_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Virginia.
  """
  US_VA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Washington.
  """
  US_WA_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in West Virginia.
  """
  US_WV_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Wisconsin.
  """
  US_WI_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Wyoming.
  """
  US_WY_RESELLER_EXEMPTION

  """
  This customer is exempt from specific taxes for holding a valid RESELLER_EXEMPTION in Washington DC.
  """
  US_DC_RESELLER_EXEMPTION
}

"""Represents a single tax applied to the associated line item."""
type TaxLine {
  """
  Whether the channel that submitted the tax line is liable for remitting. A
  value of null indicates unknown liability for this tax line.
  """
  channelLiable: Boolean

  """
  The amount of tax, in shop currency, after discounts and before returns.
  """
  price: Money! @deprecated(reason: "Use `priceSet` instead.")

  """
  The amount of tax, in shop and presentment currencies, after discounts and before returns.
  """
  priceSet: MoneyBag!

  """
  The proportion of the line item price that the tax represents as a decimal.
  """
  rate: Float

  """
  The proportion of the line item price that the tax represents as a percentage.
  """
  ratePercentage: Float

  """The name of the tax."""
  title: String!
}

"""
A TenderTransaction represents a transaction with financial impact on a shop's balance sheet. A tender transaction always
represents actual money movement between a buyer and a shop. TenderTransactions can be used instead of OrderTransactions
for reconciling a shop's cash flow. A TenderTransaction is immutable once created.
"""
type TenderTransaction implements Node {
  """The amount and currency of the tender transaction."""
  amount: MoneyV2!

  """A globally-unique ID."""
  id: ID!

  """Information about the payment method used for the transaction."""
  paymentMethod: String

  """Date and time when the transaction was processed."""
  processedAt: DateTime

  """The remote gateway reference associated with the tender transaction."""
  remoteReference: String

  """Whether the transaction is a test transaction."""
  test: Boolean!

  """Information about the payment instrument used for the transaction."""
  transactionDetails: TenderTransactionDetails

  """The staff member who performed the transaction."""
  user: StaffMember
}

"""
An auto-generated type for paginating through multiple TenderTransactions.
"""
type TenderTransactionConnection {
  """A list of edges."""
  edges: [TenderTransactionEdge!]!

  """A list of the nodes contained in TenderTransactionEdge."""
  nodes: [TenderTransaction!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Information about the credit card used for this transaction."""
type TenderTransactionCreditCardDetails {
  """
  The name of the company that issued the customer's credit card. Example: `Visa`.
  """
  creditCardCompany: String

  """
  The customer's credit card number, with all digits except the last 4 redacted. Example: `•••• •••• •••• 1234`
  """
  creditCardNumber: String
}

"""Information about the payment instrument used for this transaction."""
union TenderTransactionDetails = TenderTransactionCreditCardDetails

"""
An auto-generated type which holds one TenderTransaction and a cursor during pagination.
"""
type TenderTransactionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of TenderTransactionEdge."""
  node: TenderTransaction!
}

"""A sale associated with a tip."""
type TipSale implements Sale {
  """The type of order action that the sale represents."""
  actionType: SaleActionType!

  """The unique ID for the sale."""
  id: ID!

  """The line item for the associated sale."""
  lineItem: LineItem!

  """The line type assocated with the sale."""
  lineType: SaleLineType!

  """The number of units either ordered or intended to be returned."""
  quantity: Int

  """All individual taxes associated with the sale."""
  taxes: [SaleTax!]!

  """The total sale amount after taxes and discounts."""
  totalAmount: MoneyBag!

  """The total discounts allocated to the sale after taxes."""
  totalDiscountAmountAfterTaxes: MoneyBag!

  """The total discounts allocated to the sale before taxes."""
  totalDiscountAmountBeforeTaxes: MoneyBag!

  """The total amount of taxes for the sale."""
  totalTaxAmount: MoneyBag!
}

"""Transaction fee related to an order transaction."""
type TransactionFee implements Node {
  """Amount of the fee."""
  amount: MoneyV2!

  """Flat rate charge for a transaction."""
  flatFee: MoneyV2!

  """Name of the credit card flat fee."""
  flatFeeName: String

  """A globally-unique ID."""
  id: ID!

  """Percentage charge."""
  rate: Decimal!

  """Name of the credit card rate."""
  rateName: String

  """Tax amount charged on the fee."""
  taxAmount: MoneyV2!

  """Name of the type of fee."""
  type: String!
}

"""Translatable content of a resource's field."""
type TranslatableContent {
  """Hash digest representation of the content value."""
  digest: String

  """The resource field that's being translated."""
  key: String!

  """Locale of the content."""
  locale: String!

  """Content value."""
  value: String
}

"""A resource that has translatable fields."""
type TranslatableResource {
  """GID of the resource."""
  resourceId: ID!

  """Translatable content."""
  translatableContent: [TranslatableContent!]!

  """Translatable content translations."""
  translations(
    """Filters translations by locale."""
    locale: String!

    """Filters by outdated translations."""
    outdated: Boolean

    """
    Filters translations by market ID. Use this argument to retrieve content specific to a market.
    """
    marketId: ID
  ): [Translation!]!
}

"""
An auto-generated type for paginating through multiple TranslatableResources.
"""
type TranslatableResourceConnection {
  """A list of edges."""
  edges: [TranslatableResourceEdge!]!

  """A list of the nodes contained in TranslatableResourceEdge."""
  nodes: [TranslatableResource!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""
An auto-generated type which holds one TranslatableResource and a cursor during pagination.
"""
type TranslatableResourceEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of TranslatableResourceEdge."""
  node: TranslatableResource!
}

"""Specifies the type of resources that are translatable."""
enum TranslatableResourceType {
  """
  A product collection. Translatable fields: `title`, `body_html`, `handle`, `meta_title`, `meta_description`.
  """
  COLLECTION

  """
  The delivery method definition. For example, "Standard", or "Expedited".
          Translatable fields: `name`.
  """
  DELIVERY_METHOD_DEFINITION

  """An email template. Translatable fields: `title`, `body_html`."""
  EMAIL_TEMPLATE

  """A link to direct users. Translatable fields: `title`."""
  LINK

  """A Metafield. Translatable fields: `value`."""
  METAFIELD

  """
  An online store article. Translatable fields: `title`, `body_html`,
  `summary_html`, `handle`, `meta_title`, `meta_description`.
  """
  ONLINE_STORE_ARTICLE

  """
  An online store blog. Translatable fields: `title`, `handle`, `meta_title`, `meta_description`.
  """
  ONLINE_STORE_BLOG

  """A category of links. Translatable fields: `title`."""
  ONLINE_STORE_MENU

  """
  An online store page. Translatable fields: `title`, `body_html`, `handle`, `meta_title`, `meta_description`.
  """
  ONLINE_STORE_PAGE

  """
  An online store theme. Translatable fields: `dynamic keys based on theme data`.
  """
  ONLINE_STORE_THEME

  """A packing slip template. Translatable fields: `body`."""
  PACKING_SLIP_TEMPLATE

  """A payment gateway. Translatable fields: `name`."""
  PAYMENT_GATEWAY

  """
  An online store product. Translatable fields: `title`, `body_html`, `handle`, `meta_title`, `meta_description`.
  """
  PRODUCT

  """
  An online store custom product property name. For example, "Size", "Color", or "Material".
          Translatable fields: `name`.
  """
  PRODUCT_OPTION

  """
  An online store product variant. Translatable fields: `title`, `option1`,
  `option2`, `option3`. The field `title` has been deprecated.
  """
  PRODUCT_VARIANT

  """
  A selling plan. Translatable fields:`name`, `option1`, `option2`, `option3`, `description`.
  """
  SELLING_PLAN

  """
  A selling plan group. Translatable fields: `name`, `option1`, `option2`, `option3`.
  """
  SELLING_PLAN_GROUP

  """A shop. Translatable fields: `meta_title`, `meta_description`."""
  SHOP

  """A shop policy. Translatable fields: `body`."""
  SHOP_POLICY
}

"""Translation of a field of a resource."""
type Translation {
  """
  On the resource that this translation belongs to, the reference to the value being translated.
  """
  key: String!

  """ISO code of the translation locale."""
  locale: String!

  """
  The market that the translation is specific to. Null value means the translation is available in all markets.
  """
  market: Market

  """
  Whether the original content has changed since this translation was updated.
  """
  outdated: Boolean!

  """The date and time when the translation was updated."""
  updatedAt: DateTime

  """Translation value."""
  value: String
}

"""Possible error codes that can be returned by `TranslationUserError`."""
enum TranslationErrorCode {
  """The input value is blank."""
  BLANK

  """The input value is invalid."""
  INVALID

  """Resource does not exist."""
  RESOURCE_NOT_FOUND

  """Too many translation keys for the resource."""
  TOO_MANY_KEYS_FOR_RESOURCE

  """Translation key is invalid."""
  INVALID_KEY_FOR_MODEL

  """Translation value is invalid."""
  FAILS_RESOURCE_VALIDATION

  """Translatable content is invalid."""
  INVALID_TRANSLATABLE_CONTENT

  """Market localizable content is invalid."""
  INVALID_MARKET_LOCALIZABLE_CONTENT

  """Locale is invalid for the shop."""
  INVALID_LOCALE_FOR_SHOP

  """Locale language code is invalid."""
  INVALID_CODE

  """Locale code format is invalid."""
  INVALID_FORMAT

  """The shop isn't allowed to operate on market custom content."""
  MARKET_CUSTOM_CONTENT_NOT_ALLOWED

  """The market corresponding to the `marketId` argument doesn't exist."""
  MARKET_DOES_NOT_EXIST

  """The market override locale creation failed."""
  MARKET_LOCALE_CREATION_FAILED

  """The specified resource can't be customized for a market."""
  RESOURCE_NOT_MARKET_CUSTOMIZABLE

  """
  The locale is missing on the market corresponding to the `marketId` argument.
  """
  INVALID_LOCALE_FOR_MARKET

  """The handle is already taken for this resource."""
  INVALID_VALUE_FOR_HANDLE_TRANSLATION
}

"""The input fields and values for creating or updating a translation."""
input TranslationInput {
  """
  ISO code of the locale being translated into. Only locales returned in `shopLocales` are valid.
  """
  locale: String!

  """
  On the resource that this translation belongs to, the reference to the value being translated.
  """
  key: String!

  """The value of the translation."""
  value: String!

  """Hash digest representation of the content being translated."""
  translatableContentDigest: String!

  """
  The ID of the market that the translation is specific to. Not specifying this
  field means that the translation will be available in all markets.
  """
  marketId: ID
}

"""Return type for `translationsRegister` mutation."""
type TranslationsRegisterPayload {
  """The translations that were created or updated."""
  translations: [Translation!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [TranslationUserError!]!
}

"""Return type for `translationsRemove` mutation."""
type TranslationsRemovePayload {
  """The translations that were deleted."""
  translations: [Translation!]

  """The list of errors that occurred from executing the mutation."""
  userErrors: [TranslationUserError!]!
}

"""
Represents an error that happens during the execution of a translation mutation.
"""
type TranslationUserError implements DisplayableError {
  """The error code."""
  code: TranslationErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents a typed custom attribute."""
type TypedAttribute {
  """Key or name of the attribute."""
  key: String!

  """Value of the attribute."""
  value: String!
}

"""Systems of weights and measures."""
enum UnitSystem {
  """Imperial system of weights and measures."""
  IMPERIAL_SYSTEM

  """Metric system of weights and measures."""
  METRIC_SYSTEM
}

"""
An unsigned 64-bit integer. Represents whole numeric values between 0 and 2^64 - 1 encoded as a string of base-10 digits.

Example value: `"50"`.
"""
scalar UnsignedInt64

"""The input fields required to update a media object."""
input UpdateMediaInput {
  """Specifies the media to update."""
  id: ID!

  """
  The source from which to update the media preview image. May be an external URL or staged upload URL.
  """
  previewImageSource: String

  """The alt text associated to the media."""
  alt: String
}

"""
Represents an [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) and
[RFC 3987](https://datatracker.ietf.org/doc/html/rfc3987)-compliant URI string.

For example, `"https://johns-apparel.myshopify.com"` is a valid URL. It includes a scheme (`https`) and a host
(`johns-apparel.myshopify.com`).
"""
scalar URL

"""The URL redirect for the online store."""
type UrlRedirect implements Node {
  """The ID of the URL redirect."""
  id: ID!

  """
  The old path to be redirected from. When the user visits this path, they will be redirected to the target location.
  """
  path: String!

  """The target location where the user will be redirected to."""
  target: String!
}

"""Return type for `urlRedirectBulkDeleteAll` mutation."""
type UrlRedirectBulkDeleteAllPayload {
  """The asynchronous job removing the redirects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""Return type for `urlRedirectBulkDeleteByIds` mutation."""
type UrlRedirectBulkDeleteByIdsPayload {
  """The asynchronous job removing the redirects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectBulkDeleteByIdsUserError!]!
}

"""
An error that occurs during the execution of `UrlRedirectBulkDeleteByIds`.
"""
type UrlRedirectBulkDeleteByIdsUserError implements DisplayableError {
  """The error code."""
  code: UrlRedirectBulkDeleteByIdsUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `UrlRedirectBulkDeleteByIdsUserError`.
"""
enum UrlRedirectBulkDeleteByIdsUserErrorCode {
  """
  You must pass one or more [`URLRedirect`](
              https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect
            ) object IDs.
  """
  IDS_EMPTY
}

"""Return type for `urlRedirectBulkDeleteBySavedSearch` mutation."""
type UrlRedirectBulkDeleteBySavedSearchPayload {
  """The asynchronous job removing the redirects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectBulkDeleteBySavedSearchUserError!]!
}

"""
An error that occurs during the execution of `UrlRedirectBulkDeleteBySavedSearch`.
"""
type UrlRedirectBulkDeleteBySavedSearchUserError implements DisplayableError {
  """The error code."""
  code: UrlRedirectBulkDeleteBySavedSearchUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `UrlRedirectBulkDeleteBySavedSearchUserError`.
"""
enum UrlRedirectBulkDeleteBySavedSearchUserErrorCode {
  """Saved search not found."""
  SAVED_SEARCH_NOT_FOUND

  """The saved search's query cannot match all entries or be empty."""
  INVALID_SAVED_SEARCH_QUERY
}

"""Return type for `urlRedirectBulkDeleteBySearch` mutation."""
type UrlRedirectBulkDeleteBySearchPayload {
  """The asynchronous job removing the redirects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectBulkDeleteBySearchUserError!]!
}

"""
An error that occurs during the execution of `UrlRedirectBulkDeleteBySearch`.
"""
type UrlRedirectBulkDeleteBySearchUserError implements DisplayableError {
  """The error code."""
  code: UrlRedirectBulkDeleteBySearchUserErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Possible error codes that can be returned by `UrlRedirectBulkDeleteBySearchUserError`.
"""
enum UrlRedirectBulkDeleteBySearchUserErrorCode {
  """Invalid search string."""
  INVALID_SEARCH_ARGUMENT
}

"""An auto-generated type for paginating through multiple UrlRedirects."""
type UrlRedirectConnection {
  """A list of edges."""
  edges: [UrlRedirectEdge!]!

  """A list of the nodes contained in UrlRedirectEdge."""
  nodes: [UrlRedirect!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `urlRedirectCreate` mutation."""
type UrlRedirectCreatePayload {
  """The created redirect."""
  urlRedirect: UrlRedirect

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectUserError!]!
}

"""Return type for `urlRedirectDelete` mutation."""
type UrlRedirectDeletePayload {
  """The ID of the deleted redirect."""
  deletedUrlRedirectId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectUserError!]!
}

"""
An auto-generated type which holds one UrlRedirect and a cursor during pagination.
"""
type UrlRedirectEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of UrlRedirectEdge."""
  node: UrlRedirect!
}

"""Possible error codes that can be returned by `UrlRedirectUserError`."""
enum UrlRedirectErrorCode {
  """Redirect does not exist."""
  DOES_NOT_EXIST

  """Redirect could not be created."""
  CREATE_FAILED

  """Redirect could not be updated."""
  UPDATE_FAILED

  """Redirect could not be deleted."""
  DELETE_FAILED
}

"""
A request to import a [`URLRedirect`](https://shopify.dev/api/admin-graphql/latest/objects/UrlRedirect) object
into the Online Store channel. Apps can use this to query the state of an `UrlRedirectImport` request.

For more information, see [`url-redirect`](https://help.shopify.com/en/manual/online-store/menus-and-links/url-redirect)s.
"""
type UrlRedirectImport implements Node {
  """The number of rows in the file."""
  count: Int

  """The number of redirects created from the import."""
  createdCount: Int

  """The number of redirects that failed to be imported."""
  failedCount: Int

  """Whether the import is finished."""
  finished: Boolean!

  """The date and time when the import finished."""
  finishedAt: DateTime

  """The ID of the `UrlRedirectImport` object."""
  id: ID!

  """A list of up to three previews of the URL redirects to be imported."""
  previewRedirects: [UrlRedirectImportPreview!]!

  """The number of redirects updated during the import."""
  updatedCount: Int
}

"""Return type for `urlRedirectImportCreate` mutation."""
type UrlRedirectImportCreatePayload {
  """The created `URLRedirectImport` object."""
  urlRedirectImport: UrlRedirectImport

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectImportUserError!]!
}

"""
Possible error codes that can be returned by `UrlRedirectImportUserError`.
"""
enum UrlRedirectImportErrorCode {
  """CSV file does not exist at given URL."""
  FILE_DOES_NOT_EXIST @deprecated(reason: "This error code is never returned")

  """URL redirect import not found."""
  NOT_FOUND

  """The import has already completed."""
  ALREADY_IMPORTED

  """The import is already in progress."""
  IN_PROGRESS
}

"""A preview of a URL redirect import row."""
type UrlRedirectImportPreview {
  """
  The old path to be redirected from. When the user visits this path, they will be redirected to the target location.
  """
  path: String!

  """The target location where the user will be redirected to."""
  target: String!
}

"""Return type for `urlRedirectImportSubmit` mutation."""
type UrlRedirectImportSubmitPayload {
  """The asynchronous job importing the redirects."""
  job: Job

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectImportUserError!]!
}

"""
Represents an error that happens during execution of a redirect import mutation.
"""
type UrlRedirectImportUserError implements DisplayableError {
  """The error code."""
  code: UrlRedirectImportErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""The input fields to create or update a URL redirect."""
input UrlRedirectInput {
  """
  The old path to be redirected from. When the user visits this path, they will be redirected to the target location.
  """
  path: String

  """The target location where the user will be redirected to."""
  target: String
}

"""The set of valid sort keys for the UrlRedirect query."""
enum UrlRedirectSortKeys {
  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE

  """Sort by the `path` value."""
  PATH

  """Sort by the `id` value."""
  ID
}

"""Return type for `urlRedirectUpdate` mutation."""
type UrlRedirectUpdatePayload {
  """Returns the updated URL redirect."""
  urlRedirect: UrlRedirect

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UrlRedirectUserError!]!
}

"""
Represents an error that happens during execution of a redirect mutation.
"""
type UrlRedirectUserError implements DisplayableError {
  """The error code."""
  code: UrlRedirectErrorCode

  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""Represents an error in the input of a mutation."""
type UserError implements DisplayableError {
  """The path to the input field that caused the error."""
  field: [String!]

  """The error message."""
  message: String!
}

"""
Time between UTC time and a location's observed time, in the format `"+HH:MM"` or `"-HH:MM"`.

Example value: `"-07:00"`.
"""
scalar UtcOffset

"""
Specifies the
[Urchin Traffic Module (UTM) parameters](https://en.wikipedia.org/wiki/UTM_parameters)
that are associated with a related marketing campaign.
"""
input UTMInput {
  """The name of the UTM campaign."""
  campaign: String!

  """The name of the website or application where the referral link exists."""
  source: String!

  """The UTM campaign medium."""
  medium: String!
}

"""Represents a set of UTM parameters."""
type UTMParameters {
  """The name of a marketing campaign."""
  campaign: String

  """
  Identifies specific content in a marketing campaign. Used to differentiate
  between similar content or links in a marketing campaign to determine which is
  the most effective.
  """
  content: String

  """
  The medium of a marketing campaign, such as a banner or email newsletter.
  """
  medium: String

  """
  The source of traffic to the merchant's store, such as Google or an email newsletter.
  """
  source: String

  """Paid search terms used by a marketing campaign."""
  term: String
}

"""Represents a credit card payment instrument."""
type VaultCreditCard {
  """The billing address of the card."""
  billingAddress: CustomerCreditCardBillingAddress

  """The brand for the card."""
  brand: String!

  """Whether the card has been expired."""
  expired: Boolean!

  """The expiry month of the card."""
  expiryMonth: Int!

  """The expiry year of the card."""
  expiryYear: Int!

  """The last four digits for the card."""
  lastDigits: String!

  """The name of the card holder."""
  name: String!
}

"""Represents a paypal billing agreement payment instrument."""
type VaultPaypalBillingAgreement {
  """Whether the paypal billing agreement is inactive."""
  inactive: Boolean!

  """The paypal account name."""
  name: String!

  """The paypal account email address."""
  paypalAccountEmail: String!
}

"""
Representation of 3d vectors and points. It can represent
either the coordinates of a point in space, a direction, or
size. Presented as an object with three floating-point values.
"""
type Vector3 {
  """The x coordinate of Vector3."""
  x: Float!

  """The y coordinate of Vector3."""
  y: Float!

  """The z coordinate of Vector3."""
  z: Float!
}

"""Represents a Shopify hosted video."""
type Video implements File & Media & Node {
  """A word or phrase to share the nature or contents of a media."""
  alt: String

  """
  The date and time ([ISO 8601 format](http://en.wikipedia.org/wiki/ISO_8601)) when the file was created.
  """
  createdAt: DateTime!

  """
  The video's duration in milliseconds. This value is `null` unless the video's status field is
  [READY](https://shopify.dev/api/admin-graphql/latest/enums/MediaStatus#value-ready).
  """
  duration: Int

  """Any errors that have occurred on the file."""
  fileErrors: [FileError!]!

  """The status of the file."""
  fileStatus: FileStatus!

  """The video's filename."""
  filename: String!

  """A globally-unique ID."""
  id: ID!

  """The media content type."""
  mediaContentType: MediaContentType!

  """Any errors which have occurred on the media."""
  mediaErrors: [MediaError!]!

  """The warnings attached to the media."""
  mediaWarnings: [MediaWarning!]!

  """
  The video's original source. This value is `null` unless the video's status field is
  [READY](https://shopify.dev/api/admin-graphql/latest/enums/MediaStatus#value-ready).
  """
  originalSource: VideoSource

  """The preview image for the media."""
  preview: MediaPreviewImage

  """
  The video's sources. This value is empty unless the video's status field is
  [READY](https://shopify.dev/api/admin-graphql/latest/enums/MediaStatus#value-ready).
  """
  sources: [VideoSource!]!

  """Current status of the media."""
  status: MediaStatus!
}

"""
Represents a source for a Shopify hosted video.

Types of sources include the original video, lower resolution versions of the original video,
and an m3u8 playlist file.

Only [videos](https://shopify.dev/api/admin-graphql/latest/objects/video) with a status field
of [READY](https://shopify.dev/api/admin-graphql/latest/enums/MediaStatus#value-ready) have sources.
"""
type VideoSource {
  """The video source's file size in bytes."""
  fileSize: Int

  """The video source's file format extension."""
  format: String!

  """The video source's height."""
  height: Int!

  """The video source's MIME type."""
  mimeType: String!

  """The video source's URL."""
  url: String!

  """The video source's width."""
  width: Int!
}

"""A type of visualization."""
enum VisualizationType {
  """Line Chart."""
  LINE

  """Bar Chart."""
  BAR
}

"""
An Amazon EventBridge partner event source to which webhook subscriptions publish events.
"""
type WebhookEventBridgeEndpoint {
  """The ARN of this EventBridge partner event source."""
  arn: ARN!
}

"""An HTTPS endpoint to which webhook subscriptions send POST requests."""
type WebhookHttpEndpoint {
  """The URL to which the webhooks events are sent."""
  callbackUrl: URL!
}

"""
A Google Cloud Pub/Sub topic to which webhook subscriptions publish events.
"""
type WebhookPubSubEndpoint {
  """The Google Cloud Pub/Sub project ID."""
  pubSubProject: String!

  """The Google Cloud Pub/Sub topic ID."""
  pubSubTopic: String!
}

"""
A webhook subscription is a persisted data object created by an app using the REST Admin API or GraphQL Admin API.
It describes the topic that the app wants to receive, and a destination where
Shopify should send webhooks of the specified topic.
When an event for a given topic occurs, the webhook subscription sends a relevant payload to the destination.
Learn more about the [webhooks system](https://shopify.dev/apps/webhooks).
"""
type WebhookSubscription implements LegacyInteroperability & Node {
  """
  The destination URI to which the webhook subscription will send a message when an event occurs.
  """
  callbackUrl: URL! @deprecated(reason: "Use `endpoint` instead.")

  """The date and time when the webhook subscription was created."""
  createdAt: DateTime!

  """The endpoint to which the webhook subscription will send events."""
  endpoint: WebhookSubscriptionEndpoint!

  """The format in which the webhook subscription should send the data."""
  format: WebhookSubscriptionFormat!

  """A globally-unique ID."""
  id: ID!

  """
  An optional array of top-level resource fields that should be serialized and
  sent in the webhook message. If null, then all fields will be sent.
  """
  includeFields: [String!]!

  """The ID of the corresponding resource in the REST Admin API."""
  legacyResourceId: UnsignedInt64!

  """
  The list of namespaces for any metafields that should be included in the webhook subscription.
  """
  metafieldNamespaces: [String!]!

  """
  The list of namespaces for private metafields that should be included in the webhook subscription.
  """
  privateMetafieldNamespaces: [String!]! @deprecated(reason: "Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).\n")

  """
  The type of event that triggers the webhook. The topic determines when the
  webhook subscription sends a webhook, as well as what class of data object
  that webhook contains.
  """
  topic: WebhookSubscriptionTopic!

  """The date and time when the webhook subscription was updated."""
  updatedAt: DateTime!
}

"""
An auto-generated type for paginating through multiple WebhookSubscriptions.
"""
type WebhookSubscriptionConnection {
  """A list of edges."""
  edges: [WebhookSubscriptionEdge!]!

  """A list of the nodes contained in WebhookSubscriptionEdge."""
  nodes: [WebhookSubscription!]!

  """Information to aid in pagination."""
  pageInfo: PageInfo!
}

"""Return type for `webhookSubscriptionCreate` mutation."""
type WebhookSubscriptionCreatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!

  """The webhook subscription that was created."""
  webhookSubscription: WebhookSubscription
}

"""Return type for `webhookSubscriptionDelete` mutation."""
type WebhookSubscriptionDeletePayload {
  """The ID of the deleted webhook subscription."""
  deletedWebhookSubscriptionId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!
}

"""
An auto-generated type which holds one WebhookSubscription and a cursor during pagination.
"""
type WebhookSubscriptionEdge {
  """A cursor for use in pagination."""
  cursor: String!

  """The item at the end of WebhookSubscriptionEdge."""
  node: WebhookSubscription!
}

"""An endpoint to which webhook subscriptions send webhooks events."""
union WebhookSubscriptionEndpoint = WebhookEventBridgeEndpoint | WebhookHttpEndpoint | WebhookPubSubEndpoint

"""The supported formats for webhook subscriptions."""
enum WebhookSubscriptionFormat {
  JSON
  XML
}

"""The input fields for a webhook subscription."""
input WebhookSubscriptionInput {
  """
  URL where the webhook subscription should send the POST request when the event occurs.
  """
  callbackUrl: URL

  """The format in which the webhook subscription should send the data."""
  format: WebhookSubscriptionFormat

  """The list of fields to be included in the webhook subscription."""
  includeFields: [String!]

  """
  The list of namespaces for any metafields that should be included in the webhook subscription.
  """
  metafieldNamespaces: [String!]
}

"""The set of valid sort keys for the WebhookSubscription query."""
enum WebhookSubscriptionSortKeys {
  """Sort by the `created_at` value."""
  CREATED_AT

  """Sort by the `id` value."""
  ID

  """
  Sort by relevance to the search terms when the `query` parameter is specified on the connection.
  Don't use this sort key when no search query is specified.
  """
  RELEVANCE
}

"""
The supported topics for webhook subscriptions. You can use webhook subscriptions to receive
notifications about particular events in a shop.

You don't create webhook subscriptions to
[mandatory webhooks](https://shopify.dev/apps/webhooks/configuration/mandatory-webhooks).
Instead, you configure mandatory webhooks in your Partner Dashboard as part of your app setup.
"""
enum WebhookSubscriptionTopic {
  """
  The webhook topic for `app/uninstalled` events. Occurs whenever a shop has uninstalled the app.
  """
  APP_UNINSTALLED

  """
  The webhook topic for `carts/create` events. Occurs when a cart is created in
  the online store. Other types of carts aren't supported. For example, the
  webhook doesn't support carts that are created in a custom storefront.
  Requires the `read_orders` scope.
  """
  CARTS_CREATE

  """
  The webhook topic for `carts/update` events. Occurs when a cart is updated in
  the online store. Other types of carts aren't supported. For example, the
  webhook doesn't support carts that are updated in a custom storefront.
  Requires the `read_orders` scope.
  """
  CARTS_UPDATE

  """
  The webhook topic for `channels/delete` events. Occurs whenever a channel is
  deleted. Requires the `read_publications` scope.
  """
  CHANNELS_DELETE

  """
  The webhook topic for `checkouts/create` events. Occurs whenever a checkout is created. Requires the `read_orders` scope.
  """
  CHECKOUTS_CREATE

  """
  The webhook topic for `checkouts/delete` events. Occurs whenever a checkout is deleted. Requires the `read_orders` scope.
  """
  CHECKOUTS_DELETE

  """
  The webhook topic for `checkouts/update` events. Occurs whenever a checkout is updated. Requires the `read_orders` scope.
  """
  CHECKOUTS_UPDATE

  """
  The webhook topic for `customer_payment_methods/create` events. Occurs
  whenever a customer payment method is created. Requires the
  `read_customer_payment_methods` scope.
  """
  CUSTOMER_PAYMENT_METHODS_CREATE

  """
  The webhook topic for `customer_payment_methods/update` events. Occurs
  whenever a customer payment method is updated. Requires the
  `read_customer_payment_methods` scope.
  """
  CUSTOMER_PAYMENT_METHODS_UPDATE

  """
  The webhook topic for `customer_payment_methods/revoke` events. Occurs
  whenever a customer payment method is revoked. Requires the
  `read_customer_payment_methods` scope.
  """
  CUSTOMER_PAYMENT_METHODS_REVOKE

  """
  The webhook topic for `collection_listings/add` events. Occurs whenever a
  collection listing is added. Requires the `read_product_listings` scope.
  """
  COLLECTION_LISTINGS_ADD

  """
  The webhook topic for `collection_listings/remove` events. Occurs whenever a
  collection listing is removed. Requires the `read_product_listings` scope.
  """
  COLLECTION_LISTINGS_REMOVE

  """
  The webhook topic for `collection_listings/update` events. Occurs whenever a
  collection listing is updated. Requires the `read_product_listings` scope.
  """
  COLLECTION_LISTINGS_UPDATE

  """
  The webhook topic for `collection_publications/create` events. Occurs whenever
  a collection publication listing is created. Requires the `read_publications` scope.
  """
  COLLECTION_PUBLICATIONS_CREATE

  """
  The webhook topic for `collection_publications/delete` events. Occurs whenever
  a collection publication listing is deleted. Requires the `read_publications` scope.
  """
  COLLECTION_PUBLICATIONS_DELETE

  """
  The webhook topic for `collection_publications/update` events. Occurs whenever
  a collection publication listing is updated. Requires the `read_publications` scope.
  """
  COLLECTION_PUBLICATIONS_UPDATE

  """
  The webhook topic for `collections/create` events. Occurs whenever a
  collection is created. Requires the `read_products` scope.
  """
  COLLECTIONS_CREATE

  """
  The webhook topic for `collections/delete` events. Occurs whenever a
  collection is deleted. Requires the `read_products` scope.
  """
  COLLECTIONS_DELETE

  """
  The webhook topic for `collections/update` events. Occurs whenever a
  collection is updated, including whenever products are added or removed from
  the collection. Occurs once if multiple products are added or removed from a
  collection at the same time. Requires the `read_products` scope.
  """
  COLLECTIONS_UPDATE

  """
  The webhook topic for `customer_groups/create` events. Occurs whenever a
  customer saved search is created. Requires the `read_customers` scope.
  """
  CUSTOMER_GROUPS_CREATE

  """
  The webhook topic for `customer_groups/delete` events. Occurs whenever a
  customer saved search is deleted. Requires the `read_customers` scope.
  """
  CUSTOMER_GROUPS_DELETE

  """
  The webhook topic for `customer_groups/update` events. Occurs whenever a
  customer saved search is updated. Requires the `read_customers` scope.
  """
  CUSTOMER_GROUPS_UPDATE

  """
  The webhook topic for `customers/create` events. Occurs whenever a customer is
  created. Requires the `read_customers` scope.
  """
  CUSTOMERS_CREATE

  """
  The webhook topic for `customers/delete` events. Occurs whenever a customer is
  deleted. Requires the `read_customers` scope.
  """
  CUSTOMERS_DELETE

  """
  The webhook topic for `customers/disable` events. Occurs whenever a customer
  account is disabled. Requires the `read_customers` scope.
  """
  CUSTOMERS_DISABLE

  """
  The webhook topic for `customers/enable` events. Occurs whenever a customer
  account is enabled. Requires the `read_customers` scope.
  """
  CUSTOMERS_ENABLE

  """
  The webhook topic for `customers/update` events. Occurs whenever a customer is
  updated. Requires the `read_customers` scope.
  """
  CUSTOMERS_UPDATE

  """
  The webhook topic for `customers_marketing_consent/update` events. Occurs
  whenever a customer's SMS marketing consent is updated. Requires the
  `read_customers` scope.
  """
  CUSTOMERS_MARKETING_CONSENT_UPDATE

  """
  The webhook topic for `disputes/create` events. Occurs whenever a dispute is
  created. Requires the `read_shopify_payments_disputes` scope.
  """
  DISPUTES_CREATE

  """
  The webhook topic for `disputes/update` events. Occurs whenever a dispute is
  updated. Requires the `read_shopify_payments_disputes` scope.
  """
  DISPUTES_UPDATE

  """
  The webhook topic for `draft_orders/create` events. Occurs whenever a draft
  order is created. Requires the `read_draft_orders` scope.
  """
  DRAFT_ORDERS_CREATE

  """
  The webhook topic for `draft_orders/delete` events. Occurs whenever a draft
  order is deleted. Requires the `read_draft_orders` scope.
  """
  DRAFT_ORDERS_DELETE

  """
  The webhook topic for `draft_orders/update` events. Occurs whenever a draft
  order is updated. Requires the `read_draft_orders` scope.
  """
  DRAFT_ORDERS_UPDATE

  """
  The webhook topic for `fulfillment_events/create` events. Occurs whenever a
  fulfillment event is created. Requires the `read_fulfillments` scope.
  """
  FULFILLMENT_EVENTS_CREATE

  """
  The webhook topic for `fulfillment_events/delete` events. Occurs whenever a
  fulfillment event is deleted. Requires the `read_fulfillments` scope.
  """
  FULFILLMENT_EVENTS_DELETE

  """
  The webhook topic for `fulfillments/create` events. Occurs whenever a
  fulfillment is created. Requires at least one of the following scopes:
  read_fulfillments, read_marketplace_orders.
  """
  FULFILLMENTS_CREATE

  """
  The webhook topic for `fulfillments/update` events. Occurs whenever a
  fulfillment is updated. Requires at least one of the following scopes:
  read_fulfillments, read_marketplace_orders.
  """
  FULFILLMENTS_UPDATE

  """
  The webhook topic for `attributed_sessions/first` events. Occurs whenever an
  order with a "first" attributed session is attributed. Requires the
  `read_marketing_events` scope.
  """
  ATTRIBUTED_SESSIONS_FIRST

  """
  The webhook topic for `attributed_sessions/last` events. Occurs whenever an
  order with a "last" attributed session is attributed. Requires the
  `read_marketing_events` scope.
  """
  ATTRIBUTED_SESSIONS_LAST

  """
  The webhook topic for `order_transactions/create` events. Occurs when a order
  transaction is created or when it's status is updated. Only occurs for
  transactions with a status of success, failure or error. Requires at least one
  of the following scopes: read_orders, read_marketplace_orders,
  read_buyer_membership_orders.
  """
  ORDER_TRANSACTIONS_CREATE

  """
  The webhook topic for `orders/cancelled` events. Occurs whenever an order is
  cancelled. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_buyer_membership_orders.
  """
  ORDERS_CANCELLED

  """
  The webhook topic for `orders/create` events. Occurs whenever an order is
  created. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders.
  """
  ORDERS_CREATE

  """
  The webhook topic for `orders/delete` events. Occurs whenever an order is deleted. Requires the `read_orders` scope.
  """
  ORDERS_DELETE

  """
  The webhook topic for `orders/edited` events. Occurs whenever an order is
  edited. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_buyer_membership_orders.
  """
  ORDERS_EDITED

  """
  The webhook topic for `orders/fulfilled` events. Occurs whenever an order is
  fulfilled. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders.
  """
  ORDERS_FULFILLED

  """
  The webhook topic for `orders/paid` events. Occurs whenever an order is paid.
  Requires at least one of the following scopes: read_orders,
  read_marketplace_orders.
  """
  ORDERS_PAID

  """
  The webhook topic for `orders/partially_fulfilled` events. Occurs whenever an
  order is partially fulfilled. Requires at least one of the following scopes:
  read_orders, read_marketplace_orders.
  """
  ORDERS_PARTIALLY_FULFILLED

  """
  The webhook topic for `orders/updated` events. Occurs whenever an order is
  updated. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_buyer_membership_orders.
  """
  ORDERS_UPDATED

  """
  The webhook topic for `fulfillment_orders/moved` events. Occurs whenever the
  location which is assigned to fulfill one or more fulfillment order line items is changed.
  
  * `original_fulfillment_order` - The final state of the original fulfillment order.
  * `moved_fulfillment_order` - The fulfillment order which now contains the re-assigned line items.
  * `source_location` - The original location which was assigned to fulfill the
  line items (available as of the `2023-04` API version).
  * `destination_location_id` - The ID of the location which is now responsible for fulfilling the line items.
  
  **Note:** The [assignedLocation](https://shopify.dev/docs/api/admin-graphql/latest/objects/fulfillmentorder#field-fulfillmentorder-assignedlocation)
  of the `original_fulfillment_order` might be changed by the move operation.
  If you need to determine the originally assigned location, then you should refer to the `source_location`.
  
  [Learn more about moving line items](https://shopify.dev/docs/api/admin-graphql/latest/mutations/fulfillmentOrderMove).
   Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_MOVED

  """
  The webhook topic for `fulfillment_orders/hold_released` events. Occurs
  whenever a fulfillment order hold is released. Requires at least one of the
  following scopes: read_merchant_managed_fulfillment_orders,
  read_assigned_fulfillment_orders, read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_HOLD_RELEASED

  """
  The webhook topic for `fulfillment_orders/scheduled_fulfillment_order_ready`
  events. Occurs whenever a fulfillment order which was scheduled becomes due.
  Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY

  """
  The webhook topic for `fulfillment_orders/order_routing_complete` events.
  Occurs when an order has finished being routed and it's fulfillment orders
  assigned to a fulfillment service's location. Requires at least one of the
  following scopes: read_merchant_managed_fulfillment_orders,
  read_assigned_fulfillment_orders, read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE

  """
  The webhook topic for `fulfillment_orders/cancelled` events. Occurs when a
  fulfillment order is cancelled. Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_CANCELLED

  """
  The webhook topic for
  `fulfillment_orders/fulfillment_service_failed_to_complete` events. Occurs
  when a fulfillment service intends to close an in_progress fulfillment order.
  Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE

  """
  The webhook topic for `fulfillment_orders/fulfillment_request_rejected`
  events. Occurs when a 3PL rejects a fulfillment request that was sent by a
  merchant. Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED

  """
  The webhook topic for `fulfillment_orders/cancellation_request_submitted`
  events. Occurs when a merchant requests a fulfillment request to be cancelled
  after that request was approved by a 3PL. Requires at least one of the
  following scopes: read_merchant_managed_fulfillment_orders,
  read_assigned_fulfillment_orders, read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED

  """
  The webhook topic for `fulfillment_orders/cancellation_request_accepted`
  events. Occurs when a 3PL accepts a fulfillment cancellation request, received
  from a merchant. Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED

  """
  The webhook topic for `fulfillment_orders/cancellation_request_rejected`
  events. Occurs when a 3PL rejects a fulfillment cancellation request, received
  from a merchant. Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED

  """
  The webhook topic for `fulfillment_orders/fulfillment_request_submitted`
  events. Occurs when a merchant submits a fulfillment request to a 3PL.
  Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED

  """
  The webhook topic for `fulfillment_orders/fulfillment_request_accepted`
  events. Occurs when a fulfillment service accepts a request to fulfill a
  fulfillment order. Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED

  """
  The webhook topic for
  `fulfillment_orders/line_items_prepared_for_local_delivery` events. Occurs
  whenever a fulfillment order's line items are prepared for local delivery.
  Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY

  """
  The webhook topic for `fulfillment_orders/placed_on_hold` events. Occurs when
  a fulfillment order is placed on hold. Requires at least one of the following
  scopes: read_merchant_managed_fulfillment_orders,
  read_assigned_fulfillment_orders, read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_PLACED_ON_HOLD

  """
  The webhook topic for `product_listings/add` events. Occurs whenever an active
  product is listed on a channel. Requires the `read_product_listings` scope.
  """
  PRODUCT_LISTINGS_ADD

  """
  The webhook topic for `product_listings/remove` events. Occurs whenever a
  product listing is removed from the channel. Requires the
  `read_product_listings` scope.
  """
  PRODUCT_LISTINGS_REMOVE

  """
  The webhook topic for `product_listings/update` events. Occurs whenever a
  product publication is updated. Requires the `read_product_listings` scope.
  """
  PRODUCT_LISTINGS_UPDATE

  """
  The webhook topic for `scheduled_product_listings/add` events. Occurs whenever
  a product is scheduled to be published. Requires the `read_product_listings` scope.
  """
  SCHEDULED_PRODUCT_LISTINGS_ADD

  """
  The webhook topic for `scheduled_product_listings/update` events. Occurs
  whenever a product's scheduled availability date changes. Requires the
  `read_product_listings` scope.
  """
  SCHEDULED_PRODUCT_LISTINGS_UPDATE

  """
  The webhook topic for `scheduled_product_listings/remove` events. Occurs
  whenever a product is no longer scheduled to be published. Requires the
  `read_product_listings` scope.
  """
  SCHEDULED_PRODUCT_LISTINGS_REMOVE

  """
  The webhook topic for `product_publications/create` events. Occurs whenever a
  product publication for an active product is created, or whenever an existing
  product publication is published. Requires the `read_publications` scope.
  """
  PRODUCT_PUBLICATIONS_CREATE

  """
  The webhook topic for `product_publications/delete` events. Occurs whenever a
  product publication for an active product is removed, or whenever an existing
  product publication is unpublished. Requires the `read_publications` scope.
  """
  PRODUCT_PUBLICATIONS_DELETE

  """
  The webhook topic for `product_publications/update` events. Occurs whenever a
  product publication is updated. Requires the `read_publications` scope.
  """
  PRODUCT_PUBLICATIONS_UPDATE

  """
  The webhook topic for `products/create` events. Occurs whenever a product is created. Requires the `read_products` scope.
  """
  PRODUCTS_CREATE

  """
  The webhook topic for `products/delete` events. Occurs whenever a product is deleted. Requires the `read_products` scope.
  """
  PRODUCTS_DELETE

  """
  The webhook topic for `products/update` events. Occurs whenever a product is
  updated, or whenever a product is ordered, or whenever a variant is added,
  removed, or updated. Requires the `read_products` scope.
  """
  PRODUCTS_UPDATE

  """
  The webhook topic for `refunds/create` events. Occurs whenever a new refund is
  created without errors on an order, independent from the movement of money.
  Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_buyer_membership_orders.
  """
  REFUNDS_CREATE

  """
  The webhook topic for `segments/create` events. Occurs whenever a segment is created. Requires the `read_customers` scope.
  """
  SEGMENTS_CREATE

  """
  The webhook topic for `segments/delete` events. Occurs whenever a segment is deleted. Requires the `read_customers` scope.
  """
  SEGMENTS_DELETE

  """
  The webhook topic for `segments/update` events. Occurs whenever a segment is updated. Requires the `read_customers` scope.
  """
  SEGMENTS_UPDATE

  """
  The webhook topic for `shipping_addresses/create` events. Occurs whenever a
  shipping address is created. Requires the `read_shipping` scope.
  """
  SHIPPING_ADDRESSES_CREATE

  """
  The webhook topic for `shipping_addresses/update` events. Occurs whenever a
  shipping address is updated. Requires the `read_shipping` scope.
  """
  SHIPPING_ADDRESSES_UPDATE

  """
  The webhook topic for `shop/update` events. Occurs whenever a shop is updated.
  """
  SHOP_UPDATE

  """
  The webhook topic for `tax_services/create` events. Occurs whenever a tax
  service is created. Requires the `read_taxes` scope.
  """
  TAX_SERVICES_CREATE

  """
  The webhook topic for `tax_services/update` events. Occurs whenver a tax
  service is updated. Requires the `read_taxes` scope.
  """
  TAX_SERVICES_UPDATE

  """
  The webhook topic for `themes/create` events. Occurs whenever a theme is
  created. Does not occur when theme files are created. Requires the
  `read_themes` scope.
  """
  THEMES_CREATE

  """
  The webhook topic for `themes/delete` events. Occurs whenever a theme is
  deleted. Does not occur when theme files are deleted. Requires the
  `read_themes` scope.
  """
  THEMES_DELETE

  """
  The webhook topic for `themes/publish` events. Occurs whenever a theme with
  the main or mobile (deprecated) role is published. Requires the `read_themes` scope.
  """
  THEMES_PUBLISH

  """
  The webhook topic for `themes/update` events. Occurs whenever a theme is
  updated. Does not occur when theme files are updated. Requires the
  `read_themes` scope.
  """
  THEMES_UPDATE

  """
  The webhook topic for `variants/in_stock` events. Occurs whenever a variant
  becomes in stock. Requires the `read_products` scope.
  """
  VARIANTS_IN_STOCK

  """
  The webhook topic for `variants/out_of_stock` events. Occurs whenever a
  variant becomes out of stock. Requires the `read_products` scope.
  """
  VARIANTS_OUT_OF_STOCK

  """
  The webhook topic for `inventory_levels/connect` events. Occurs whenever an
  inventory level is connected. Requires the `read_inventory` scope.
  """
  INVENTORY_LEVELS_CONNECT

  """
  The webhook topic for `inventory_levels/update` events. Occurs whenever an
  inventory level is updated. Requires the `read_inventory` scope.
  """
  INVENTORY_LEVELS_UPDATE

  """
  The webhook topic for `inventory_levels/disconnect` events. Occurs whenever an
  inventory level is disconnected. Requires the `read_inventory` scope.
  """
  INVENTORY_LEVELS_DISCONNECT

  """
  The webhook topic for `inventory_items/create` events. Occurs whenever an
  inventory item is created. Requires the `read_inventory` scope.
  """
  INVENTORY_ITEMS_CREATE

  """
  The webhook topic for `inventory_items/update` events. Occurs whenever an
  inventory item is updated. Requires the `read_inventory` scope.
  """
  INVENTORY_ITEMS_UPDATE

  """
  The webhook topic for `inventory_items/delete` events. Occurs whenever an
  inventory item is deleted. Requires the `read_inventory` scope.
  """
  INVENTORY_ITEMS_DELETE

  """
  The webhook topic for `locations/activate` events. Occurs whenever a
  deactivated location is re-activated. Requires the `read_locations` scope.
  """
  LOCATIONS_ACTIVATE

  """
  The webhook topic for `locations/deactivate` events. Occurs whenever a
  location is deactivated. Requires the `read_locations` scope.
  """
  LOCATIONS_DEACTIVATE

  """
  The webhook topic for `locations/create` events. Occurs whenever a location is
  created. Requires the `read_locations` scope.
  """
  LOCATIONS_CREATE

  """
  The webhook topic for `locations/update` events. Occurs whenever a location is
  updated. Requires the `read_locations` scope.
  """
  LOCATIONS_UPDATE

  """
  The webhook topic for `locations/delete` events. Occurs whenever a location is
  deleted. Requires the `read_locations` scope.
  """
  LOCATIONS_DELETE

  """
  The webhook topic for `tender_transactions/create` events. Occurs when a
  tender transaction is created. Requires the `read_orders` scope.
  """
  TENDER_TRANSACTIONS_CREATE

  """
  The webhook topic for `app_purchases_one_time/update` events. Occurs whenever a one-time app charge is updated.
  """
  APP_PURCHASES_ONE_TIME_UPDATE

  """
  The webhook topic for `app_subscriptions/approaching_capped_amount` events.
  Occurs when the balance used on an app subscription crosses 90% of the capped amount.
  """
  APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT

  """
  The webhook topic for `app_subscriptions/update` events. Occurs whenever an app subscription is updated.
  """
  APP_SUBSCRIPTIONS_UPDATE

  """
  The webhook topic for `locales/create` events. Occurs whenever a shop locale is created Requires the `read_locales` scope.
  """
  LOCALES_CREATE

  """
  The webhook topic for `locales/update` events. Occurs whenever a shop locale
  is updated, such as published or unpublished Requires the `read_locales` scope.
  """
  LOCALES_UPDATE

  """
  The webhook topic for `domains/create` events. Occurs whenever a domain is created.
  """
  DOMAINS_CREATE

  """
  The webhook topic for `domains/update` events. Occurs whenever a domain is updated.
  """
  DOMAINS_UPDATE

  """
  The webhook topic for `domains/destroy` events. Occurs whenever a domain is destroyed.
  """
  DOMAINS_DESTROY

  """
  The webhook topic for `subscription_contracts/create` events. Occurs whenever
  a subscription contract is created. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_CONTRACTS_CREATE

  """
  The webhook topic for `subscription_contracts/update` events. Occurs whenever
  a subscription contract is updated. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_CONTRACTS_UPDATE

  """
  The webhook topic for `subscription_billing_cycle_edits/create` events. Occurs
  whenever a subscription contract billing cycle is edited. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_CYCLE_EDITS_CREATE

  """
  The webhook topic for `subscription_billing_cycle_edits/update` events. Occurs
  whenever a subscription contract billing cycle edit is updated. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_CYCLE_EDITS_UPDATE

  """
  The webhook topic for `subscription_billing_cycle_edits/delete` events. Occurs
  whenever a subscription contract billing cycle edit is deleted. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_CYCLE_EDITS_DELETE

  """
  The webhook topic for `profiles/create` events. Occurs whenever a delivery
  profile is created Requires at least one of the following scopes:
  read_shipping, read_assigned_shipping.
  """
  PROFILES_CREATE

  """
  The webhook topic for `profiles/update` events. Occurs whenever a delivery
  profile is updated Requires at least one of the following scopes:
  read_shipping, read_assigned_shipping.
  """
  PROFILES_UPDATE

  """
  The webhook topic for `profiles/delete` events. Occurs whenever a delivery
  profile is deleted Requires at least one of the following scopes:
  read_shipping, read_assigned_shipping.
  """
  PROFILES_DELETE

  """
  The webhook topic for `subscription_billing_attempts/success` events. Occurs
  whenever a subscription billing attempt succeeds. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS

  """
  The webhook topic for `subscription_billing_attempts/failure` events. Occurs
  whenever a subscription billing attempt fails. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE

  """
  The webhook topic for `subscription_billing_attempts/challenged` events.
  Occurs when the financial instutition challenges the subscripttion billing
  attempt charge as per 3D Secure. Requires the
  `read_own_subscription_contracts` scope.
  """
  SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED

  """
  The webhook topic for `returns/cancel` events. Occurs whenever a return is
  canceled. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_CANCEL

  """
  The webhook topic for `returns/close` events. Occurs whenever a return is
  closed. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_CLOSE

  """
  The webhook topic for `returns/reopen` events. Occurs whenever a closed return
  is reopened. Requires at least one of the following scopes: read_orders,
  read_marketplace_orders, read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_REOPEN

  """
  The webhook topic for `returns/request` events. Occurs whenever a return is
  requested. This means `Return.status` is `REQUESTED`. Requires at least one of
  the following scopes: read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_REQUEST

  """
  The webhook topic for `returns/approve` events. Occurs whenever a return is
  approved. This means `Return.status` is `OPEN`. Requires at least one of the
  following scopes: read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_APPROVE

  """
  The webhook topic for `returns/decline` events. Occurs whenever a return is
  declined. This means `Return.status` is `DECLINED`. Requires at least one of
  the following scopes: read_returns, read_marketplace_returns,
  read_buyer_membership_orders.
  """
  RETURNS_DECLINE

  """
  The webhook topic for `reverse_deliveries/attach_deliverable` events. Occurs
  whenever a deliverable is attached to a reverse delivery.
  This occurs when a reverse delivery is created or updated with delivery metadata.
  Metadata includes the delivery method, label, and tracking information associated with a reverse delivery.
   Requires at least one of the following scopes: read_returns, read_marketplace_returns.
  """
  REVERSE_DELIVERIES_ATTACH_DELIVERABLE

  """
  The webhook topic for `reverse_fulfillment_orders/dispose` events. Occurs
  whenever a disposition is made on a reverse fulfillment order.
  This includes dispositions made on reverse deliveries that are associated with the reverse fulfillment order.
   Requires at least one of the following scopes: read_returns, read_marketplace_returns.
  """
  REVERSE_FULFILLMENT_ORDERS_DISPOSE

  """
  The webhook topic for `payment_terms/create` events. Occurs whenever payment
  terms are created. Requires the `read_payment_terms` scope.
  """
  PAYMENT_TERMS_CREATE

  """
  The webhook topic for `payment_terms/delete` events. Occurs whenever payment
  terms are deleted. Requires the `read_payment_terms` scope.
  """
  PAYMENT_TERMS_DELETE

  """
  The webhook topic for `payment_terms/update` events. Occurs whenever payment
  terms are updated. Requires the `read_payment_terms` scope.
  """
  PAYMENT_TERMS_UPDATE

  """
  The webhook topic for `payment_schedules/due` events. Occurs whenever payment
  schedules are due. Requires the `read_payment_terms` scope.
  """
  PAYMENT_SCHEDULES_DUE

  """
  The webhook topic for `selling_plan_groups/create` events. Notifies when a
  SellingPlanGroup is created. Requires the `read_products` scope.
  """
  SELLING_PLAN_GROUPS_CREATE

  """
  The webhook topic for `selling_plan_groups/update` events. Notifies when a
  SellingPlanGroup is updated. Requires the `read_products` scope.
  """
  SELLING_PLAN_GROUPS_UPDATE

  """
  The webhook topic for `selling_plan_groups/delete` events. Notifies when a
  SellingPlanGroup is deleted. Requires the `read_products` scope.
  """
  SELLING_PLAN_GROUPS_DELETE

  """
  The webhook topic for `bulk_operations/finish` events. Notifies when a Bulk Operation finishes.
  """
  BULK_OPERATIONS_FINISH

  """
  The webhook topic for `markets/create` events. Occurs when a new market is created. Requires the `read_markets` scope.
  """
  MARKETS_CREATE

  """
  The webhook topic for `markets/update` events. Occurs when a market is updated. Requires the `read_markets` scope.
  """
  MARKETS_UPDATE

  """
  The webhook topic for `markets/delete` events. Occurs when a market is deleted. Requires the `read_markets` scope.
  """
  MARKETS_DELETE

  """
  The webhook topic for `fulfillment_orders/rescheduled` events. Triggers when a
  fulfillment order is rescheduled Requires at least one of the following
  scopes: read_merchant_managed_fulfillment_orders,
  read_assigned_fulfillment_orders, read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_RESCHEDULED

  """
  The webhook topic for `audit_events/admin_api_activity` events. Triggers for
  each auditable Admin API request. This topic is limited to one active
  subscription per Plus store and requires the use of Google Cloud Pub/Sub or
  AWS EventBridge. Requires the `read_audit_events` scope.
  """
  AUDIT_EVENTS_ADMIN_API_ACTIVITY

  """
  The webhook topic for `fulfillment_orders/line_items_prepared_for_pickup`
  events. Triggers when one or more of the line items for a fulfillment order
  are prepared for pickup Requires at least one of the following scopes:
  read_merchant_managed_fulfillment_orders, read_assigned_fulfillment_orders,
  read_third_party_fulfillment_orders.
  """
  FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP
}

"""Return type for `webhookSubscriptionUpdate` mutation."""
type WebhookSubscriptionUpdatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [UserError!]!

  """The webhook subscription that was updated."""
  webhookSubscription: WebhookSubscription
}

"""A web pixel settings."""
type WebPixel implements Node {
  """A globally-unique ID."""
  id: ID!

  """The settings JSON object for the web pixel."""
  settings: JSON!
}

"""Return type for `webPixelCreate` mutation."""
type WebPixelCreatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [ErrorsWebPixelUserError!]!

  """The created web pixel settings."""
  webPixel: WebPixel
}

"""Return type for `webPixelDelete` mutation."""
type WebPixelDeletePayload {
  """The ID of the web pixel settings that was deleted."""
  deletedWebPixelId: ID

  """The list of errors that occurred from executing the mutation."""
  userErrors: [ErrorsWebPixelUserError!]!
}

"""The input fields to use to update a web pixel."""
input WebPixelInput {
  """The web pixel settings in JSON format."""
  settings: JSON!
}

"""Return type for `webPixelUpdate` mutation."""
type WebPixelUpdatePayload {
  """The list of errors that occurred from executing the mutation."""
  userErrors: [ErrorsWebPixelUserError!]!

  """The updated web pixel settings."""
  webPixel: WebPixel
}

"""A weight, which includes a numeric value and a unit of measurement."""
type Weight {
  """The unit of measurement for `value`."""
  unit: WeightUnit!

  """The weight value using the unit system specified with `unit`."""
  value: Float!
}

"""The input fields for the weight unit and value inputs."""
input WeightInput {
  """The weight value using the unit system specified with `weight_unit`."""
  value: Float!

  """Unit of measurement for `value`."""
  unit: WeightUnit!
}

"""Units of measurement for weight."""
enum WeightUnit {
  """1 kilogram equals 1000 grams."""
  KILOGRAMS

  """Metric system unit of mass."""
  GRAMS

  """1 pound equals 16 ounces."""
  POUNDS

  """Imperial system unit of mass."""
  OUNCES
}
