@vtex/faststore 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/actions.json +42 -0
  3. package/dist/catalog.json +731 -16
  4. package/dist/cli/index.js +1 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/components.d.ts +9 -4
  7. package/dist/components.js +11 -6
  8. package/dist/content-types.json +300 -0
  9. package/dist/core/dist/define-component.d.ts +6 -1
  10. package/dist/docs/account-entry-point.md +4 -4
  11. package/dist/docs/account-menu.md +2 -2
  12. package/dist/docs/account-saved-cards.md +301 -0
  13. package/dist/docs/binding-switcher.md +154 -0
  14. package/dist/docs/card-entry.md +3 -3
  15. package/dist/docs/card-summary.md +175 -0
  16. package/dist/docs/cart-destination.md +238 -0
  17. package/dist/docs/cart-item.md +21 -3
  18. package/dist/docs/cart-totalizer.md +1 -1
  19. package/dist/docs/cart.md +118 -11
  20. package/dist/docs/footer-social.md +1 -1
  21. package/dist/docs/free-shipping-progress.md +13 -9
  22. package/dist/docs/incentives.md +2 -2
  23. package/dist/docs/logo.md +1 -1
  24. package/dist/docs/payment-method-badges.md +2 -2
  25. package/dist/docs/payment-methods.md +1 -1
  26. package/dist/docs/product-information.md +2 -2
  27. package/dist/docs/product-shelf.md +7 -0
  28. package/dist/docs/select.md +3 -4
  29. package/dist/docs/sign-in-redirect.md +1 -1
  30. package/dist/docs/toast.md +30 -12
  31. package/dist/index.d.ts +2 -1
  32. package/dist/internal/client.d.ts +4 -1
  33. package/dist/internal/client.js +4 -1
  34. package/dist/internal/server.d.ts +4 -2
  35. package/dist/internal/server.js +4 -2
  36. package/dist/matter/account-saved-cards/account-saved-cards.d.ts +383 -0
  37. package/dist/matter/account-saved-cards/account-saved-cards.js +956 -0
  38. package/dist/matter/account-saved-cards/account-saved-cards.js.map +1 -0
  39. package/dist/matter/billing-address/billing-address.js.map +1 -1
  40. package/dist/matter/cart/cart-namespace.d.ts +5 -1
  41. package/dist/matter/cart/cart-namespace.js +5 -1
  42. package/dist/matter/cart/cart-namespace.js.map +1 -1
  43. package/dist/matter/cart/cart.d.ts +34 -4
  44. package/dist/matter/cart/cart.js +238 -28
  45. package/dist/matter/cart/cart.js.map +1 -1
  46. package/dist/matter/cart-destination/cart-destination.d.ts +222 -0
  47. package/dist/matter/cart-destination/cart-destination.js +613 -0
  48. package/dist/matter/cart-destination/cart-destination.js.map +1 -0
  49. package/dist/matter/cart-item/cart-item.d.ts +4 -2
  50. package/dist/matter/cart-item/cart-item.js +75 -16
  51. package/dist/matter/cart-item/cart-item.js.map +1 -1
  52. package/dist/matter/cart-totalizer/cart-totalizer.js +3 -2
  53. package/dist/matter/cart-totalizer/cart-totalizer.js.map +1 -1
  54. package/dist/matter/free-shipping-progress/free-shipping-progress.d.ts +6 -3
  55. package/dist/matter/free-shipping-progress/free-shipping-progress.js +76 -33
  56. package/dist/matter/free-shipping-progress/free-shipping-progress.js.map +1 -1
  57. package/dist/matter/pricing/pricing.js.map +1 -1
  58. package/dist/matter/product-shelf/product-shelf.d.ts +7 -0
  59. package/dist/matter/product-shelf/product-shelf.js +115 -1
  60. package/dist/matter/product-shelf/product-shelf.js.map +1 -1
  61. package/dist/matter/shipping-address/shipping-address.js.map +1 -1
  62. package/dist/matter/shipping-simulator/shipping-simulator.d.ts +1 -1
  63. package/dist/matter/shipping-simulator/shipping-simulator.js +6 -2
  64. package/dist/matter/shipping-simulator/shipping-simulator.js.map +1 -1
  65. package/dist/particles/binding-switcher/binding-switcher.d.ts +38 -0
  66. package/dist/particles/binding-switcher/binding-switcher.js +183 -0
  67. package/dist/particles/binding-switcher/binding-switcher.js.map +1 -0
  68. package/dist/particles/card-summary/card-network.d.ts +17 -0
  69. package/dist/particles/card-summary/card-network.js +25 -0
  70. package/dist/particles/card-summary/card-network.js.map +1 -0
  71. package/dist/particles/card-summary/card-summary.d.ts +83 -0
  72. package/dist/particles/card-summary/card-summary.js +188 -0
  73. package/dist/particles/card-summary/card-summary.js.map +1 -0
  74. package/dist/particles/footer-social/footer-social.d.ts +1 -1
  75. package/dist/particles/footer-social/footer-social.js +1 -1
  76. package/dist/particles/footer-social/footer-social.js.map +1 -1
  77. package/dist/particles/incentives/incentives.d.ts +1 -1
  78. package/dist/particles/incentives/incentives.js +1 -1
  79. package/dist/particles/incentives/incentives.js.map +1 -1
  80. package/dist/particles/payment-methods/payment-methods.d.ts +1 -1
  81. package/dist/particles/payment-methods/payment-methods.js +1 -1
  82. package/dist/particles/payment-methods/payment-methods.js.map +1 -1
  83. package/dist/particles/toast/toast.d.ts +20 -6
  84. package/dist/particles/toast/toast.js +49 -7
  85. package/dist/particles/toast/toast.js.map +1 -1
  86. package/dist/schema.graphql +298 -34
  87. package/dist/sdk/actions/index.d.ts +3 -1
  88. package/dist/sdk/actions/index.js +3 -1
  89. package/dist/sdk/actions/locale-action-provider.d.ts +16 -0
  90. package/dist/sdk/actions/locale-action-provider.js +20 -0
  91. package/dist/sdk/actions/locale-action-provider.js.map +1 -0
  92. package/dist/sdk/actions/saved-card-action-provider.d.ts +12 -0
  93. package/dist/sdk/actions/saved-card-action-provider.js +16 -0
  94. package/dist/sdk/actions/saved-card-action-provider.js.map +1 -0
  95. package/dist/sdk/actions/types.d.ts +6 -2
  96. package/dist/sdk/cache/storefront-cache.js +2 -1
  97. package/dist/sdk/cache/storefront-cache.js.map +1 -1
  98. package/dist/sdk/cart/operations.d.ts +2 -1
  99. package/dist/sdk/cart/operations.js +55 -1
  100. package/dist/sdk/cart/operations.js.map +1 -1
  101. package/dist/sdk/cart/optimistic.d.ts +30 -7
  102. package/dist/sdk/cart/optimistic.js +78 -41
  103. package/dist/sdk/cart/optimistic.js.map +1 -1
  104. package/dist/sdk/cart/use-cart-actions.d.ts +7 -0
  105. package/dist/sdk/cart/use-cart-actions.js +61 -15
  106. package/dist/sdk/cart/use-cart-actions.js.map +1 -1
  107. package/dist/sdk/cart/use-cart-sync-sales-channel.js +70 -0
  108. package/dist/sdk/cart/use-cart-sync-sales-channel.js.map +1 -0
  109. package/dist/sdk/generated/gql.js +15 -11
  110. package/dist/sdk/generated/gql.js.map +1 -1
  111. package/dist/sdk/generated/graphql.d.ts +177 -46
  112. package/dist/sdk/generated/graphql.js +2314 -93
  113. package/dist/sdk/generated/graphql.js.map +1 -1
  114. package/dist/sdk/i18n/messages/en-US.js +19 -0
  115. package/dist/sdk/i18n/messages/en-US.json +19 -0
  116. package/dist/sdk/i18n/messages/en-US.json.d.ts +19 -0
  117. package/dist/sdk/i18n/messages/es-ES.js +19 -0
  118. package/dist/sdk/i18n/messages/es-ES.json +19 -0
  119. package/dist/sdk/i18n/messages/pt-BR.js +19 -0
  120. package/dist/sdk/i18n/messages/pt-BR.json +19 -0
  121. package/dist/sdk/i18n/provider.js +1 -1
  122. package/dist/sdk/i18n/provider.js.map +1 -1
  123. package/dist/sdk/locale/binding-switch-provider.d.ts +13 -0
  124. package/dist/sdk/locale/binding-switch-provider.js +20 -0
  125. package/dist/sdk/locale/binding-switch-provider.js.map +1 -0
  126. package/dist/sdk/locale/use-locale-actions.d.ts +16 -0
  127. package/dist/sdk/locale/use-locale-actions.js +70 -0
  128. package/dist/sdk/locale/use-locale-actions.js.map +1 -0
  129. package/dist/sdk/navigation/binding-switch.d.ts +39 -0
  130. package/dist/sdk/navigation/binding-switch.js +129 -0
  131. package/dist/sdk/navigation/binding-switch.js.map +1 -0
  132. package/dist/sdk/navigation/decode-route-params.d.ts +11 -0
  133. package/dist/sdk/navigation/decode-route-params.js +32 -0
  134. package/dist/sdk/navigation/decode-route-params.js.map +1 -0
  135. package/dist/sdk/saved-cards/operations.d.ts +16 -0
  136. package/dist/sdk/saved-cards/operations.js +41 -0
  137. package/dist/sdk/saved-cards/operations.js.map +1 -0
  138. package/dist/sdk/saved-cards/use-saved-card-actions.d.ts +26 -0
  139. package/dist/sdk/saved-cards/use-saved-card-actions.js +86 -0
  140. package/dist/sdk/saved-cards/use-saved-card-actions.js.map +1 -0
  141. package/dist/sdk/seo/page-alternates.d.ts +5 -3
  142. package/dist/sdk/seo/page-alternates.js +7 -12
  143. package/dist/sdk/seo/page-alternates.js.map +1 -1
  144. package/dist/sdk/shipping/shipping-operations.d.ts +1 -1
  145. package/dist/sdk/shipping/shipping-operations.js +13 -0
  146. package/dist/sdk/shipping/shipping-operations.js.map +1 -1
  147. package/dist/sdk/state/cart.d.ts +9 -2
  148. package/dist/sdk/state/cart.js +9 -2
  149. package/dist/sdk/state/cart.js.map +1 -1
  150. package/package.json +2 -2
  151. package/src/styles/tailwind.css +1 -2
package/dist/cli/index.js CHANGED
@@ -18302,7 +18302,7 @@ function writeComposedArtifacts(extensionRoot, composed, verb, log) {
18302
18302
  }
18303
18303
  //#endregion
18304
18304
  //#region ../../apps/storefront-api-core/schema/core.federation.graphql
18305
- var core_federation_default = "# GENERATED by src/schema/emit.ts (pnpm run schema:emit) — do not edit by hand.\n# core version: 0.0.1\nschema\n @link(url: \"https://specs.apollo.dev/link/v1.0\")\n{\n query: Query\n mutation: Mutation\n}\n\nextend schema\n @link(url: \"https://specs.apollo.dev/federation/v2.9\", import: [\"@key\"])\n\n\"\"\"\nRecords the planned removal date of a deprecated schema element. Pairs with the\nstandard built-in `@deprecated(reason)`: `@deprecated` carries the client-facing\nreason, `@deprecationDate` carries only the machine-readable deletion date. The\nreason is not duplicated here — that would drift from the built-in.\n\nThis replaces the previous redefinition of the built-in `@deprecated` (which\nadded a `deletionDate` argument). Redefining a built-in makes Federation\ncomposition (`wgc compose`) fail, so the deletion date moved to this custom\ndirective. As a non-built-in directive it is dropped during composition rather\nthan rejected. See ADR-00011 and CONTEXT.md. The `@deprecated`/`@deprecationDate`\npairing (both directions) and the future-date rule are enforced by a contract\ntest, not a lint rule.\n\"\"\"\ndirective @deprecationDate(\n \"\"\"\n Target removal date in ISO-8601 (YYYY-MM-DD) format. Must be in the future.\n \"\"\"\n deletionDate: String!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\n\n\"\"\"\nDeclares an HTTP cache policy for a type, field, or interface. Apollo Server\naggregates every hint resolved by a query and emits a single `Cache-Control`\nheader whose `max-age` is the minimum across hints and whose scope is the most\nrestrictive (PRIVATE wins over PUBLIC). Mutations and error responses ignore\nthese hints and always carry `Cache-Control: no-store`.\n\"\"\"\ndirective @cacheControl(\n \"\"\"Longest time (in seconds) this data may live in a cache.\"\"\"\n maxAge: Int\n\n \"\"\"\n Whether shared caches (CDN, proxy) may store the response. Defaults to\n PUBLIC when another field or type sets a scope and nothing overrides it.\n \"\"\"\n scope: CacheControlScope\n\n \"\"\"\n When true, this field inherits its `maxAge` from the parent field rather\n than contributing its own hint. Useful for wrapper/connection types.\n \"\"\"\n inheritMaxAge: Boolean\n) on OBJECT | FIELD_DEFINITION | INTERFACE\n\ndirective @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA\n\ndirective @key(fields: federation__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT | INTERFACE\n\ndirective @federation__requires(fields: federation__FieldSet!) on FIELD_DEFINITION\n\ndirective @federation__provides(fields: federation__FieldSet!) on FIELD_DEFINITION\n\ndirective @federation__external(reason: String) on OBJECT | FIELD_DEFINITION\n\ndirective @federation__tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION | SCHEMA\n\ndirective @federation__extends on OBJECT | INTERFACE\n\ndirective @federation__shareable repeatable on OBJECT | FIELD_DEFINITION\n\ndirective @federation__inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION\n\ndirective @federation__override(from: String!, label: String) on FIELD_DEFINITION\n\ndirective @federation__composeDirective(name: String) repeatable on SCHEMA\n\ndirective @federation__interfaceObject on OBJECT\n\ndirective @federation__authenticated on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__requiresScopes(scopes: [[federation__Scope!]!]!) on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__policy(policies: [[federation__Policy!]!]!) on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__context(name: String!) repeatable on INTERFACE | OBJECT | UNION\n\ndirective @federation__fromContext(field: federation__ContextFieldValue) on ARGUMENT_DEFINITION\n\ndirective @federation__cost(weight: Int!) on ARGUMENT_DEFINITION | ENUM | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | OBJECT | SCALAR\n\ndirective @federation__listSize(assumedSize: Int, slicingArguments: [String!], sizedFields: [String!], requireOneSlicingArgument: Boolean = true) on FIELD_DEFINITION\n\n\"\"\"Visibility scope for an HTTP cache entry.\"\"\"\nenum CacheControlScope {\n \"\"\"\n The response may be stored by shared caches (CDN, proxy) and reused\n across users.\n \"\"\"\n PUBLIC\n\n \"\"\"\n The response may only be stored by single-user caches (browser, service\n worker). Shared caches must not store it.\n \"\"\"\n PRIVATE\n}\n\n\"\"\"\nAn [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) encoded UTC datetime.\n\"\"\"\nscalar DateTime\n\n\"\"\"\nAn [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) encoded URI.\n\"\"\"\nscalar URI\n\n\"\"\"A string containing raw HTML markup.\"\"\"\nscalar HTML\n\n\"\"\"\nAn ISO 4217 currency amount represented as a decimal string (e.g. \"29.99\").\n\"\"\"\nscalar Decimal\n\n\"\"\"\nA [BCP 47](https://tools.ietf.org/html/bcp47) language tag (e.g. \"en-US\").\n\"\"\"\nscalar Locale\n\n\"\"\"An opaque cursor used for Relay-style pagination.\"\"\"\nscalar Cursor\n\n\"\"\"\nThe Relay `Node` interface. Every entity in the graph implements this so\nthe client can refetch any object with a single `node(id: ID!)` query.\n\"\"\"\ninterface Node {\n \"\"\"Globally unique identifier. Base64 of `entityType:rawId`.\"\"\"\n id: ID!\n}\n\n\"\"\"Metadata about the current page in a Relay connection.\"\"\"\ntype PageInfo {\n \"\"\"Whether more pages exist after the current page.\"\"\"\n hasNextPage: Boolean!\n\n \"\"\"Whether more pages exist before the current page.\"\"\"\n hasPreviousPage: Boolean!\n\n \"\"\"Cursor of the first edge in the current page.\"\"\"\n startCursor: Cursor\n\n \"\"\"Cursor of the last edge in the current page.\"\"\"\n endCursor: Cursor\n}\n\n\"\"\"Sort direction for orderBy arguments.\"\"\"\nenum SortDirection {\n \"\"\"Ascending order.\"\"\"\n ASC\n\n \"\"\"Descending order.\"\"\"\n DESC\n}\n\n\"\"\"Represents a monetary amount with its currency.\"\"\"\ntype Money {\n \"\"\"Decimal amount (e.g. \"49.99\").\"\"\"\n amount: Decimal!\n\n \"\"\"ISO 4217 currency code (e.g. \"USD\", \"BRL\").\"\"\"\n currencyCode: CurrencyCode!\n}\n\n\"\"\"A price range, useful for showing \"from – to\" on product cards.\"\"\"\ntype PriceRange {\n \"\"\"Lowest price across all variants.\"\"\"\n min: Money!\n\n \"\"\"Highest price across all variants.\"\"\"\n max: Money!\n}\n\n\"\"\"ISO 4217 currency codes. Extend as needed.\"\"\"\nenum CurrencyCode {\n \"\"\"United States Dollar.\"\"\"\n USD\n\n \"\"\"Euro.\"\"\"\n EUR\n\n \"\"\"British Pound Sterling.\"\"\"\n GBP\n\n \"\"\"Brazilian Real.\"\"\"\n BRL\n\n \"\"\"Argentine Peso.\"\"\"\n ARS\n\n \"\"\"Chilean Peso.\"\"\"\n CLP\n\n \"\"\"Colombian Peso.\"\"\"\n COP\n\n \"\"\"Mexican Peso.\"\"\"\n MXN\n\n \"\"\"Peruvian Sol.\"\"\"\n PEN\n\n \"\"\"Japanese Yen.\"\"\"\n JPY\n}\n\n\"\"\"An image resource associated with a product variant or other entity.\"\"\"\ntype Image {\n \"\"\"Source URL of the image.\"\"\"\n url: URI!\n\n \"\"\"Alt text for accessibility.\"\"\"\n altText: String\n}\n\n\"\"\"A video resource associated with a product.\"\"\"\ntype Video {\n \"\"\"Playback URL.\"\"\"\n url: URI!\n\n \"\"\"Alt text for accessibility.\"\"\"\n altText: String\n\n \"\"\"Preview / poster image.\"\"\"\n previewImage: Image\n}\n\n\"\"\"Any media attached to a product — image or video.\"\"\"\nunion Media = Image | Video\n\n\"\"\"Search engine optimization metadata for any displayable entity.\"\"\"\ntype SEO {\n \"\"\"Page title (`<title>` tag).\"\"\"\n title: String\n\n \"\"\"Meta description.\"\"\"\n description: String\n}\n\n\"\"\"Root query type for the storefront API.\"\"\"\ntype Query {\n \"\"\"\n Fetch any entity by its global ID.\n Clients use this for refetching or cache normalization.\n \"\"\"\n node(\n \"\"\"The globally unique ID.\"\"\"\n id: ID!\n ): Node\n\n \"\"\"Fetch multiple entities by their global IDs.\"\"\"\n nodes(\n \"\"\"A list of globally unique IDs.\"\"\"\n ids: [ID!]!\n ): [Node]!\n _entities(representations: [_Any!]!): [_Entity]!\n _service: _Service!\n}\n\nextend type Query {\n \"\"\"Look up a single product by global ID.\"\"\"\n product(\n \"\"\"Global product ID.\"\"\"\n id: ID!\n ): Product\n\n \"\"\"Look up a single product by its URL slug.\"\"\"\n productBySlug(\n \"\"\"URL-friendly handle (e.g. \\\"nike-zoom-janoski-red\\\").\"\"\"\n slug: String!\n ): Product\n\n \"\"\"Paginated, filterable list of products.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n\n \"\"\"\n Full-text product search with facets and filters.\n Returns the same connection shape but is backed by the search engine\n rather than the catalog database.\n \"\"\"\n productSearch(\n \"\"\"Search query string.\"\"\"\n query: String!\n\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductSearchResult!\n\n \"\"\"\n Product recommendations based on a seed product (frequently bought\n together, similar items, etc.).\n \"\"\"\n productRecommendations(\n \"\"\"URL slug of the product to base recommendations on.\"\"\"\n slug: String!\n\n \"\"\"The recommendation strategy to use.\"\"\"\n intent: RecommendationIntent\n\n \"\"\"Maximum number of recommendations.\"\"\"\n first: Int = 10\n ): [Product!]!\n\n \"\"\"\n Resolves a catalog route by ID or by path and returns its confirmed localized equivalents.\n Null when the route does not exist or the catalog could not be reached.\n \"\"\"\n catalogRoute(\n \"\"\"The route to resolve, by ID or by path.\"\"\"\n input: CatalogRouteInput!\n ): CatalogRoute\n\n \"\"\"Look up a single category by global ID.\"\"\"\n category(\n \"\"\"Global category ID.\"\"\"\n id: ID!\n ): Category\n\n \"\"\"Look up a category by its URL slug.\"\"\"\n categoryBySlug(\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n ): Category\n\n \"\"\"\n The full category tree starting from root departments.\n Accepts a `maxDepth` to limit tree traversal (default: all levels).\n \"\"\"\n categoryTree(\n \"\"\"Maximum depth of the tree to return. Maps to VTEX `categoryLevels`.\"\"\"\n maxDepth: Int\n ): [Category!]!\n\n \"\"\"Paginated flat list of categories.\"\"\"\n categories(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: CategorySortingInput\n ): CategoriesConnection!\n\n \"\"\"Look up a single brand by global ID.\"\"\"\n brand(\n \"\"\"Global brand ID.\"\"\"\n id: ID!\n ): Brand\n\n \"\"\"\n All brands available in the store, derived from the search index.\n Returns brands with their product counts.\n \"\"\"\n brands(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): BrandsConnection!\n\n \"\"\"Look up a single sales channel by global ID.\"\"\"\n salesChannel(\n \"\"\"Global sales channel ID.\"\"\"\n id: ID!\n ): SalesChannel\n\n \"\"\"\n Autocomplete suggestions for a partial search query.\n Returns suggested terms with estimated result counts and facet attributes.\n \"\"\"\n autocompleteSuggestions(\n \"\"\"Partial search query (e.g. \\\"choc\\\").\"\"\"\n query: String!\n ): [AutocompleteSuggestion!]!\n\n \"\"\"The most popular search terms in the last 14 days.\"\"\"\n topSearches: [TrendingSearch!]!\n\n \"\"\"\n Spelling correction for a potentially misspelled search query.\n Returns null if no correction is available.\n \"\"\"\n searchCorrection(\n \"\"\"The potentially misspelled query.\"\"\"\n query: String!\n ): SearchCorrection\n}\n\nextend type Query {\n \"\"\"\n Resolve the active cart from the request context (x-order-form-id header,\n then cookie). When no cart context is present, a new cart is created and\n the x-order-form-id cookie is set on the response.\n \"\"\"\n cart: Cart!\n}\n\nextend type Query {\n \"\"\"\n Simulate available shipping options for a variant on a product detail page.\n Returns delivery options with estimated times and prices for the given\n postal code and item.\n \"\"\"\n shippingSimulation(\n \"\"\"Simulation input: destination, SKU, quantity, and seller.\"\"\"\n input: ShippingSimulateInput!\n ): ShippingSimulationPayload!\n\n \"\"\"\n Simulate shipping options for the entire active cart. Reads the cart from the\n x-order-form-id context and simulates all of its items against the\n destination, returning the options common to every item with prices summed\n across items. Never mints a cart: absent context returns a MISSING_CART_CONTEXT\n userError.\n \"\"\"\n cartShippingSimulation(\n \"\"\"Simulation input: destination only. Items come from the active cart.\"\"\"\n input: CartShippingSimulateInput!\n ): CartShippingSimulationPayload!\n}\n\nextend type Query {\n \"\"\"\n The shopper's profile for the active cart, resolved from the same order form\n as `cart`. The entity always resolves; its fields are null when unset.\n \"\"\"\n clientProfile: ClientProfile!\n\n \"\"\"\n The shopper's preferences for the active cart, resolved from the same order\n form as `cart`. The entity always resolves; its fields are null when unset.\n \"\"\"\n clientPreferences: ClientPreferences!\n}\n\nextend type Query {\n \"\"\"\n The cart's shipping state. Projected from the same order form as Query.cart.\n \"\"\"\n shipping: Shipping!\n\n \"\"\"\n Resolve the shopper's session state from the active order form (x-order-form-id\n header, then cookie). Projects from the same order form fetch as `cart`.\n \"\"\"\n session: Session!\n}\n\nextend type Query {\n \"\"\"\n The cart's payment state: methods, selection, installment options, and saved cards. Projected from the same order form as Query.cart. Always resolves; lists are empty and selection fields are null when payment is unset.\n \"\"\"\n payment: Payment!\n}\n\nextend type Query {\n \"\"\"\n A settled order's payment recap, keyed on the order group\n paymentStartTransaction / paymentGatewayCallback return. Null when the\n order group does not resolve to a settled order — never a fabricated empty\n projection (contrast Query.payment, which always resolves).\n \"\"\"\n order(\n \"\"\"\n The order group returned by paymentStartTransaction / paymentGatewayCallback.\n \"\"\"\n orderGroup: String!\n ): Order\n}\n\nextend type Query {\n \"\"\"\n The fields a postal code resolves to. Needs no cart and no shopper. Null when\n the platform does not know the code. A lookup that could not run is an error,\n never null. A malformed argument is a BAD_USER_INPUT error and reaches no\n upstream.\n \"\"\"\n addressByPostalCode(\n \"\"\"\n ISO 3166-1 alpha-3 code, such as `BRA`. Case and surrounding spaces are\n ignored.\n \"\"\"\n country: String!\n\n \"\"\"\n The postal code, masked or not: letters, digits, spaces, and hyphens, up to\n 20 characters.\n \"\"\"\n postalCode: String!\n ): PostalCodeAddress\n}\n\nextend type Query {\n \"\"\"Which authentication methods this account enables.\"\"\"\n sessionAuthProviders: SessionAuthProviders!\n}\n\nextend type Query {\n \"\"\"\n The shopper's active region, or null when none has been set. Takes no\n arguments by design: the postal code travels on the transport.\n \"\"\"\n region: Region\n}\n\nextend type Query {\n \"\"\"\n The signed-in shopper's own persistent profile. Takes no id — the identity\n comes from the session. Nullable because it is permission-gated (ADR-00005).\n Null with no error when the session names no shopper. Null with an\n UNAUTHORIZED, UPSTREAM_ERROR, UPSTREAM_TIMEOUT or CIRCUIT_OPEN error on this\n field's path when the read fails (ADR-00007), so the rest of the operation\n still resolves. A profile whose fields are null when the shopper has saved\n nothing yet.\n \"\"\"\n customerProfile: CustomerProfile\n\n \"\"\"\n The signed-in shopper's saved addresses, in the order the profile returns\n them. Takes no id: the identity comes from the session. Empty when the shopper\n has none. Throws UNAUTHORIZED or UPSTREAM_ERROR (ADR-00007).\n \"\"\"\n customerAddresses: [CustomerAddress!]!\n\n \"\"\"\n The signed-in shopper's address book. Takes no id: the identity comes from the\n session. Throws UNAUTHORIZED, or UPSTREAM_ERROR when `addresses` is selected\n (ADR-00007).\n \"\"\"\n customerAddressBook: CustomerAddressBook!\n\n \"\"\"\n One of the signed-in shopper's saved addresses. Null when the id is malformed,\n names another entity type, or is not one of this shopper's addresses; these\n cases are indistinguishable.\n \"\"\"\n customerAddress(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n ): CustomerAddress\n}\n\nextend type Query {\n \"\"\"\n The countries the store ships to. Takes no arguments and needs no cart or\n shopper. Null when the platform could not be read, with the reason in\n `errors`; a consumer then knows no shipping country rather than none.\n \"\"\"\n shippingCountries: ShippingCountries\n}\n\nextend type Query {\n \"\"\"\n Read one order owned by the signed-in shopper. A missing or foreign order returns null.\n \"\"\"\n customerOrder(\n \"\"\"Shopper-facing order number, or the global Node id of a CustomerOrder.\"\"\"\n id: ID!\n ): CustomerOrder @cacheControl(maxAge: 0, scope: PRIVATE)\n\n \"\"\"One page of the signed-in shopper's orders.\"\"\"\n customerOrders(\n \"\"\"Page size. Must be 25.\"\"\"\n first: Int!\n\n \"\"\"Opaque resume cursor issued by this field.\"\"\"\n after: Cursor\n\n \"\"\"Not supported. The list is read forward from the route.\"\"\"\n last: Int\n\n \"\"\"Not supported. The list is read forward from the route.\"\"\"\n before: Cursor\n\n \"\"\"View, text, and placed-date range.\"\"\"\n filter: CustomerOrdersFilterInput\n ): CustomerOrdersConnection! @cacheControl(maxAge: 0, scope: PRIVATE)\n}\n\n\"\"\"\nRoot mutation type. Cart and checkout operations are declared via\n`extend type Mutation` in the checkout module.\n\"\"\"\ntype Mutation {\n \"\"\"\n Exists only so `extend type Mutation` in feature modules is valid for schema\n linters and subgraph composition; not intended for client use.\n \"\"\"\n inertMutationPlaceholder: Boolean\n\n \"\"\"Placeholder field — removed once a real mutation is added via extend.\"\"\"\n empty: String @deprecated(reason: \"Placeholder — will be dropped when the first real mutation is added.\") @deprecationDate(deletionDate: \"2026-12-31\")\n}\n\nextend type Mutation {\n \"\"\"\n Add an item to the cart. If the variant already exists in the cart, its\n quantity is increased by the given amount.\n \"\"\"\n cartItemAdd(\n \"\"\"Item details to add.\"\"\"\n input: CartItemAddInput!\n ): CartItemAddPayload!\n\n \"\"\"Remove an item from the cart entirely (sets quantity to 0).\"\"\"\n cartItemRemove(\n \"\"\"Item to remove.\"\"\"\n input: CartItemRemoveInput!\n ): CartItemRemovePayload!\n\n \"\"\"\n Remove multiple items from the cart in a single upstream write (each line's\n quantity is set to 0). Tolerant: variants absent from the cart are skipped.\n \"\"\"\n cartItemsRemove(\n \"\"\"Items to remove.\"\"\"\n input: CartItemsRemoveInput!\n ): CartItemsRemovePayload!\n\n \"\"\"Increase the quantity of an existing cart item.\"\"\"\n cartItemQuantityIncrease(\n \"\"\"Item and quantity details.\"\"\"\n input: CartItemQuantityIncreaseInput!\n ): CartItemQuantityIncreasePayload!\n\n \"\"\"\n Decrease the quantity of an existing cart item.\n If the resulting quantity would be zero or less, the item is removed.\n \"\"\"\n cartItemQuantityDecrease(\n \"\"\"Item and quantity details.\"\"\"\n input: CartItemQuantityDecreaseInput!\n ): CartItemQuantityDecreasePayload!\n\n \"\"\"\n Apply a coupon code to the active cart. Appends to the existing set and returns\n the recomputed cart, or typed errors when the code is rejected.\n \"\"\"\n cartCouponApply(\n \"\"\"Coupon code to apply.\"\"\"\n input: CartCouponApplyInput!\n ): CartCouponApplyPayload!\n\n \"\"\"\n Remove a coupon code from the active cart. Idempotent when the code is not applied.\n \"\"\"\n cartCouponRemove(\n \"\"\"Coupon code to remove.\"\"\"\n input: CartCouponRemoveInput!\n ): CartCouponRemovePayload!\n\n \"\"\"\n Re-check the active cart against the platform and return it with each line's\n availability refreshed. Writes nothing: the cart is re-simulated and only\n `items.variant.availability` is corrected, so a line the platform can no longer\n fulfil comes back flagged for the shopper to remove. Quantities are never\n altered, and totals stay as the cart reported them until that removal\n recomputes them. Takes no arguments: the cart is resolved from the request\n context and is never created.\n \"\"\"\n cartValidate: CartValidatePayload!\n}\n\nextend type Mutation {\n \"\"\"\n Write the provided profile fields to the active cart's clientProfileData\n attachment. Partial: omitted fields are untouched. Never mints a cart.\n \"\"\"\n clientProfileUpdate(\n \"\"\"Profile fields to write.\"\"\"\n input: ClientProfileUpdateInput!\n ): ClientProfileUpdatePayload!\n\n \"\"\"\n Write the provided preference flags to the active cart's clientPreferencesData\n attachment. Partial: omitted flags are untouched. Never mints a cart.\n \"\"\"\n clientPreferencesUpdate(\n \"\"\"Preference flags to write.\"\"\"\n input: ClientPreferencesUpdateInput!\n ): ClientPreferencesUpdatePayload!\n\n \"\"\"\n Set the full delivery address (delivery step). Auto-selects the cheapest SLA\n when available. Never mints a cart.\n \"\"\"\n shippingAddressUpdate(\n \"\"\"Address details to write.\"\"\"\n input: ShippingAddressUpdateInput!\n ): ShippingAddressUpdatePayload!\n\n \"\"\"\n Select one shipping option for the whole cart. Fans the selection out to\n every item. Never mints a cart.\n \"\"\"\n shippingOptionSelect(\n \"\"\"The option to select.\"\"\"\n input: ShippingOptionSelectInput!\n ): ShippingOptionSelectPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Select a payment method, optionally identifying a new card's BIN or a saved card's account.\n \"\"\"\n paymentMethodSelect(\n \"\"\"Method (and optional BIN/saved-card) to select.\"\"\"\n input: PaymentMethodSelectInput!\n ): PaymentMethodSelectPayload!\n\n \"\"\"\n Select an installment count for the currently-selected method. Recomputes the cart total.\n \"\"\"\n paymentInstallmentSelect(\n \"\"\"Installment count to select.\"\"\"\n input: PaymentInstallmentSelectInput!\n ): PaymentInstallmentSelectPayload!\n\n \"\"\"Set the billing address, or fall back to the delivery address.\"\"\"\n paymentBillingAddressUpdate(\n \"\"\"\n Billing address details, or sameAsDelivery: true to use the delivery address.\n \"\"\"\n input: PaymentBillingAddressUpdateInput!\n ): PaymentBillingAddressUpdatePayload!\n\n \"\"\"\n Open a VTEX transaction from the currently-selected payment. No input: every field is server-derived.\n \"\"\"\n paymentStartTransaction: PaymentStartTransactionPayload!\n\n \"\"\"\n Finalize a transaction after the direct-to-gateway payment call succeeded.\n \"\"\"\n paymentGatewayCallback(\n \"\"\"The order group to finalize.\"\"\"\n input: PaymentGatewayCallbackInput!\n ): PaymentGatewayCallbackPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Sign in with email and password. Returns the refreshed session, or typed\n userErrors.\n \"\"\"\n sessionLoginWithPassword(\n \"\"\"The email and password to authenticate with.\"\"\"\n input: SessionPasswordLoginInput!\n ): SessionLoginPayload!\n\n \"\"\"\n Request an email access code. Returns an opaque authenticationToken to\n round-trip into validate.\n \"\"\"\n sessionRequestAccessCode(\n \"\"\"The email to send the access code to.\"\"\"\n input: SessionRequestAccessCodeInput!\n ): SessionRequestAccessCodePayload!\n\n \"\"\"\n Validate an email access code with its authenticationToken. Returns the\n refreshed session.\n \"\"\"\n sessionValidateAccessCode(\n \"\"\"The email, access code, and authenticationToken to validate.\"\"\"\n input: SessionValidateAccessCodeInput!\n ): SessionLoginPayload!\n\n \"\"\"\n Sign out. Clears auth cookies and refreshes the order form to a guest session.\n Idempotent.\n \"\"\"\n sessionLogout: SessionLoginPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Set the shopper's active region from a postal code. Accepts the value as the\n shopper typed it, including any mask; the server normalizes it and derives the\n city.\n \"\"\"\n regionUpdate(\n \"\"\"The postal code to activate, masked or bare.\"\"\"\n postalCode: String!\n ): RegionUpdatePayload!\n}\n\nextend type Mutation {\n \"\"\"\n Partially update the signed-in shopper's own profile. Upserts: succeeds whether or not a record exists.\n \"\"\"\n customerProfileUpdate(\n \"\"\"The fields to write. Provide only what the shopper edited.\"\"\"\n input: CustomerProfileUpdateInput!\n ): CustomerProfileUpdatePayload!\n\n \"\"\"\n Save a new address for the signed-in shopper. The store must ship to the country, and the\n country's rules must accept the fields. Refusals come back as `userErrors`.\n \"\"\"\n customerAddressCreate(\n \"\"\"The address to save.\"\"\"\n input: CustomerAddressCreateInput!\n ): CustomerAddressCreatePayload!\n\n \"\"\"\n Change one of the signed-in shopper's saved addresses. The merged address is validated\n against its stored country. Refusals come back as `userErrors`.\n \"\"\"\n customerAddressUpdate(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n\n \"\"\"The fields to change. Provide only what the shopper edited.\"\"\"\n input: CustomerAddressUpdateInput!\n ): CustomerAddressUpdatePayload!\n\n \"\"\"\n Remove one of the signed-in shopper's saved addresses. An address that is already gone\n counts as removed.\n \"\"\"\n customerAddressDelete(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n ): CustomerAddressDeletePayload!\n}\n\nextend type Mutation {\n \"\"\"\n Request the cancellation of one order owned by the signed-in shopper. Checkout\n records the request and OMS applies it afterwards, so the returned order can\n still show the previous status.\n \"\"\"\n customerOrderCancel(\n \"\"\"Shopper-facing order number.\"\"\"\n id: ID!\n\n \"\"\"The optional reason.\"\"\"\n input: CustomerOrderCancelInput!\n ): CustomerOrderCancelPayload!\n}\n\n\"\"\"\nA manufacturer or designer brand.\nMaps to VTEX Brand entity.\n\"\"\"\ntype Brand implements Node\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Human-readable brand name.\"\"\"\n name: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Whether the brand is currently active in the storefront.\"\"\"\n isActive: Boolean!\n\n \"\"\"Brand logo image.\"\"\"\n logo: Image\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated list of products belonging to this brand.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n}\n\n\"\"\"Paginated list of brands.\"\"\"\ntype BrandsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [BrandEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of brands matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype BrandEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Brand!\n}\n\n\"\"\"\nA hierarchical product classification level (department → category → subcategory).\nMaps to VTEX Category entity. The tree structure is modeled via parent/children\nreferences, allowing arbitrary depth.\n\"\"\"\ntype Category implements Node\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Display name of the category.\"\"\"\n name: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Full materialized path, e.g. \\\"/clothing/shirts/casual\\\".\"\"\"\n path: String!\n\n \"\"\"Zero-indexed depth in the tree (0 = department).\"\"\"\n level: Int!\n\n \"\"\"Whether this category is currently active.\"\"\"\n isActive: Boolean!\n\n \"\"\"Parent category. Null for top-level departments.\"\"\"\n parent: Category\n\n \"\"\"Direct children of this category.\"\"\"\n children: [Category!]!\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated products within this category.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n\n \"\"\"Specification groups relevant to this category.\"\"\"\n specificationGroups: [SpecificationGroup!]!\n}\n\n\"\"\"Paginated list of categories.\"\"\"\ntype CategoriesConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [CategoryEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of categories matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype CategoryEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Category!\n}\n\n\"\"\"\nA group of related specifications that apply to products in a category.\nMaps to VTEX Specification Group.\n\"\"\"\ntype SpecificationGroup {\n \"\"\"Display name (e.g. \\\"Physical Attributes\\\", \\\"Technical Details\\\").\"\"\"\n name: String!\n\n \"\"\"Specifications in this group.\"\"\"\n specifications: [Specification!]!\n}\n\n\"\"\"\nA product-level or variant-level specification field.\nMaps to VTEX Specification / Specification Field.\nExamples: \"Material\", \"Warranty Period\" (product-level);\n\"Color\", \"Size\" (variant-level / option axis).\n\"\"\"\ntype Specification {\n \"\"\"Display label (e.g. \\\"Material\\\").\"\"\"\n name: String!\n\n \"\"\"The assigned values for this specification.\"\"\"\n values: [String!]!\n\n \"\"\"How this spec was captured.\"\"\"\n fieldType: SpecificationFieldType!\n}\n\n\"\"\"A single breadcrumb entry in the product's navigation trail.\"\"\"\ntype BreadcrumbItem {\n \"\"\"Human-readable label (e.g. \"Electronics\", \"Smartphones\").\"\"\"\n name: String!\n\n \"\"\"URL path for this breadcrumb level (e.g. \"/electronics/smartphones\").\"\"\"\n url: String!\n\n \"\"\"1-based position in the breadcrumb trail.\"\"\"\n position: Int!\n}\n\n\"\"\"\nDiscriminates how a specification value was captured.\nMaps to VTEX FieldType numeric codes.\n\"\"\"\nenum SpecificationFieldType {\n \"\"\"Free text.\"\"\"\n TEXT\n\n \"\"\"Multi-line free text.\"\"\"\n MULTI_LINE_TEXT\n\n \"\"\"Single-select dropdown.\"\"\"\n COMBO\n\n \"\"\"Single-select radio.\"\"\"\n RADIO\n\n \"\"\"Multi-select checkbox.\"\"\"\n CHECKBOX\n\n \"\"\"Rich text / HTML.\"\"\"\n RICH_TEXT\n}\n\n\"\"\"\nA named option axis on a product that differentiates variants.\nThink \"Color\" or \"Size\". Each option has a set of possible values.\nSimilar to Shopify's ProductOption.\n\"\"\"\ntype ProductOption {\n \"\"\"Option name (e.g. \\\"Color\\\").\"\"\"\n name: String!\n\n \"\"\"\n All values available across variants (e.g. [\\\"Red\\\", \\\"Blue\\\", \\\"Green\\\"]).\n \"\"\"\n values: [String!]!\n}\n\n\"\"\"\nA concrete option/value pair selected on a specific variant.\nExample: { name: \"Color\", value: \"Red\" }.\n\"\"\"\ntype SelectedOption {\n \"\"\"Option axis name.\"\"\"\n name: String!\n\n \"\"\"Selected value.\"\"\"\n value: String!\n}\n\n\"\"\"\nA purchasable unit of a product.\nMaps to VTEX SKU. In commerce, this is the concrete item a customer adds to cart —\na specific size/color/voltage combination of a product.\n\"\"\"\ntype Variant implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Variant display name (e.g. \\\"Varsity Red — Size 10\\\").\"\"\"\n name: String!\n\n \"\"\"Stock Keeping Unit code. Unique merchant-side identifier.\"\"\"\n sku: String!\n\n \"\"\"\n PDP path segment in the active locale for this SKU, \"{linkId}-{skuId}\".\n \"\"\"\n routeSlug: String!\n\n \"\"\"International Article Number (barcode). Maps to VTEX SKU EAN.\"\"\"\n ean: String\n\n \"\"\"Merchant reference code.\"\"\"\n referenceId: String\n\n \"\"\"Whether this variant is currently available for purchase.\"\"\"\n availableForSale: Boolean!\n\n \"\"\"Current selling price.\"\"\"\n price: Money!\n\n \"\"\"Original list price before promotions. Null when there is no discount.\"\"\"\n compareAtPrice: Money\n\n \"\"\"All option selections that define this variant.\"\"\"\n selectedOptions: [SelectedOption!]!\n\n \"\"\"Variant images. First image is the primary.\"\"\"\n images(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ImagesConnection!\n\n \"\"\"Variant videos.\"\"\"\n videos: [Video!]!\n\n \"\"\"Quantity currently in stock. Null when inventory tracking is disabled.\"\"\"\n quantityAvailable: Int\n\n \"\"\"Unit of sale (e.g. \\\"un\\\", \\\"kg\\\", \\\"l\\\").\"\"\"\n measurementUnit: String!\n\n \"\"\"\n Multiplier for the measurement unit (e.g. 1.5 means each unit is 1.5 kg).\n \"\"\"\n unitMultiplier: Float!\n\n \"\"\"The parent product.\"\"\"\n product: Product!\n\n \"\"\"Variant-level specifications (e.g. voltage, plug type).\"\"\"\n specifications: [Specification!]!\n\n \"\"\"Add-on customizations available for this variant.\"\"\"\n customizations: [Customization!]!\n\n \"\"\"Sellers that fulfill this variant. Relevant in marketplace scenarios.\"\"\"\n sellers: [Seller!]!\n}\n\n\"\"\"Paginated list of variants.\"\"\"\ntype VariantsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [VariantEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of variants matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype VariantEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Variant!\n}\n\n\"\"\"\nA product is a generic item in the catalog (e.g. \"Nike Zoom Janoski\").\nEach product has one or more variants (SKUs) that are the purchasable units.\nMaps to the VTEX Product entity.\n\"\"\"\ntype Product implements Node\n @key(fields: \"slug\")\n @cacheControl(maxAge: 60, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Product title as displayed in the storefront.\"\"\"\n title: String!\n\n \"\"\"URL-friendly handle / slug. Maps to VTEX `LinkId`.\"\"\"\n slug: String!\n\n \"\"\"\n PDP path segment in the active locale, \"{linkId}-{skuId}\" with the representative SKU (in stock first, then lowest\n spot price, then the first SKU). Build product URLs from this, not from `slug`.\n \"\"\"\n routeSlug: String!\n\n \"\"\"Full marketing description.\"\"\"\n description: String\n\n \"\"\"Description rendered as HTML.\"\"\"\n descriptionHtml: HTML\n\n \"\"\"Vendor / manufacturer name. Shortcut for brand.name.\"\"\"\n vendor: String\n\n \"\"\"Whether this product is currently active on the storefront.\"\"\"\n isActive: Boolean!\n\n \"\"\"Whether to show the product even when out of stock.\"\"\"\n showWhenOutOfStock: Boolean!\n\n \"\"\"Date the product was first published.\"\"\"\n publishedAt: DateTime\n\n \"\"\"Release or launch date.\"\"\"\n releaseDate: DateTime\n\n \"\"\"Date the product was created in the system.\"\"\"\n createdAt: DateTime!\n\n \"\"\"Date the product was last updated.\"\"\"\n updatedAt: DateTime!\n\n \"\"\"Merchant reference ID. Maps to VTEX `RefId`.\"\"\"\n referenceId: String\n\n \"\"\"The brand this product belongs to.\"\"\"\n brand: Brand\n\n \"\"\"The primary (most specific) category.\"\"\"\n category: Category\n\n \"\"\"All ancestor categories up to the root department.\"\"\"\n categories: [Category!]!\n\n \"\"\"The price range across all variants.\"\"\"\n priceRange: PriceRange!\n\n \"\"\"The compare-at (original) price range across all variants.\"\"\"\n compareAtPriceRange: PriceRange\n\n \"\"\"Named option axes available on this product (e.g. Color, Size).\"\"\"\n options: [ProductOption!]!\n\n \"\"\"Product-level specifications (e.g. material, care instructions).\"\"\"\n specifications: [Specification!]!\n\n \"\"\"Specification groups with full detail.\"\"\"\n specificationGroups: [SpecificationGroup!]!\n\n \"\"\"All purchasable variants.\"\"\"\n variants(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): VariantsConnection!\n\n \"\"\"Total number of variants.\"\"\"\n totalVariants: Int!\n\n \"\"\"Product images aggregated from all variants.\"\"\"\n images(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ImagesConnection!\n\n \"\"\"All media (images + videos) for this product.\"\"\"\n media(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 12\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): MediaConnection!\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Navigation breadcrumb trail from root category to this product.\"\"\"\n breadcrumbs: [BreadcrumbItem!]!\n\n \"\"\"User-generated review / rating summary.\"\"\"\n rating: Rating\n\n \"\"\"\n Products related to this one (accessories, suggestions). Maps to VTEX SKU Complement.\n \"\"\"\n relatedProducts(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ProductsConnection!\n\n \"\"\"Collections this product belongs to.\"\"\"\n collections: [Collection!]!\n\n \"\"\"\n Sales channels where this product is available. Maps to VTEX Trade Policy.\n \"\"\"\n salesChannels: [SalesChannel!]!\n\n \"\"\"Bundle components if this product is a kit. Maps to VTEX SKU Kit.\"\"\"\n bundleItems: [BundleItem!]!\n}\n\n\"\"\"Paginated list of products.\"\"\"\ntype ProductsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [ProductEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of products matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype ProductEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Product!\n}\n\n\"\"\"Paginated list of images.\"\"\"\ntype ImagesConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [ImageEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype ImageEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Image!\n}\n\n\"\"\"Paginated list of media.\"\"\"\ntype MediaConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [MediaEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype MediaEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Media!\n}\n\n\"\"\"\nAggregate review/rating summary for a product.\nMaps to VTEX Product Review Rate.\n\"\"\"\ntype Rating {\n \"\"\"Average score (e.g. 4.3).\"\"\"\n average: Float!\n\n \"\"\"Total number of reviews.\"\"\"\n count: Int!\n}\n\n\"\"\"\nA curated group of products. Maps to VTEX Collection (Beta) entity.\nCollections can be used for seasonal promotions, editorial picks, etc.\n\"\"\"\ntype Collection implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Collection title.\"\"\"\n title: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Editorial description.\"\"\"\n description: String\n\n \"\"\"Whether the collection is currently active.\"\"\"\n isActive: Boolean!\n\n \"\"\"Hero / banner image.\"\"\"\n image: Image\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated products in this collection.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n}\n\n\"\"\"Paginated list of collections.\"\"\"\ntype CollectionsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [CollectionEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of collections matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype CollectionEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Collection!\n}\n\n\"\"\"\nA seller / merchant that fulfills orders for one or more variants.\nMaps to VTEX Seller entity.\n\"\"\"\ntype Seller implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Seller display name.\"\"\"\n name: String!\n\n \"\"\"Whether this is the default (1P) seller.\"\"\"\n isDefault: Boolean!\n\n \"\"\"Seller logo.\"\"\"\n logo: Image\n\n \"\"\"\n The seller's commercial offer for this variant (price, availability, installments).\n \"\"\"\n offer: Offer\n}\n\n\"\"\"\nA seller's commercial offer for a specific variant — includes pricing,\navailability, and available payment/installment options.\n\"\"\"\ntype Offer {\n \"\"\"Current selling price.\"\"\"\n price: Money!\n\n \"\"\"Original list price before promotions.\"\"\"\n listPrice: Money!\n\n \"\"\"\n Best cash/immediate-payment price (e.g. Pix discount). Equals price when there is no spot discount.\n \"\"\"\n spotPrice: Money!\n\n \"\"\"Price before any cart-level or coupon discounts.\"\"\"\n priceWithoutDiscount: Money!\n\n \"\"\"Available quantity from this seller.\"\"\"\n availableQuantity: Int!\n\n \"\"\"Tax amount.\"\"\"\n tax: Money!\n\n \"\"\"\n Tax as a percentage of the price (e.g. 0.18 for 18%). Null when not applicable.\n \"\"\"\n taxPercentage: Float\n\n \"\"\"Loyalty / reward points value earned on this purchase.\"\"\"\n rewardValue: Float!\n\n \"\"\"\n ISO 8601 timestamp after which this price is no longer guaranteed. Null when open-ended.\n \"\"\"\n priceValidUntil: DateTime\n\n \"\"\"SKU IDs of free gifts included with this offer.\"\"\"\n giftSkuIds: [String!]!\n\n \"\"\"\n Named discount labels applied to this offer (e.g. \\\"10% off\\\", \\\"Black Friday\\\").\n \"\"\"\n discountHighlights: [String!]!\n\n \"\"\"Available installment plans grouped by payment method.\"\"\"\n installmentPlans: [InstallmentPlan!]!\n\n \"\"\"\n Active promotions applicable to this offer (e.g. bundle discounts, buy-X-get-Y).\n \"\"\"\n promotions: [Promotion!]!\n}\n\n\"\"\"\nA group of installment options for a single payment method (e.g. \"Visa\", \"Pix\").\n\"\"\"\ntype InstallmentPlan {\n \"\"\"Payment method name (e.g. \\\"Visa\\\", \\\"Mastercard\\\", \\\"Pix\\\").\"\"\"\n paymentMethod: String!\n\n \"\"\"Payment method category.\"\"\"\n paymentType: PaymentType!\n\n \"\"\"\n Available installment tiers, sorted by number of installments ascending.\n \"\"\"\n installments: [Installment!]!\n}\n\n\"\"\"\nA single installment tier within a payment method.\nExample: 6 × R$ 61.65 at 0% interest.\n\"\"\"\ntype Installment {\n \"\"\"Number of installments (1 = single payment).\"\"\"\n count: Int!\n\n \"\"\"Amount per installment.\"\"\"\n value: Money!\n\n \"\"\"Total amount including any interest.\"\"\"\n totalAmount: Money!\n\n \"\"\"Annual interest rate as a percentage (0 = interest-free).\"\"\"\n interestRate: Float!\n\n \"\"\"Whether this tier is interest-free.\"\"\"\n interestFree: Boolean!\n}\n\n\"\"\"Broad category of a payment method.\"\"\"\nenum PaymentType {\n \"\"\"Credit card (Visa, Mastercard, Amex, etc.).\"\"\"\n CREDIT_CARD\n\n \"\"\"Debit card.\"\"\"\n DEBIT_CARD\n\n \"\"\"Instant / real-time payment (Pix, etc.).\"\"\"\n INSTANT\n\n \"\"\"Bank slip / boleto.\"\"\"\n BANK_SLIP\n\n \"\"\"Digital wallet or store-specific payment.\"\"\"\n DIGITAL_WALLET\n\n \"\"\"Other / unknown payment type.\"\"\"\n OTHER\n}\n\n\"\"\"\nAn active promotion or incentive applicable to an offer.\nExamples: \"Buy 3 for R$14.99\", \"9% Pix discount\".\n\"\"\"\ntype Promotion {\n \"\"\"Human-readable promotion name / headline.\"\"\"\n name: String!\n\n \"\"\"Conditions that must be met for the promotion to apply.\"\"\"\n conditions: PromotionConditions!\n\n \"\"\"Effects applied when conditions are met.\"\"\"\n effects: PromotionEffects!\n}\n\n\"\"\"Conditions required for a promotion to activate.\"\"\"\ntype PromotionConditions {\n \"\"\"Minimum quantity of items required (0 = no minimum).\"\"\"\n minimumQuantity: Int!\n\n \"\"\"\n Additional condition parameters (e.g. required payment method, collection membership).\n \"\"\"\n parameters: [PromotionParameter!]!\n}\n\n\"\"\"Effects granted when a promotion's conditions are satisfied.\"\"\"\ntype PromotionEffects {\n \"\"\"Effect parameters describing the discount or benefit.\"\"\"\n parameters: [PromotionParameter!]!\n}\n\n\"\"\"\nA key-value parameter describing a promotion condition or effect.\nCommon keys: \\\"PercentualDiscount\\\", \\\"MaximumUnitPriceDiscount\\\",\n\\\"PaymentMethodId\\\", \\\"CollectionsIdsList\\\".\n\"\"\"\ntype PromotionParameter {\n \"\"\"Parameter key.\"\"\"\n name: String!\n\n \"\"\"Parameter value.\"\"\"\n value: String!\n}\n\n\"\"\"\nA trade policy / sales channel through which products are sold.\nMaps to VTEX Trade Policy / Sales Channel.\n\"\"\"\ntype SalesChannel implements Node\n @cacheControl(maxAge: 3600, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Channel name.\"\"\"\n name: String!\n\n \"\"\"ISO 4217 default currency for this channel.\"\"\"\n currencyCode: CurrencyCode!\n\n \"\"\"BCP 47 locale for this channel.\"\"\"\n locale: Locale\n\n \"\"\"Whether the channel is active.\"\"\"\n isActive: Boolean!\n}\n\n\"\"\"\nAn optional, free-form customization that can be attached to a variant.\nMaps to VTEX Attachment. Examples: gift wrapping, engraving, custom message.\n\"\"\"\ntype Customization implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Display name (e.g. \\\"Gift Message\\\").\"\"\"\n name: String!\n\n \"\"\"Whether this customization is required.\"\"\"\n isRequired: Boolean!\n\n \"\"\"Allowed keys and their constraints.\"\"\"\n fields: [CustomizationField!]!\n}\n\n\"\"\"A single input field within a customization.\"\"\"\ntype CustomizationField {\n \"\"\"Field key (e.g. \\\"message\\\").\"\"\"\n key: String!\n\n \"\"\"Maximum allowed characters.\"\"\"\n maxLength: Int\n\n \"\"\"Regex or enum-based validation domain.\"\"\"\n allowedValues: [String!]\n}\n\n\"\"\"\nA component of a product bundle / kit.\nMaps to VTEX SKU Kit.\n\"\"\"\ntype BundleItem {\n \"\"\"The variant included in the bundle.\"\"\"\n variant: Variant!\n\n \"\"\"Quantity of this variant in the bundle.\"\"\"\n quantity: Int!\n}\n\n\"\"\"Filter criteria for product queries.\"\"\"\ninput ProductsFilterInput {\n \"\"\"Full-text search term.\"\"\"\n searchTerm: String\n\n \"\"\"Include only products in these category IDs.\"\"\"\n categoryIds: [ID!]\n\n \"\"\"Include only products from these brand IDs.\"\"\"\n brandIds: [ID!]\n\n \"\"\"Minimum price filter.\"\"\"\n priceMin: Decimal\n\n \"\"\"Maximum price filter.\"\"\"\n priceMax: Decimal\n\n \"\"\"Include only available (in-stock) products.\"\"\"\n availableOnly: Boolean\n\n \"\"\"Filter by product type / taxonomy label.\"\"\"\n productType: String\n\n \"\"\"\n Filter by specification values, e.g. {name: \\\"Color\\\", values: [\\\"Red\\\", \\\"Blue\\\"]}.\n \"\"\"\n specifications: [SpecificationFilterInput!]\n\n \"\"\"Filter by sales channel ID.\"\"\"\n salesChannelId: ID\n\n \"\"\"Filter by collection ID.\"\"\"\n collectionId: ID\n\n \"\"\"Include only products published after this date.\"\"\"\n publishedAfter: DateTime\n\n \"\"\"Include only products published before this date.\"\"\"\n publishedBefore: DateTime\n\n \"\"\"Filter by tags / keywords.\"\"\"\n tags: [String!]\n}\n\n\"\"\"Allows filtering products by specification name and values.\"\"\"\ninput SpecificationFilterInput {\n \"\"\"Specification name (e.g. \\\"Color\\\").\"\"\"\n name: String!\n\n \"\"\"Accepted values (OR semantics within, AND across different specs).\"\"\"\n values: [String!]!\n}\n\n\"\"\"Sorting input for product queries.\"\"\"\ninput ProductSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: ProductSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting products.\"\"\"\nenum ProductSortField {\n \"\"\"Alphabetical by title.\"\"\"\n TITLE\n\n \"\"\"By price (uses min variant price).\"\"\"\n PRICE\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n\n \"\"\"By last update date.\"\"\"\n UPDATED_AT\n\n \"\"\"By release date.\"\"\"\n RELEASE_DATE\n\n \"\"\"By relevance / scoring.\"\"\"\n RELEVANCE\n\n \"\"\"By number of sales.\"\"\"\n BEST_SELLING\n}\n\n\"\"\"Filter criteria for collection queries.\"\"\"\ninput CollectionsFilterInput {\n \"\"\"Full-text search term.\"\"\"\n searchTerm: String\n\n \"\"\"Include only active collections.\"\"\"\n activeOnly: Boolean\n}\n\n\"\"\"Sorting input for collection queries.\"\"\"\ninput CollectionSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: CollectionSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting collections.\"\"\"\nenum CollectionSortField {\n \"\"\"Alphabetical by title.\"\"\"\n TITLE\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n\n \"\"\"By last update date.\"\"\"\n UPDATED_AT\n}\n\n\"\"\"Sorting input for brand queries.\"\"\"\ninput BrandSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: BrandSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting brands.\"\"\"\nenum BrandSortField {\n \"\"\"Alphabetical by name.\"\"\"\n NAME\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n}\n\n\"\"\"Sorting input for category queries.\"\"\"\ninput CategorySortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: CategorySortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting categories.\"\"\"\nenum CategorySortField {\n \"\"\"Alphabetical by name.\"\"\"\n NAME\n\n \"\"\"By depth level in the tree.\"\"\"\n LEVEL\n}\n\n\"\"\"\nThe result of a full-text product search, including facets for building\nfilter UI.\n\"\"\"\ntype ProductSearchResult {\n \"\"\"Paginated product results.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ProductsConnection!\n\n \"\"\"Available facets/filters derived from the result set.\"\"\"\n facets: [SearchFacet!]!\n\n \"\"\"Corrected or suggested query if the original had a typo.\"\"\"\n suggestedQuery: String\n\n \"\"\"Spelling correction details for the query.\"\"\"\n correction: SearchCorrection\n}\n\n\"\"\"Spelling correction information returned by the search engine.\"\"\"\ntype SearchCorrection {\n \"\"\"Whether the original query was corrected.\"\"\"\n corrected: Boolean!\n\n \"\"\"Whether the original query was misspelled.\"\"\"\n misspelled: Boolean!\n\n \"\"\"The corrected query text.\"\"\"\n text: String\n\n \"\"\"The corrected text with `<em>` tags highlighting the changed parts.\"\"\"\n highlighted: String\n}\n\n\"\"\"A facet returned from search, representing a filterable dimension.\"\"\"\ntype SearchFacet {\n \"\"\"Facet name (e.g. \\\"Brand\\\", \\\"Color\\\", \\\"Price Range\\\").\"\"\"\n name: String!\n\n \"\"\"\n Facet key used in filter parameters (e.g. \\\"brand\\\", \\\"category-1\\\", \\\"price\\\").\n \"\"\"\n key: String!\n\n \"\"\"Type discriminator for rendering the correct UI control.\"\"\"\n type: SearchFacetType!\n\n \"\"\"Whether this facet should be hidden from the UI.\"\"\"\n hidden: Boolean!\n\n \"\"\"Total number of values in this facet.\"\"\"\n quantity: Int!\n\n \"\"\"Individual values within this facet.\"\"\"\n values: [SearchFacetValue!]!\n}\n\n\"\"\"Discriminates the facet UI control type.\"\"\"\nenum SearchFacetType {\n \"\"\"A list of discrete values (brand, color, size).\"\"\"\n LIST\n\n \"\"\"A numeric range (price).\"\"\"\n RANGE\n}\n\n\"\"\"A single value within a search facet.\"\"\"\ntype SearchFacetValue {\n \"\"\"Display label.\"\"\"\n label: String!\n\n \"\"\"Value to send back in the filter.\"\"\"\n value: String!\n\n \"\"\"Number of products matching this facet value.\"\"\"\n count: Int!\n\n \"\"\"Whether the user has currently selected this value.\"\"\"\n isSelected: Boolean!\n\n \"\"\"For RANGE facets: the lower bound.\"\"\"\n rangeFrom: Float\n\n \"\"\"For RANGE facets: the upper bound.\"\"\"\n rangeTo: Float\n\n \"\"\"Navigable href for this facet selection.\"\"\"\n href: String\n}\n\n\"\"\"Recommendation strategy hint.\"\"\"\nenum RecommendationIntent {\n \"\"\"Products related by purchase history.\"\"\"\n RELATED\n\n \"\"\"Products frequently bought together.\"\"\"\n COMPLEMENTARY\n\n \"\"\"Similar products (same category / specs).\"\"\"\n SIMILAR\n}\n\n\"\"\"An autocomplete suggestion returned for a partial search query.\"\"\"\ntype AutocompleteSuggestion {\n \"\"\"The suggested search term.\"\"\"\n term: String!\n\n \"\"\"Estimated number of results for this term.\"\"\"\n count: Int!\n\n \"\"\"\n Suggested facet filters associated with this term (e.g. department, category).\n \"\"\"\n attributes: [AutocompleteAttribute!]!\n}\n\n\"\"\"A facet attribute suggested alongside an autocomplete term.\"\"\"\ntype AutocompleteAttribute {\n \"\"\"Attribute key (e.g. \\\"category-1\\\").\"\"\"\n key: String!\n\n \"\"\"Attribute value (e.g. \\\"alimentos-e-bebidas\\\").\"\"\"\n value: String!\n\n \"\"\"Human-readable label for the key (e.g. \\\"Departamento\\\").\"\"\"\n labelKey: String!\n\n \"\"\"Human-readable label for the value (e.g. \\\"Alimentos e bebidas\\\").\"\"\"\n labelValue: String!\n}\n\n\"\"\"A trending search term.\"\"\"\ntype TrendingSearch {\n \"\"\"The search term.\"\"\"\n term: String!\n\n \"\"\"Number of searches in the recent period.\"\"\"\n count: Int!\n}\n\n\"\"\"Identifies a catalog route. Set exactly one member.\"\"\"\ninput CatalogRouteInput {\n \"\"\"\n Relay node ID of the entity behind the route. Only Product IDs are accepted.\n \"\"\"\n id: ID\n\n \"\"\"\n Logical store route, without the binding's origin or base path\n (e.g. \"/apparel/t-shirts\", \"/shirt-51/p\").\n \"\"\"\n path: String\n}\n\n\"\"\"Kind of entity a catalog route resolves to.\"\"\"\nenum CatalogRouteKind {\n \"\"\"A product detail page.\"\"\"\n PRODUCT\n\n \"\"\"A category or subcategory page.\"\"\"\n CATEGORY\n\n \"\"\"A brand page.\"\"\"\n BRAND\n\n \"\"\"A collection page.\"\"\"\n COLLECTION\n}\n\n\"\"\"\nA catalog route and its confirmed equivalents in every locale the catalog registers.\n\"\"\"\ntype CatalogRoute\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"\n Relay node ID of the entity. Stable across locales; the route's identity.\n \"\"\"\n id: ID!\n\n \"\"\"Kind of entity behind the route.\"\"\"\n kind: CatalogRouteKind!\n\n \"\"\"\n One entry per locale the catalog confirms for every segment of the route. Editorial fallback never adds an\n entry. May include locales the store does not publish; intersect with the store's bindings.\n \"\"\"\n variants: [CatalogRouteVariant!]!\n}\n\n\"\"\"A route's equivalent in one locale.\"\"\"\ntype CatalogRouteVariant {\n \"\"\"BCP 47 tag, canonicalized.\"\"\"\n locale: String!\n\n \"\"\"\n Route segment(s) in that locale, lowercased, accents kept. Not percent-encoded.\n \"\"\"\n slug: String!\n\n \"\"\"\n Relative logical path (\"/{slug}\" or \"/{slug}/p\"). No origin, no base path, not percent-encoded.\n \"\"\"\n path: String!\n}\n\n\"\"\"\nA shopping cart representing items a customer intends to purchase.\nMaps to the VTEX orderForm entity.\n\"\"\"\ntype Cart implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Globally unique identifier (Relay Node ID).\"\"\"\n id: ID!\n\n \"\"\"Line items currently in the cart.\"\"\"\n items: [CartItem!]!\n\n \"\"\"Aggregated totals (items, shipping, discounts, etc.).\"\"\"\n totalizers: [CartTotalizer!]!\n\n \"\"\"Total cart value.\"\"\"\n total: Money!\n\n \"\"\"\n Server messages from cart processing (e.g. promotions applied, stock warnings).\n \"\"\"\n messages: [CartMessage!]!\n\n \"\"\"\n The coupon codes currently applied to the cart. Empty when none are applied.\n \"\"\"\n appliedCoupons: [AppliedCoupon!]!\n\n \"\"\"\n Cart-level discounts as labeled lines: one per promotion or coupon, plus a\n residual for whatever they do not account for. Always a list (possibly empty),\n never null.\n \n The itemized companion to the aggregated \"Discounts\" totalizer, which stays on\n `totalizers` unchanged: these entries sum to it, so a summary built on them\n cannot under-report. Distinct from the per-line `CartItem.discounts`, which is\n featured-only and itemized per price tag rather than per promotion.\n \"\"\"\n discounts: [CartDiscount!]!\n\n \"\"\"\n Aggregate item-level catalog markdown: the sum of `(listPrice - price) * quantity`\n across non-gift lines, clamped at zero (in cents from VTEX, exposed as Money). This\n is the reduction from each line's list price down to the price the \"Items\" subtotal\n is built on — the catalog \"de/por\" savings baked into the price before any\n cart-level promotion runs.\n \n Distinct money from the cart-level promotions and coupons on the \"Discounts\"\n totalizer and `discounts` (those are `price - sellingPrice`, the reduction below the\n subtotal): item markdown sits *above* the subtotal, so it is never part of\n `totalizers` and never summed into `total`. It is an informational savings figure and\n is zero when no line is marked down. Gift lines are excluded — a gift's value is\n already a promotion entry in `discounts`.\n \"\"\"\n itemMarkdownTotal: Money!\n\n \"\"\"\n Progress toward the cart's nearest free-shipping promotion. Null when no\n eligible free-shipping promotion is identified for this cart.\n \"\"\"\n freeShippingProgress: FreeShippingProgress\n\n \"\"\"\n Non-null when the cart belongs to a different sales channel than the request's active context. The\n cart is left exactly as it was: nothing here reprices it or removes an item. Converging it is a\n write, and the first write that carries the active channel makes Checkout reprocess the same\n orderForm — prices, promotions, coupons and logistics are recomputed and items not sellable in the\n destination channel are removed by Checkout, while orderFormId, attachments and addresses survive.\n \"\"\"\n salesChannelMismatch: CartSalesChannelMismatch\n}\n\n\"\"\"\nThe two sales channels that disagree. Both are trade-policy identifiers.\n\"\"\"\ntype CartSalesChannelMismatch {\n \"\"\"The channel the cart is currently on.\"\"\"\n cartSalesChannel: String!\n\n \"\"\"The channel the request's active context resolves to.\"\"\"\n activeSalesChannel: String!\n}\n\n\"\"\"\nProgress toward the cart's nearest free-shipping promotion, derived from the\npromotion teasers on a checkout simulation run with the cart's destination.\nNull until the cart has a destination, and when no eligible free-shipping\npromotion is identified for this cart (none configured, none teaser-emitting,\nempty cart, or unreadable promotion data) — absence is a normal state, never\nan error.\n\"\"\"\ntype FreeShippingProgress {\n \"\"\"\n Minimum qualifying cart total for the promotion. Null when the cart already\n qualifies: the promotion teaser disappears once met, so the threshold is no\n longer reported upstream.\n \"\"\"\n threshold: Money\n\n \"\"\"Amount still to add to qualify. Zero when the cart qualifies.\"\"\"\n remaining: Money!\n\n \"\"\"Whether the cart currently qualifies for free shipping.\"\"\"\n qualified: Boolean!\n}\n\n\"\"\"\nOne labeled cart-level discount line, attributed to the promotion or coupon that\ngranted it. Amounts are summed from the cart's price tags and reconciled against\nthe aggregated \"Discounts\" totalizer.\n\"\"\"\ntype CartDiscount {\n \"\"\"\n The promotion's name, or the coupon code exactly as the shopper entered it.\n Null when nothing upstream names this amount: always for OTHER, and for a\n promotion the platform left unnamed. The consumer supplies the label in that\n case; an internal promotion identifier is never exposed here.\n \"\"\"\n name: String\n\n \"\"\"\n Amount taken off by this line, as a positive monetary value. The minus sign is\n presentational and applied by the UI. Never zero: a promotion that took nothing\n off this cart is omitted rather than reported as an empty line.\n \"\"\"\n value: Money!\n\n \"\"\"\n Where this line came from: an automatic promotion, a coupon, or the residual.\n \"\"\"\n kind: CartDiscountKind!\n}\n\n\"\"\"Origin of a cart-level discount line.\"\"\"\nenum CartDiscountKind {\n \"\"\"An automatically applied promotion.\"\"\"\n PROMOTION\n\n \"\"\"A promotion matched by a coupon code the shopper entered.\"\"\"\n COUPON\n\n \"\"\"\n The part of the aggregate discount that no named promotion or coupon accounts\n for — a promotion the merchant did not feature, a discount the platform never\n itemized, or rounding. At most one entry, always last.\n \"\"\"\n OTHER\n}\n\n\"\"\"\nA coupon code applied to the cart, with whether its promotion conditions matched.\n\"\"\"\ntype AppliedCoupon {\n \"\"\"The coupon code, stored verbatim as the shopper entered it.\"\"\"\n code: String!\n\n \"\"\"\n True when the code is on the cart but its promotion conditions did not match\n (no discount granted).\n \"\"\"\n isUnmatchedCondition: Boolean!\n}\n\n\"\"\"\nA single line item in the cart. Carries a historical snapshot of the variant\nand product at the time it was added: cart-line value objects describe what\nthe customer actually has, not what the catalog says about it today.\n\"\"\"\ntype CartItem {\n \"\"\"\n Cart-scoped line identifier (opaque, stable across mutations for the same line).\n Encoded as Base64(\"CartItem:<orderFormId>:<uniqueId>\"). Not a Relay Node; this id\n exists only to serve as a stable cache key for clients doing optimistic UI.\n \"\"\"\n id: ID!\n\n \"\"\"\n Variant snapshot for this line. Built from the order line itself, not from\n a live catalog read.\n \"\"\"\n variant: CartVariant!\n\n \"\"\"\n Product snapshot for this line. Built from the order line itself, not from\n a live catalog read.\n \"\"\"\n product: CartProduct!\n\n \"\"\"Quantity of this variant in the cart.\"\"\"\n quantity: Int!\n\n \"\"\"Unit price (in cents from VTEX, exposed as Money).\"\"\"\n price: Money!\n\n \"\"\"Original list price before discounts.\"\"\"\n listPrice: Money!\n\n \"\"\"Final selling price after discounts.\"\"\"\n sellingPrice: Money!\n\n \"\"\"Whether this line is a gift item.\"\"\"\n gift: Boolean!\n\n \"\"\"\n Discounts applied to this line, one entry per featured promotion price tag that\n carries a currency amount. Always a list (possibly empty), never null. The\n per-line, itemized companion to the aggregated \"Discounts\" totalizer on Cart —\n not a replacement for it.\n \n Percentage-configured promotions are absent: their price tag carries a rate\n rather than an amount, so there is no monetary value to report per line. Use\n `Cart.discounts` for a breakdown that accounts for every discount, naming what\n it can and reporting the rest as a residual.\n \"\"\"\n discounts: [CartItemDiscount!]!\n\n \"\"\"\n Upstream line identifier (order-form uniqueId). The stable per-line address:\n with customizations, the same variant can appear as several distinct lines,\n so variantId is not unique per line. Stable across cart mutations.\n \"\"\"\n lineId: String!\n\n \"\"\"\n This line's own total (own unit selling price × quantity, rounding-exact),\n excluding composition children.\n \"\"\"\n ownTotal: Money!\n\n \"\"\"\n This line's total including all nested composition children, recursively.\n Equals ownTotal when the line has no compositions.\n \"\"\"\n total: Money!\n\n \"\"\"\n Form-based customizations applied to this line (personalization text,\n selections, uploaded-file URLs). Empty when the line has none.\n \"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"\n Child products added to this line by bundle/assembly choices. Children are\n not top-level cart lines; they ship, and are removed, with their parent.\n \"\"\"\n compositions: [CartItemComposition!]!\n\n \"\"\"\n The cart-wide delivery options this item is eligible for: the same ShippingOption\n entities Shipping.options lists, carrying the shared-pool price, not a per-item\n quote. Excludes pickup options; delivery channel only.\n \"\"\"\n shippingOptions: [ShippingOption!]!\n\n \"\"\"\n This item's own currently selected delivery option, or null when no selection\n is persisted or the persisted selection is a pickup option.\n \"\"\"\n selectedShippingOption: ItemShippingOption\n}\n\n\"\"\"\nOne customization group applied to a cart line, keyed by the upstream\nassembly id. Entries are the shopper's submitted key/value pairs.\n\"\"\"\ntype CartItemCustomization {\n \"\"\"Upstream assembly identifier (e.g. \"Engraving\", \"Optional features\").\"\"\"\n id: String!\n\n \"\"\"\n Submitted values, one entry per input field. File uploads carry the file URL\n as the value.\n \"\"\"\n entries: [CartItemCustomizationEntry!]!\n}\n\n\"\"\"A single submitted customization field.\"\"\"\ntype CartItemCustomizationEntry\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Field name as defined by the assembly (e.g. \"Text\").\"\"\"\n name: String!\n\n \"\"\"Submitted value, stringified. File uploads carry the file URL.\"\"\"\n value: String!\n}\n\n\"\"\"\nA child product nested under a cart line by a bundle/assembly choice. Slim by\ndesign: children are not independently addressable cart lines. May carry its\nown children (nested assemblies).\n\"\"\"\ntype CartItemComposition {\n \"\"\"\n Identifier for this child line, scoped to the cart's order form or to the\n order's group (same opaque encoding as CartItem.id). Cache key only; not\n independently mutable.\n \"\"\"\n id: ID!\n\n \"\"\"Display name as recorded on the order line.\"\"\"\n name: String!\n\n \"\"\"Quantity of this child in the composition.\"\"\"\n quantity: Int!\n\n \"\"\"Unit selling price of the child.\"\"\"\n price: Money!\n\n \"\"\"\n The child's own availability. The parent's variant.availability already\n reflects the worst state across the whole composition.\n \"\"\"\n availability: CartItemAvailability!\n\n \"\"\"\n The assembly group that added this child (upstream parentAssemblyBinding,\n e.g. \"Material Product_Material\").\n \"\"\"\n assemblyId: String!\n\n \"\"\"This child's own total, excluding its nested children.\"\"\"\n ownTotal: Money!\n\n \"\"\"This child's total including its nested children, recursively.\"\"\"\n total: Money!\n\n \"\"\"\n Form-based customizations applied to this child. A composition child is\n itself an order-form line and can carry its own input assemblies. Empty\n when it has none.\n \"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"Nested composition children of this child. Empty when it has none.\"\"\"\n compositions: [CartItemComposition!]!\n}\n\n\"\"\"\nA single discount applied to a cart line, broken out from that line's price tags.\nSourced from items[].priceTags filtered to featured promotions carrying a currency\namount; the aggregate discount total stays on the Cart \"Discounts\" totalizer.\n\"\"\"\ntype CartItemDiscount {\n \"\"\"\n Human-readable label resolved from the matched promotion (e.g. \"Black Friday\").\n Falls back to the price tag identifier when the promotion has no name.\n \"\"\"\n name: String!\n\n \"\"\"\n Amount taken off by this discount, as a positive monetary value. The minus\n sign is presentational and applied by the UI.\n \"\"\"\n value: Money!\n\n \"\"\"\n Always false. A price tag expressing a percentage carries a rate rather than a\n currency amount, so it has no value this type can report and is excluded from\n the list. Retained for compatibility; branching on it gains nothing.\n \"\"\"\n isPercentual: Boolean!\n}\n\n\"\"\"\nStock availability status for a cart line. Mapped from the upstream\norder-form availability strings; UNKNOWN absorbs values we haven't classified.\n\"\"\"\nenum CartItemAvailability {\n \"\"\"In stock and shippable.\"\"\"\n AVAILABLE\n\n \"\"\"Known to be out of stock.\"\"\"\n OUT_OF_STOCK\n\n \"\"\"\n Other known-bad states (cannot deliver, fulfillment unavailable, etc.).\n \"\"\"\n UNAVAILABLE\n\n \"\"\"Upstream returned a state we don't recognize yet.\"\"\"\n UNKNOWN\n}\n\n\"\"\"\nCart-line snapshot of a Variant. Value object: holds the line-level facts\nrecorded at add-to-cart time. Does not implement Node; refetch the live\ncatalog Variant via Query.node(variantId) when needed.\n\"\"\"\ntype CartVariant {\n \"\"\"\n Relay Node ID of the catalog Variant this line refers to. Use it with\n Query.node to refetch the live Variant.\n \"\"\"\n variantId: ID!\n\n \"\"\"Stock-keeping unit code as recorded on the order line.\"\"\"\n sku: String!\n\n \"\"\"\n Display name as recorded on the order line (e.g. \"Classic T-Shirt - Red / M\").\n \"\"\"\n name: String!\n\n \"\"\"\n Single image captured at add-to-cart time. Null when no image URL was recorded.\n \"\"\"\n image: Image\n\n \"\"\"\n International Article Number (barcode). May be empty for items without one.\n \"\"\"\n ean: String\n\n \"\"\"Merchant SKU reference code.\"\"\"\n referenceId: String\n\n \"\"\"Availability classification of this line.\"\"\"\n availability: CartItemAvailability!\n\n \"\"\"Unit of sale (e.g. \"un\", \"kg\").\"\"\"\n measurementUnit: String!\n\n \"\"\"Multiplier for the measurement unit.\"\"\"\n unitMultiplier: Float!\n\n \"\"\"Seller fulfilling this line.\"\"\"\n seller: CartSellerRef!\n\n \"\"\"\n Variations selected on this cart line (e.g. Cor: Vermelho, Tamanho: M). [] when the SKU has\n no variations, never null. Resolved server-side from catalog data (ADR-00012); use this field\n instead of a Query.node(variantId) refetch to read a line's selected options.\n \"\"\"\n selectedOptions: [SelectedOption!]!\n}\n\n\"\"\"\nCart-line snapshot of a Product. Value object: holds the line-level facts\nrecorded at add-to-cart time. Does not implement Node; refetch the live\ncatalog Product via Query.node(productId) when needed.\n\"\"\"\ntype CartProduct {\n \"\"\"\n Relay Node ID of the catalog Product. Use it with Query.node to refetch\n the live Product.\n \"\"\"\n productId: ID!\n\n \"\"\"Product title as recorded on the order line.\"\"\"\n title: String!\n\n \"\"\"Product detail URL as recorded on the order line.\"\"\"\n detailUrl: String!\n\n \"\"\"Categories root-to-leaf as recorded on the order line.\"\"\"\n categories: [CartCategoryRef!]!\n\n \"\"\"\n Brand reference as recorded on the order line. Null when the product has no brand.\n \"\"\"\n brand: CartBrandRef\n}\n\n\"\"\"\nLightweight reference to a Category captured on a cart line. Carries enough\nidentity to deep-link back to the live Category via Query.node.\n\"\"\"\ntype CartCategoryRef {\n \"\"\"Relay Node ID of the catalog Category.\"\"\"\n categoryId: ID!\n\n \"\"\"Category name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"Lightweight reference to a Brand captured on a cart line.\"\"\"\ntype CartBrandRef {\n \"\"\"Relay Node ID of the catalog Brand.\"\"\"\n brandId: ID!\n\n \"\"\"Brand name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"Lightweight reference to a Seller captured on a cart line.\"\"\"\ntype CartSellerRef {\n \"\"\"Relay Node ID of the catalog Seller.\"\"\"\n sellerId: ID!\n\n \"\"\"Seller display name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"\nAn aggregated total section in the cart (e.g. Items, Shipping, Discounts).\n\"\"\"\ntype CartTotalizer {\n \"\"\"Totalizer key (e.g. \"Items\", \"Shipping\", \"Discounts\").\"\"\"\n id: String!\n\n \"\"\"Human-readable label.\"\"\"\n name: String!\n\n \"\"\"Totalizer value.\"\"\"\n value: Money!\n}\n\n\"\"\"\nA server message attached to the cart (promotions applied, warnings, etc.).\n\"\"\"\ntype CartMessage {\n \"\"\"Message code identifier.\"\"\"\n code: String\n\n \"\"\"Human-readable message text.\"\"\"\n text: String!\n\n \"\"\"Message severity (e.g. \"info\", \"warning\", \"error\").\"\"\"\n status: String!\n}\n\n\"\"\"Input for adding an item to a cart.\"\"\"\ninput CartItemAddInput {\n \"\"\"The variant's global Node ID to add.\"\"\"\n variantId: ID!\n\n \"\"\"Quantity to add. Defaults to 1.\"\"\"\n quantity: Int = 1\n\n \"\"\"\n The seller's global Node ID. Defaults to the first-party seller (Seller:1).\n \"\"\"\n seller: ID = \"U2VsbGVyOjE=\"\n}\n\n\"\"\"Input for removing an item from a cart.\"\"\"\ninput CartItemRemoveInput {\n \"\"\"The variant's global Node ID to remove.\"\"\"\n variantId: ID!\n}\n\n\"\"\"Input for removing multiple items from a cart in one call.\"\"\"\ninput CartItemsRemoveInput {\n \"\"\"The variants' global Node IDs to remove. Duplicates are collapsed.\"\"\"\n variantIds: [ID!]!\n}\n\n\"\"\"Input for increasing the quantity of a cart item.\"\"\"\ninput CartItemQuantityIncreaseInput {\n \"\"\"The variant's global Node ID whose quantity to increase.\"\"\"\n variantId: ID!\n\n \"\"\"Amount to add to the current quantity. Defaults to 1.\"\"\"\n quantityToAdd: Int = 1\n}\n\n\"\"\"Input for decreasing the quantity of a cart item.\"\"\"\ninput CartItemQuantityDecreaseInput {\n \"\"\"The variant's global Node ID whose quantity to decrease.\"\"\"\n variantId: ID!\n\n \"\"\"Amount to subtract from the current quantity. Defaults to 1.\"\"\"\n quantityToRemove: Int = 1\n}\n\n\"\"\"Input for applying a coupon code to the cart.\"\"\"\ninput CartCouponApplyInput {\n \"\"\"The coupon code to apply, sent verbatim.\"\"\"\n code: String!\n}\n\n\"\"\"Input for removing a coupon code from the cart.\"\"\"\ninput CartCouponRemoveInput {\n \"\"\"The coupon code to remove from the applied set.\"\"\"\n code: String!\n}\n\n\"\"\"Error codes for cart item add operations.\"\"\"\nenum CartItemAddErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n\n \"\"\"The provided seller ID is not a valid Seller Node ID.\"\"\"\n INVALID_SELLER_ID\n}\n\n\"\"\"Error codes for cart item remove operations.\"\"\"\nenum CartItemRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The specified variant was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n}\n\n\"\"\"Error codes for cart items batch remove operations.\"\"\"\nenum CartItemsRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"None of the specified variants were found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"A provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n\n \"\"\"The input contained no variant IDs.\"\"\"\n NO_VARIANT_IDS_PROVIDED\n\n \"\"\"The upstream checkout API returned an unusable response.\"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"Error codes for cart item quantity increase operations.\"\"\"\nenum CartItemQuantityIncreaseErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The specified variant was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n}\n\n\"\"\"Error codes for cart item quantity decrease operations.\"\"\"\nenum CartItemQuantityDecreaseErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The specified variant was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n}\n\n\"\"\"A domain error returned from a cart item add mutation.\"\"\"\ntype CartItemAddError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemAddErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item remove mutation.\"\"\"\ntype CartItemRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart items batch remove mutation.\"\"\"\ntype CartItemsRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemsRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item quantity increase mutation.\"\"\"\ntype CartItemQuantityIncreaseError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemQuantityIncreaseErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item quantity decrease mutation.\"\"\"\ntype CartItemQuantityDecreaseError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemQuantityDecreaseErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartItemAdd mutation.\"\"\"\ntype CartItemAddPayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemAddError!]!\n}\n\n\"\"\"Payload returned by the cartItemRemove mutation.\"\"\"\ntype CartItemRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemRemoveError!]!\n}\n\n\"\"\"Payload returned by the cartItemsRemove mutation.\"\"\"\ntype CartItemsRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemsRemoveError!]!\n}\n\n\"\"\"Payload returned by the cartItemQuantityIncrease mutation.\"\"\"\ntype CartItemQuantityIncreasePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemQuantityIncreaseError!]!\n}\n\n\"\"\"Payload returned by the cartItemQuantityDecrease mutation.\"\"\"\ntype CartItemQuantityDecreasePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemQuantityDecreaseError!]!\n}\n\n\"\"\"Error codes for cart coupon apply operations.\"\"\"\nenum CartCouponApplyErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The coupon code is empty, unknown, or not accepted by this cart.\"\"\"\n COUPON_NOT_FOUND\n\n \"\"\"The coupon code has expired.\"\"\"\n COUPON_EXPIRED\n}\n\n\"\"\"Error codes for cart coupon remove operations.\"\"\"\nenum CartCouponRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n A surviving coupon was rejected by the cart after the removal (unknown or not accepted).\n \"\"\"\n COUPON_NOT_FOUND\n\n \"\"\"A surviving coupon has expired.\"\"\"\n COUPON_EXPIRED\n}\n\n\"\"\"A domain error returned from a cart coupon apply mutation.\"\"\"\ntype CartCouponApplyError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartCouponApplyErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart coupon remove mutation.\"\"\"\ntype CartCouponRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartCouponRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartCouponApply mutation.\"\"\"\ntype CartCouponApplyPayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartCouponApplyError!]!\n}\n\n\"\"\"Payload returned by the cartCouponRemove mutation.\"\"\"\ntype CartCouponRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartCouponRemoveError!]!\n}\n\n\"\"\"Error codes for cart validation operations.\"\"\"\nenum CartValidateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n The upstream checkout API could not be reached or returned an unusable response.\n \"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"A domain error returned from a cart validate mutation.\"\"\"\ntype CartValidateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartValidateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartValidate mutation.\"\"\"\ntype CartValidatePayload {\n \"\"\"The re-checked cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartValidateError!]!\n}\n\n\"\"\"The delivery channel for a shipping option.\"\"\"\nenum DeliveryChannel {\n \"\"\"Home delivery.\"\"\"\n DELIVERY\n\n \"\"\"Pickup in store or pickup point.\"\"\"\n PICKUP\n\n \"\"\"Unrecognised delivery channel returned by the fulfillment provider.\"\"\"\n UNKNOWN\n}\n\n\"\"\"The unit of a shipping time estimate.\"\"\"\nenum ShippingEstimateUnit {\n \"\"\"Calendar days (e.g. \"7d\").\"\"\"\n DAYS\n\n \"\"\"Business days, excluding weekends and holidays (e.g. \"5bd\").\"\"\"\n BUSINESS_DAYS\n\n \"\"\"Hours (e.g. \"7h\").\"\"\"\n HOURS\n\n \"\"\"Minutes (e.g. \"119m\").\"\"\"\n MINUTES\n}\n\n\"\"\"\nParsed shipping time estimate (e.g. \"5bd\" → { value: 5, unit: BUSINESS_DAYS }).\n\"\"\"\ntype ShippingEstimate {\n \"\"\"Numeric quantity of the estimate.\"\"\"\n value: Int!\n\n \"\"\"Time unit for the estimate.\"\"\"\n unit: ShippingEstimateUnit!\n}\n\n\"\"\"\nOne cart item's current selection. Its price and estimate are Checkout's real values for\nthis item; option carries the shared name and channel. All values are a live snapshot:\nanother item joining or leaving the same SLA can change them.\n\"\"\"\ntype ItemShippingOption {\n \"\"\"\n Opaque delivery option identifier, encoded to distinguish per-item options\n from cart-wide options so the Apollo cache never conflates them.\n \"\"\"\n id: ID!\n\n \"\"\"The cart-wide shipping option this selection belongs to.\"\"\"\n option: ShippingOption!\n\n \"\"\"Estimated shipping time for this item.\"\"\"\n shippingEstimate: ShippingEstimate!\n\n \"\"\"Shipping cost for this item. Zero when free shipping applies.\"\"\"\n price: Money!\n\n \"\"\"Shipping list price for this item before any promotions.\"\"\"\n listPrice: Money!\n}\n\n\"\"\"\nA shipping option with at least one cart item currently selected on it. Its price and\nshippingEstimateList cover only those items, recomputed on every request.\n\"\"\"\ntype SelectedShippingOption {\n \"\"\"The cart-wide shipping option these items selected.\"\"\"\n option: ShippingOption!\n\n \"\"\"\n Cart items currently selected on this option (not every eligible item).\n \"\"\"\n items: [CartItem!]!\n\n \"\"\"Sum of items[].selectedShippingOption.price.\"\"\"\n price: Money!\n\n \"\"\"Sum of items[].selectedShippingOption.listPrice.\"\"\"\n listPrice: Money!\n\n \"\"\"\n items[].selectedShippingOption.shippingEstimate, one entry per item, unreduced and\n uncompared.\n \"\"\"\n shippingEstimateList: [ShippingEstimate!]!\n}\n\n\"\"\"A shipping option available for a given item and destination.\"\"\"\ntype ShippingOption {\n \"\"\"Opaque delivery option identifier.\"\"\"\n id: ID!\n\n \"\"\"\n Human-readable option name (e.g. \"Standard Delivery\"). Derived from a Checkout simulation, which\n sends no `Accept-Language` and keys its SKU cache without a locale, so this text is NOT localized:\n it may read in the account's default culture on a non-default binding.\n \"\"\"\n name: String!\n\n \"\"\"Delivery channel: home delivery or pickup.\"\"\"\n channel: DeliveryChannel!\n\n \"\"\"\n Estimated shipping time, sampled from one eligible item. Delivery estimates can genuinely vary\n per item under the same option; use shippingEstimateList for every item's own value.\n \"\"\"\n shippingEstimate: ShippingEstimate! @deprecated(reason: \"Sampled from one item and can misrepresent the others. Use shippingEstimateList.\") @deprecationDate(deletionDate: \"2027-03-31\")\n\n \"\"\"\n Every eligible item's own shippingEstimate, one entry per item, unreduced and uncompared.\n \"\"\"\n shippingEstimateList: [ShippingEstimate!]!\n\n \"\"\"\n Shipping cost for every item this option covers. Zero when free shipping applies. A live\n estimate of the shared per-SLA pool, not a guaranteed quote.\n \"\"\"\n price: Money!\n\n \"\"\"Shipping list price before any promotions, summed like price.\"\"\"\n listPrice: Money!\n\n \"\"\"Cart items for which this option is currently available.\"\"\"\n items: [CartItem!]!\n}\n\n\"\"\"Error codes for shipping simulation operations.\"\"\"\nenum ShippingSimulateErrorCode {\n \"\"\"The postal code was not found or rejected by the fulfillment provider.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n\n \"\"\"The provided seller ID is not a valid Seller Node ID.\"\"\"\n INVALID_SELLER_ID\n\n \"\"\"\n No active cart in context: the cartShippingSimulation query requires an x-order-form-id and never mints a cart.\n \"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from the shippingSimulation query.\"\"\"\ntype ShippingSimulateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingSimulateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingSimulation query.\"\"\"\ntype ShippingSimulationPayload {\n \"\"\"\n Available shipping options for the given item and destination.\n Null when userErrors is non-empty.\n \"\"\"\n shippingOptions: [ShippingOption!]\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingSimulateError!]!\n}\n\n\"\"\"Input for simulating shipping options for a single variant on a PDP.\"\"\"\ninput ShippingSimulateInput {\n \"\"\"Postal code of the delivery destination.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n\n \"\"\"The variant's global Node ID to simulate shipping for.\"\"\"\n variantId: ID!\n\n \"\"\"Quantity of the variant. Must be at least 1.\"\"\"\n quantity: Int!\n\n \"\"\"The seller's global Node ID responsible for the variant.\"\"\"\n seller: ID!\n}\n\n\"\"\"\nInput for simulating shipping for the whole active cart. Carries the\ndestination only; items are sourced from the cart in the x-order-form-id\ncontext, so there is no variant, quantity, or seller.\n\"\"\"\ninput CartShippingSimulateInput {\n \"\"\"Postal code of the delivery destination.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n}\n\n\"\"\"Payload returned by the cartShippingSimulation query.\"\"\"\ntype CartShippingSimulationPayload {\n \"\"\"\n Shipping options available for every item in the cart, prices summed across\n items. Empty when the cart is empty or no option is common to all items.\n Null when userErrors is non-empty.\n \"\"\"\n shippingOptions: [ShippingOption!]\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingSimulateError!]!\n}\n\n\"\"\"\nThe shopper's profile, projected from the order form's clientProfileData.\nA sibling of Cart, not nested under it. Individual (B2C) only.\n\"\"\"\ntype ClientProfile implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Contact email as recorded on the order form. Null when no profile is set.\n \"\"\"\n email: String\n\n \"\"\"Given name. Null when unset.\"\"\"\n firstName: String\n\n \"\"\"Family name. Null when unset.\"\"\"\n lastName: String\n\n \"\"\"Contact phone in the order form's stored format. Null when unset.\"\"\"\n phone: String\n\n \"\"\"Tax document (CPF for Individual shoppers). Null when unset.\"\"\"\n document: String\n}\n\n\"\"\"\nThe shopper's preference opt-ins, projected from the order form's\nclientPreferencesData. A sibling of Cart, not nested under it.\n\"\"\"\ntype ClientPreferences implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"Newsletter opt-in. Null when the shopper has not chosen.\"\"\"\n optinNewsLetter: Boolean\n\n \"\"\"Save-personal-data opt-in. Null when the shopper has not chosen.\"\"\"\n savePersonalData: Boolean\n}\n\n\"\"\"\nPartial profile update. Provide only the fields to write; omitted fields are\nleft unchanged.\n\"\"\"\ninput ClientProfileUpdateInput {\n \"\"\"Contact email to write. Omit to leave unchanged.\"\"\"\n email: String\n\n \"\"\"Given name to write. Omit to leave unchanged.\"\"\"\n firstName: String\n\n \"\"\"Family name to write. Omit to leave unchanged.\"\"\"\n lastName: String\n\n \"\"\"Contact phone to write. Omit to leave unchanged.\"\"\"\n phone: String\n\n \"\"\"Tax document to write. Omit to leave unchanged.\"\"\"\n document: String\n}\n\n\"\"\"\nPartial preferences update. Provide only the flags to write; omitted flags are\nleft unchanged.\n\"\"\"\ninput ClientPreferencesUpdateInput {\n \"\"\"Newsletter opt-in to write. Omit to leave unchanged.\"\"\"\n optinNewsLetter: Boolean\n\n \"\"\"Save-personal-data opt-in to write. Omit to leave unchanged.\"\"\"\n savePersonalData: Boolean\n}\n\n\"\"\"Error codes for client profile update operations.\"\"\"\nenum ClientProfileUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The input contained no profile fields to write.\"\"\"\n NO_PROFILE_FIELD_PROVIDED\n}\n\n\"\"\"Error codes for client preferences update operations.\"\"\"\nenum ClientPreferencesUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The input contained no preferences to write.\"\"\"\n NO_PREFERENCE_PROVIDED\n}\n\n\"\"\"A domain error returned from a client profile update mutation.\"\"\"\ntype ClientProfileUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ClientProfileUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a client preferences update mutation.\"\"\"\ntype ClientPreferencesUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ClientPreferencesUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the clientProfileUpdate mutation.\"\"\"\ntype ClientProfileUpdatePayload {\n \"\"\"The updated profile, or null if a context/validation error occurred.\"\"\"\n clientProfile: ClientProfile\n\n \"\"\"\n The session after the write, reflecting the now-current isIdentified derived from\n clientProfileData.email. Null alongside clientProfile on a context/validation error.\n \"\"\"\n session: Session\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ClientProfileUpdateError!]!\n}\n\n\"\"\"Payload returned by the clientPreferencesUpdate mutation.\"\"\"\ntype ClientPreferencesUpdatePayload {\n \"\"\"\n The updated preferences, or null if a context/validation error occurred.\n \"\"\"\n clientPreferences: ClientPreferences\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ClientPreferencesUpdateError!]!\n}\n\n\"\"\"\nThe delivery address, saved addresses, and shipping options for the cart.\nA read-only sibling of Cart, projected from the same order form fetch.\nNull fields project explicitly (never undefined), allowing partial queries.\n\"\"\"\ntype Shipping implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"The delivery address on the cart. Null until the shopper provides one.\"\"\"\n address: Address\n\n \"\"\"The logged-in shopper's saved addresses. Empty for anonymous shoppers.\"\"\"\n savedAddresses: [Address!]!\n\n \"\"\"\n Delivery-channel shipping options any cart item is eligible for at the current address, prices summed across the eligible items.\n \"\"\"\n options: [ShippingOption!]!\n\n \"\"\"\n Delivery-channel options with at least one item currently selected on them, one entry per option. Pickup selections are excluded.\n \"\"\"\n selectedOptions: [SelectedShippingOption!]!\n\n \"\"\"\n The selected option, when one selection applies to the whole cart. Null when items disagree or the persisted selection is a pickup-channel SLA.\n \"\"\"\n selectedOptionId: ID @deprecated(reason: \"Cannot express split shipping. Use Shipping.selectedOptions.\") @deprecationDate(deletionDate: \"2027-03-31\")\n}\n\n\"\"\"A delivery address or saved-address reference.\"\"\"\ntype Address\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Saved-address reference. Null for addresses entered in this session.\"\"\"\n id: ID\n\n \"\"\"Recipient name for this address.\"\"\"\n recipientName: String\n\n \"\"\"\n Postal code. Required when persisting an address via the mutation inputs, but nullable here:\n pickup/search/disposable addresses and legacy saved addresses can come back without one.\n \"\"\"\n postalCode: String\n\n \"\"\"\n ISO 3166-1 alpha-3 country code. Required when persisting an address via the mutation inputs,\n but nullable here for the same reason as postalCode.\n \"\"\"\n country: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n}\n\n\"\"\"\nThe shopper's session and authentication state for the active order form.\nA read-only sibling of Cart, projected from the same order form fetch. Carries\nno profile data — profile fields live on ClientProfile.\n\"\"\"\ntype Session implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Whether the shopper holds an authenticated VTEX session. A guest is `false` — a normal state, never an error.\n \"\"\"\n loggedIn: Boolean!\n\n \"\"\"\n Whether the shopper may edit their identity data. Lets Controls render editable vs. identified-but-masked fields.\n \"\"\"\n canEditData: Boolean!\n\n \"\"\"\n Server-computed: whether a profile is attached to the order form (clientProfileData.email is present and non-empty). Identification is distinct from authentication.\n \"\"\"\n isIdentified: Boolean!\n}\n\n\"\"\"Input for updating the delivery address on the cart.\"\"\"\ninput ShippingAddressUpdateInput {\n \"\"\"\n Saved address reference. Present when the shopper picked (and possibly edited) a saved address.\n \"\"\"\n savedAddressId: ID\n\n \"\"\"Recipient name for the delivery address.\"\"\"\n recipientName: String!\n\n \"\"\"Postal code for the delivery address.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n}\n\n\"\"\"Error codes for shipping address update operations.\"\"\"\nenum ShippingAddressUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The recipient name is blank.\"\"\"\n MISSING_RECIPIENT_NAME\n\n \"\"\"The provided saved address ID does not match any available addresses.\"\"\"\n INVALID_SAVED_ADDRESS_ID\n\n \"\"\"The postal code is invalid or not found.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The address is invalid.\"\"\"\n INVALID_ADDRESS\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from a shipping address update mutation.\"\"\"\ntype ShippingAddressUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingAddressUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingAddressUpdate mutation.\"\"\"\ntype ShippingAddressUpdatePayload {\n \"\"\"The updated shipping state, or null if errors occurred.\"\"\"\n shipping: Shipping\n\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingAddressUpdateError!]!\n}\n\n\"\"\"Input for selecting a shipping option for the whole cart.\"\"\"\ninput ShippingOptionSelectInput {\n \"\"\"\n The shipping option ID to select. Must be offered as a delivery option by at least one item in\n the cart; items that don't offer it fall back to the Checkout API's own choice.\n \"\"\"\n optionId: ID!\n}\n\n\"\"\"Error codes for shipping option select operations.\"\"\"\nenum ShippingOptionSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n The option id is not offered as a delivery option by any item in the cart (unknown id or\n pickup). Returned without calling Checkout. An option only some items offer is not an error.\n \"\"\"\n OPTION_UNAVAILABLE\n\n \"\"\"No delivery address is persisted on the cart.\"\"\"\n MISSING_SHIPPING_ADDRESS\n}\n\n\"\"\"A domain error returned from a shipping option select mutation.\"\"\"\ntype ShippingOptionSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingOptionSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingOptionSelect mutation.\"\"\"\ntype ShippingOptionSelectPayload {\n \"\"\"The updated shipping state, or null if errors occurred.\"\"\"\n shipping: Shipping\n\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingOptionSelectError!]!\n}\n\n\"\"\"\nThe cart's payment state: available methods with server-driven validator config,\nthe current selection, installment options, and the shopper's saved cards. A\nread-only sibling of Cart, Shipping, and Session, projected from the same order\nform fetch. Method-agnostic: projects whatever payment systems VTEX returns, not\nonly credit card. Never carries a full card number or CVV.\n\"\"\"\ntype Payment implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Payment methods available on this cart. Empty when none are configured.\n \"\"\"\n methods: [PaymentMethod!]!\n\n \"\"\"\n The currently selected method's id (PaymentMethod.id), or null when unselected.\n \"\"\"\n selectedMethodId: String\n\n \"\"\"\n Saved-card account reference for the current selection, when a saved card is selected. Null otherwise.\n \"\"\"\n selectedAccountId: String\n\n \"\"\"\n The currently selected installment tier, resolved from the selection against installmentOptions. Null when unselected or unresolved.\n \"\"\"\n selectedInstallment: PaymentInstallment\n\n \"\"\"\n Installment plans available, grouped by method (and BIN, for card methods). Serves both a new card (matched by BIN) and a saved card (matched by its stored method).\n \"\"\"\n installmentOptions: [PaymentInstallmentOption!]!\n\n \"\"\"\n The shopper's saved cards. Empty for anonymous shoppers or when none are saved.\n \"\"\"\n savedCards: [SavedCard!]!\n\n \"\"\"\n The BIN persisted on the current selection, or null when the selection carries\n none (a non-card method, or a saved card selected without one). Echoes back what\n paymentMethodSelect wrote, which is what a client needs in order to know whether\n its own locally-detected BIN has actually reached the order form: installment\n options are matched against THIS value server-side, never against a client draft.\n Not sensitive — a BIN identifies an issuer range, never a card.\n \"\"\"\n selectedBin: String\n\n \"\"\"\n The store's country as an ISO 3166-1 alpha-3 code (e.g. \"BRA\"), read from the order form's\n store preferences. Null when the order form carries none or the value is not three capital\n letters. It is not limited to the countries in `countries`: a store in another country gets its\n own code and no table entry, and the API never substitutes another country's entry.\n \"\"\"\n storeCountryCode: String\n\n \"\"\"\n The countries the payment data supports and, per country, the cardholder document types it\n accepts. A fixed table, identical in every response and independent of the cart. Order: USA,\n BRA, CAN, MEX. Select the entry whose countryCode equals storeCountryCode.\n \"\"\"\n countries: [PaymentCountry!]!\n}\n\n\"\"\"\nA country the payment data supports, with the cardholder document types it accepts. A\nnon-normalized value object read directly off Payment.countries.\n\"\"\"\ntype PaymentCountry {\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n countryCode: String!\n\n \"\"\"\n The document types a cardholder of this country can give. Masks and validation rules are not\n carried: the client keys them on the document type.\n \"\"\"\n documents: [PaymentCountryDocument!]!\n}\n\n\"\"\"\nOne cardholder document type of a PaymentCountry, with whether it is shown and whether it is\nrequired. Values follow @vtex/country-forms 1.2.0 for an individual person.\n\"\"\"\ntype PaymentCountryDocument {\n \"\"\"Document type id, lowercase (e.g. \"cpf\", \"ssn\", \"sin\", \"rfc\").\"\"\"\n type: String!\n\n \"\"\"Whether the document field should be shown for this country.\"\"\"\n displayable: Boolean!\n\n \"\"\"Whether the document is required for this country.\"\"\"\n required: Boolean!\n}\n\n\"\"\"\nA payment method available on the cart, with the server-driven validator config\nthat determines which card-form fields render, their masks, and whether they\nare required. A non-normalized value object (ADR-0012); read directly off\nPayment.methods.\n\"\"\"\ntype PaymentMethod {\n \"\"\"Payment-system identifier (VTEX paymentSystem stringId).\"\"\"\n id: String!\n\n \"\"\"\n Display name (e.g. \"Visa\", \"Mastercard\", \"Cash\"). Doubles as the network name for card methods.\n \"\"\"\n name: String!\n\n \"\"\"\n Payment-system group (e.g. \"creditCardPaymentGroup\", \"debitCardPaymentGroup\"). Store-configured; kept as a string, not an enum.\n \"\"\"\n groupName: String!\n\n \"\"\"\n Whether VTEX flags this payment system as requiring cardholder authentication\n (for example 3-D Secure). Projected verbatim from the order form's payment-system\n configuration: it describes how the store configured the system, not a guarantee\n about any particular transaction. Null when the order form carries no value for\n this system — which is not the same as false. Detection only: this API implements\n no authentication challenge.\n \"\"\"\n requiresAuthentication: Boolean\n\n \"\"\"\n Validator configuration driving field presence, masks, and requiredness.\n \"\"\"\n validator: PaymentMethodValidator!\n}\n\n\"\"\"\nPer-method validator configuration. Server-driven so no component hardcodes\nfield presence, masks, or requiredness.\n\"\"\"\ntype PaymentMethodValidator {\n \"\"\"\n Mask pattern for the card number input. Null when the method carries no mask.\n \"\"\"\n numberMask: String\n\n \"\"\"\n Regex for real-time network detection against the typed BIN. Null when unset.\n \"\"\"\n numberRegex: String\n\n \"\"\"\n Mask pattern for the security-code (CVV) input. Null when unused or unmasked.\n \"\"\"\n cvvMask: String\n\n \"\"\"Regex validating the security-code (CVV) input. Null when unused.\"\"\"\n cvvRegex: String\n\n \"\"\"Whether this method requires the security code (CVV).\"\"\"\n cvvRequired: Boolean!\n\n \"\"\"Whether this method requires an expiration date.\"\"\"\n expirationRequired: Boolean!\n\n \"\"\"Whether this method requires the cardholder name.\"\"\"\n holderNameRequired: Boolean!\n\n \"\"\"Whether this method requires a billing address.\"\"\"\n billingAddressRequired: Boolean!\n\n \"\"\"\n Whether a cardholder document field is displayable for this method. Distinct from documentRequired.\n \"\"\"\n documentDisplayable: Boolean! @deprecated(reason: \"The document type, mask and country come from Payment.countries. Storefront clients still read this flag as the merchant's per-method gate until a per-method replacement exists.\") @deprecationDate(deletionDate: \"2027-09-30\")\n\n \"\"\"\n Whether the displayed cardholder document is required. Distinct from documentDisplayable — a document can be shown without being mandatory.\n \"\"\"\n documentRequired: Boolean! @deprecated(reason: \"The document type, mask and country come from Payment.countries. Storefront clients still read this flag as the merchant's per-method gate until a per-method replacement exists.\") @deprecationDate(deletionDate: \"2027-09-30\")\n}\n\n\"\"\"\nOne installment tier: a specific installment count at a given per-installment\nvalue and total. Keyed by count within its parent PaymentInstallmentOption — a\nnon-normalized value object (ADR-0012).\n\"\"\"\ntype PaymentInstallment {\n \"\"\"Number of installments (1 = single payment, no interest).\"\"\"\n count: Int!\n\n \"\"\"Amount per installment.\"\"\"\n value: Money!\n\n \"\"\"Total amount across all installments, including any interest.\"\"\"\n total: Money!\n\n \"\"\"\n Interest rate in hundredths of a percent, exactly as the VTEX order form carries it (100 = 1%; 0 = interest-free).\n \"\"\"\n interestRate: Float!\n}\n\n\"\"\"\nInstallment tiers available for one payment method (and, for card methods, one\nBIN range). A non-normalized value object (ADR-0012): read straight off\nPayment.installmentOptions.\n\"\"\"\ntype PaymentInstallmentOption\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"The payment method this option applies to (PaymentMethod.id).\"\"\"\n methodId: String!\n\n \"\"\"\n The BIN range this option applies to, when method-and-BIN-specific. Null when the option applies by method alone.\n \"\"\"\n bin: String\n\n \"\"\"Base order value this option was quoted against.\"\"\"\n baseValue: Money!\n\n \"\"\"\n Installment tiers, with a guaranteed `count: 1` entry prepended when VTEX\n omits one. A tier that upstream already supplies is passed through untouched\n (including its position and interest rate).\n \"\"\"\n installments: [PaymentInstallment!]!\n}\n\n\"\"\"\nOne of the shopper's saved cards. Never carries a full card number or CVV. A\nnormalized, id-bearing value object (ADR-0012): id is a stable opaque cache\nkey, not a Relay Node.\n\"\"\"\ntype SavedCard\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Opaque, stable cache key. Not a Relay Node ID; SavedCard is not registered in the cross-module Node registry.\n \"\"\"\n id: ID!\n\n \"\"\"\n The saved-card account reference. Pass this back on selection; never a full card number.\n \"\"\"\n accountId: String!\n\n \"\"\"\n The saved card's payment-system id (PaymentMethod.id), for cross-referencing validator config and installment options.\n \"\"\"\n methodId: String!\n\n \"\"\"Card network / issuer display name (e.g. \"Visa\").\"\"\"\n network: String!\n\n \"\"\"Last four digits of the card number.\"\"\"\n lastFourDigits: String!\n\n \"\"\"BIN of the saved card, for installment-option lookup by network.\"\"\"\n bin: String!\n\n \"\"\"Shopper-assigned custom label, when set.\"\"\"\n label: String\n\n \"\"\"\n Whether the card is expired. Expired cards are still returned; non-selectable is a UI concern downstream.\n \"\"\"\n expired: Boolean!\n\n \"\"\"\n Whether completing payment with this card requires the shopper to enter the CVV.\n \"\"\"\n cvvRequired: Boolean!\n}\n\n\"\"\"\nInput for selecting a payment method, optionally identifying a new card (by\nBIN) or a saved card (by account reference). A non-card method (e.g. Cash)\nomits both `bin` and `accountId`. When `accountId` is given, `bin` may also\nbe given to match the saved card against a BIN-specific installment option;\na `bin` that does not match the saved card's own BIN is rejected with\nMISMATCHED_BIN_FOR_SAVED_CARD.\n\"\"\"\ninput PaymentMethodSelectInput {\n \"\"\"The method to select (PaymentMethod.id).\"\"\"\n methodId: String!\n\n \"\"\"\n A newly-entered card's BIN, once detected. Omit for a saved card or a non-card method.\n \"\"\"\n bin: String\n\n \"\"\"\n A saved card's account reference (SavedCard.accountId). Omit for a new card or a non-card method.\n \"\"\"\n accountId: String\n}\n\n\"\"\"Error codes for the paymentMethodSelect mutation.\"\"\"\nenum PaymentMethodSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided methodId does not match any entry in Payment.methods.\"\"\"\n INVALID_METHOD_ID\n\n \"\"\"The provided accountId does not match any entry in Payment.savedCards.\"\"\"\n INVALID_SAVED_CARD_ACCOUNT_ID\n\n \"\"\"The bin does not match the BIN of the saved card named by accountId.\"\"\"\n MISMATCHED_BIN_FOR_SAVED_CARD\n\n \"\"\"\n The bin is not 1 to 8 numeric digits — a BIN identifies an issuer range, never a card number.\n \"\"\"\n INVALID_BIN_FORMAT\n\n \"\"\"\n Never returned. The input once allowed at most one of bin / accountId; both are\n now accepted so a saved card can be matched to an installment option by its own\n BIN. Retained per ADR-00010 (additive-only with a deprecation window).\n \"\"\"\n CONFLICTING_BIN_AND_ACCOUNT_ID @deprecated(reason: \"Never returned; bin and accountId may now be sent together.\") @deprecationDate(deletionDate: \"2027-08-06\")\n}\n\n\"\"\"A domain error returned from the paymentMethodSelect mutation.\"\"\"\ntype PaymentMethodSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentMethodSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentMethodSelect mutation.\"\"\"\ntype PaymentMethodSelectPayload {\n \"\"\"The updated payment state, or null if errors occurred.\"\"\"\n payment: Payment\n\n \"\"\"\n The current billing address, echoed for convenience. Null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentMethodSelectError!]!\n}\n\n\"\"\"\nInput for selecting an installment count for the currently-selected method.\n\"\"\"\ninput PaymentInstallmentSelectInput {\n \"\"\"Number of installments to select (1 = single payment, no interest).\"\"\"\n count: Int!\n}\n\n\"\"\"Error codes for the paymentInstallmentSelect mutation.\"\"\"\nenum PaymentInstallmentSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n No payment method has been selected yet (paymentMethodSelect was never called).\n \"\"\"\n MISSING_PAYMENT_METHOD_SELECTION\n\n \"\"\"\n The count does not match any tier in the resolvable installment option.\n \"\"\"\n INVALID_INSTALLMENT_COUNT\n}\n\n\"\"\"A domain error returned from the paymentInstallmentSelect mutation.\"\"\"\ntype PaymentInstallmentSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentInstallmentSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"\nPayload returned by the paymentInstallmentSelect mutation. Includes the\nrecomputed cart so the order total (with any interest) updates in the same\nround trip.\n\"\"\"\ntype PaymentInstallmentSelectPayload {\n \"\"\"The updated payment state, or null if errors occurred.\"\"\"\n payment: Payment\n\n \"\"\"\n The recomputed cart, or null if errors occurred. Carries the order total with any installment interest applied.\n \"\"\"\n cart: Cart\n\n \"\"\"\n The current billing address, echoed for convenience. Null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentInstallmentSelectError!]!\n}\n\n\"\"\"\nInput for setting the billing address. When sameAsDelivery is true, every\nother field is ignored and no upstream write happens (VTEX's own default:\nan absent invoiceData falls back to the delivery address).\n\"\"\"\ninput PaymentBillingAddressUpdateInput {\n \"\"\"\n When true, billing uses the delivery address; every field below is ignored.\n \"\"\"\n sameAsDelivery: Boolean!\n\n \"\"\"Address classification for the billing address.\"\"\"\n addressType: String\n\n \"\"\"\n Postal code for the billing address. Required when sameAsDelivery is false.\n \"\"\"\n postalCode: String\n\n \"\"\"\n ISO 3166-1 alpha-3 country code (e.g. \"BRA\"). Required when sameAsDelivery is false.\n \"\"\"\n country: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n\n \"\"\"\n A landmark reference. Sent upstream but not echoed back on billingAddress (Decision 11).\n \"\"\"\n reference: String\n}\n\n\"\"\"Error codes for the paymentBillingAddressUpdate mutation.\"\"\"\nenum PaymentBillingAddressUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"sameAsDelivery is false but postalCode or country was omitted.\"\"\"\n MISSING_BILLING_ADDRESS_FIELDS\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from the paymentBillingAddressUpdate mutation.\"\"\"\ntype PaymentBillingAddressUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentBillingAddressUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentBillingAddressUpdate mutation.\"\"\"\ntype PaymentBillingAddressUpdatePayload {\n \"\"\"\n The billing address just written, or null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"\n The updated payment state, or null if errors occurred, or when same-as-delivery is in effect, where no upstream write happens.\n \"\"\"\n payment: Payment\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentBillingAddressUpdateError!]!\n}\n\n\"\"\"\nError codes for the paymentStartTransaction mutation. Login-required VTEX\nbusiness codes (CHK0087, CHK003, ORD062) and generic infrastructure failures\nare never in this enum — per ADR-00007 they surface as top-level GraphQL\nerrors (UNAUTHORIZED / UPSTREAM_ERROR), not userErrors.\n\"\"\"\nenum PaymentStartTransactionErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n No payment method has been selected yet (paymentMethodSelect was never called).\n \"\"\"\n MISSING_PAYMENT_METHOD_SELECTION\n\n \"\"\"\n VTEX opened the transaction but named no merchant transaction on it, so\n neither the transaction id the send-payments POST addresses nor the merchant\n name its body carries exists. The transaction is open upstream but cannot be\n paid; the legacy checkout refuses the same state.\n \"\"\"\n INVALID_TRANSACTION_DATA\n}\n\n\"\"\"A domain error returned from the paymentStartTransaction mutation.\"\"\"\ntype PaymentStartTransactionError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentStartTransactionErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"\nPayload returned by paymentStartTransaction: everything the browser needs to\nrun the direct-to-gateway send-payments call (out of scope here) and the\nlater gatewayCallback. The transaction cookies VTEX issues are set on the\nHTTP response (Set-Cookie), not exposed as a field.\n\"\"\"\ntype PaymentStartTransactionPayload {\n \"\"\"The opened transaction's id. Null if errors occurred.\"\"\"\n transactionId: String\n\n \"\"\"\n Name of the merchant responsible for the sale, as the gateway call's payment\n `id` and `transaction.merchantName`. Projected from the same\n merchantTransactions entry transactionId comes from — VTEX returns one entry\n per seller, so a multi-seller order carries more than one and only the first\n is exposed here (see specs/payment-transaction-payload-gaps.md, Decision 1).\n Null if errors occurred.\n \"\"\"\n merchantName: String\n\n \"\"\"\n Origin of the payment gateway this transaction must be paid at, e.g.\n \"https://mystore.vtexvault.com\" — the base the browser's direct-to-gateway\n send-payments POST appends its own path to. Always `https://{account}.vtexvault.com`,\n derived from the request's account alone: no upstream field and no caller-supplied\n value is an input, since this field decides where card data is sent. Null when the\n account is not a single DNS label, and if errors occurred.\n \"\"\"\n gatewayUrl: String\n\n \"\"\"\n The order group, needed for the gateway call's orderId parameter and for gatewayCallback's input.\n \"\"\"\n orderGroup: String\n\n \"\"\"The shopper's user profile id, needed for the gateway call.\"\"\"\n userProfileId: String\n\n \"\"\"\n The payment amount for this transaction, as a decimal (e.g. \"100.00\") for\n display. The gateway body wants minor units — read valueInCents for that,\n never a client-side multiplication of this amount.\n \"\"\"\n value: Money\n\n \"\"\"\n The same payment amount in the currency's minor units (e.g. 10000 for\n \"100.00\"), exactly as VTEX returned it and as this mutation sent it upstream.\n The unit the gateway body's `value`/`installmentValue` fields expect. Null if\n errors occurred.\n \"\"\"\n valueInCents: Int\n\n \"\"\"\n Pre-interest base amount this transaction was opened against, in the\n currency's minor units — the gateway body's `referenceValue`. Equals\n valueInCents when no interest applies. Null if errors occurred.\n \"\"\"\n referenceValueInCents: Int\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentStartTransactionError!]!\n}\n\n\"\"\"\nInput for finalizing a transaction after the direct-to-gateway call\nsucceeded.\n\"\"\"\ninput PaymentGatewayCallbackInput {\n \"\"\"The order group returned by paymentStartTransaction.\"\"\"\n orderGroup: String!\n\n \"\"\"\n The resume flag. False (the default) on the first pass; true when the shopper\n returns from the bank's challenge page, so the callback accepts the challenge.\n \"\"\"\n acceptChallenges: Boolean = false\n}\n\n\"\"\"\nError codes for the paymentGatewayCallback mutation. Login-required VTEX\nbusiness codes (CHK0087, CHK003, ORD062) and generic infrastructure failures\nare never in this enum — per ADR-00007 they surface as top-level GraphQL\nerrors (UNAUTHORIZED / UPSTREAM_ERROR), not userErrors.\n\"\"\"\nenum PaymentGatewayCallbackErrorCode {\n \"\"\"\n The transaction cookies (Vtex_CHKO_Auth, CheckoutDataAccess) were not present on this request — paymentStartTransaction was not called first, or the five-minute window lapsed.\n \"\"\"\n MISSING_TRANSACTION_COOKIES\n\n \"\"\"\n VTEX answered 428: the payment needs a challenge step. When `redirectUrl` is set the shopper must be sent there; when it is null the challenge uses a mechanism this API does not hand over (for example a payment app).\n \"\"\"\n REDIRECT_REQUIRED\n}\n\n\"\"\"A domain error returned from the paymentGatewayCallback mutation.\"\"\"\ntype PaymentGatewayCallbackError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentGatewayCallbackErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentGatewayCallback mutation.\"\"\"\ntype PaymentGatewayCallbackPayload {\n \"\"\"\n The finalized order group, echoed back on success. Null if errors occurred.\n \"\"\"\n orderId: String\n\n \"\"\"\n The bank's challenge page; set only when VTEX answered 428 with a usable http(s) URL.\n \"\"\"\n redirectUrl: String\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentGatewayCallbackError!]!\n}\n\n\"\"\"\nThe installment plan a settled order was charged in. Projected from the\nplaced-order payment record, which carries the count and the settled total\nonly — never a per-installment amount and never an interest rate, unlike the\nlive order form behind `Payment.selectedInstallment`. That asymmetry is\nupstream and permanent (see specs/settle-and-project-the-placed-order.md,\nDecision 2).\n\"\"\"\ntype OrderInstallment\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Number of installments the order was charged in. 1 = single payment.\"\"\"\n count: Int!\n\n \"\"\"\n Total charged across all installments, including any interest, in the\n order's currency, or the request's when no seller order carries one, as the\n order's other amounts are. Null when the settled record carries no amount.\n \"\"\"\n total: Money\n}\n\n\"\"\"\nA settled order's payment recap. Read-only; projected from VTEX's\nsettled-order source rather than the live order form, so it keeps resolving\nafter the order form itself stops existing. Carries no sensitive field: no\nfull card number or CVV is ever read for this projection (RFC D13).\n\"\"\"\ntype Order implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order group.\n \"\"\"\n id: ID!\n\n \"\"\"\n The purchase's payment outcome, shared by its seller orders. The banner shows this one. UNKNOWN when\n the seller orders disagree.\n \"\"\"\n status: OrderStatus!\n\n \"\"\"\n The distinct payments of the purchase, each counted once across its seller orders. They follow the\n seller orders sorted by order id, and within a transaction the order the order system lists them\n in, which this API does not change. Empty when the order carries no payment.\n \"\"\"\n payments: [OrderPayment!]!\n\n \"\"\"\n Card network / payment-system display name of the first payment (e.g. \"Visa\", or a non-card\n method's own name such as \"Boleto Bancário\"). Kept for the payment recap; prefer payments. Null\n when the settled order carries no payment record to project one from.\n \"\"\"\n network: String\n\n \"\"\"\n Last four digits of the card used by the first payment, when the payment method was a card.\n Present for both a saved and a freshly-entered card — unlike Payment (T1),\n where last four is a saved-card-only field. Kept for the payment recap; prefer payments. Null for\n a non-card method or when no payment record exists to project one from.\n \"\"\"\n lastFourDigits: String\n\n \"\"\"Always null: the order system sends no card label.\"\"\"\n label: String @deprecated(reason: \"The order system sends no card label; always null.\") @deprecationDate(deletionDate: \"2027-03-31\")\n\n \"\"\"\n The installment plan of the first payment. Kept for the payment recap; prefer payments. Null when\n the settled record reports none.\n \"\"\"\n installment: OrderInstallment\n\n \"\"\"\n Who bought, as the order recorded them at placement, not the live profile. Masked (e.g.\n \"A*** S***\") when personalDataVisible is false. Null when the order carries no profile.\n \"\"\"\n customer: OrderCustomer\n\n \"\"\"\n Whether the order system returned the order's personal data unmasked: the customer, and the\n addresses, invoice and payment details it masks under the same verdict. False means masked, and is\n also the answer when the order system does not say.\n \"\"\"\n personalDataVisible: Boolean!\n\n \"\"\"\n The order group: the reference the shopper reads and support resolves. One per purchase, however\n many sellers.\n \"\"\"\n reference: String!\n\n \"\"\"\n When the purchase was placed: the earliest creation date across its seller orders. Null when none\n carries one.\n \"\"\"\n placedAt: DateTime\n\n \"\"\"\n What the purchase costs: the sum of its seller orders' totals. Null when a seller order has none.\n \"\"\"\n total: Money\n\n \"\"\"\n The purchase's money lines: each line summed across seller orders, keyed on (id, name).\n \"\"\"\n totals: [CartTotalizer!]!\n\n \"\"\"\n The purchase split by seller, one entry per seller order, sorted by orderId.\n \"\"\"\n sellerOrders: [SellerOrder!]!\n\n \"\"\"\n Every item of the purchase grouped by shipping method, channel and relative estimate, across\n sellers; SmartCheckout uses the same key within each seller order.\n \"\"\"\n deliveries: [OrderDelivery!]!\n}\n\n\"\"\"\nItems that arrive together: the same shipping method, channel and relative estimate.\n\"\"\"\ntype OrderDelivery\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the grouping key and its scope, the order group.\"\"\"\n id: ID!\n\n \"\"\"\n The shipping method, as the shopper chose it: its name, channel and relative estimate. Its price\n is one line's; use price. Null when the order system omits the method or its estimate is\n unreadable.\n \"\"\"\n shippingOption: OrderShippingOption\n\n \"\"\"\n The group's dated promise: its latest line's, so it covers every item. Null when no line carries a\n date.\n \"\"\"\n estimatedDate: DateTime\n\n \"\"\"\n What the group's shipping cost: the sum of its lines' shipping prices. A line without a readable\n method adds zero, so with shippingOption null this zero is unknown, never free shipping.\n \"\"\"\n price: Money!\n\n \"\"\"\n What the group's shipping would have cost without discounts: the sum of its lines' list prices,\n read as price is.\n \"\"\"\n listPrice: Money!\n\n \"\"\"\n Where the group ships: its first line's address. The address is not part of the grouping key: the\n cart delivers to one address, so a group's lines share it. Each line's own is on\n items.deliveryAddress. Masked under personalDataVisible.\n \"\"\"\n address: Address\n\n \"\"\"\n The pickup point's name: its first line's. Null unless the group is picked up.\n \"\"\"\n pickupPointName: String\n\n \"\"\"The number of items in the group.\"\"\"\n itemCount: Int!\n\n \"\"\"The group's items, in the order of the seller orders.\"\"\"\n items: [OrderItem!]!\n}\n\n\"\"\"\nThe shipping method the shopper chose, as the order recorded it. Read from the order, never from the\ncart.\n\"\"\"\ntype OrderShippingOption\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the order group, the line's uniqueId and the SLA id.\"\"\"\n id: ID!\n\n \"\"\"\n The method's name, e.g. Motoboy. The SLA id when the order system sends no name.\n \"\"\"\n name: String!\n\n \"\"\"Delivery channel: home delivery or pickup.\"\"\"\n channel: DeliveryChannel!\n\n \"\"\"The method's relative estimate, e.g. 7 business days.\"\"\"\n shippingEstimate: ShippingEstimate!\n\n \"\"\"What this line's shipping cost. Zero when free shipping applies.\"\"\"\n price: Money!\n\n \"\"\"What this line's shipping would have cost without discounts.\"\"\"\n listPrice: Money!\n}\n\n\"\"\"\nThe payment outcome of a settled order (PRD UQ-2), mapped from the order's Checkout workflow state.\n\"\"\"\nenum OrderStatus {\n \"\"\"The payment was approved, or the order has moved past approval.\"\"\"\n APPROVED\n\n \"\"\"The payment is not decided yet, under anti-fraud review included.\"\"\"\n PENDING\n\n \"\"\"The payment was denied, or the order was cancelled.\"\"\"\n DENIED\n\n \"\"\"A state the page does not classify. It asserts no outcome.\"\"\"\n UNKNOWN\n}\n\n\"\"\"One payment of a settled purchase. No id: it lives inside its Order.\"\"\"\ntype OrderPayment\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Card network / payment-system display name, e.g. \"Visa\". Null when the order system sends none.\n \"\"\"\n network: String\n\n \"\"\"\n Last four digits of the card, when the payment method was a card. Never the card number.\n \"\"\"\n lastFourDigits: String\n\n \"\"\"\n The installment plan of this payment. Null when the settled record reports none.\n \"\"\"\n installment: OrderInstallment\n\n \"\"\"\n What this payment charged, in full: never one instalment. Null only if the order system omits it,\n which it does not today.\n \"\"\"\n value: Money\n}\n\n\"\"\"One seller's part of a purchase: its own seller, totals and items.\"\"\"\ntype SellerOrder\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from orderId.\"\"\"\n id: ID!\n\n \"\"\"The seller order's number, e.g. 1667094470146-01.\"\"\"\n orderId: String!\n\n \"\"\"\n The seller fulfilling this order. Null only when neither sellers nor any readable item names one.\n \"\"\"\n seller: CartSellerRef\n\n \"\"\"\n What this seller order costs. Null when the order system does not send it.\n \"\"\"\n total: Money\n\n \"\"\"This seller order's money lines. The cart's own totalizer type.\"\"\"\n totals: [CartTotalizer!]!\n\n \"\"\"\n Every line of this seller order. Children of a composition nest under their parent.\n \"\"\"\n items: [OrderItem!]!\n}\n\n\"\"\"\nOne purchased line of a settled order. The fields mean what they mean on CartItem.\n\"\"\"\ntype OrderItem\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the order group and the line's uniqueId.\"\"\"\n id: ID!\n\n \"\"\"\n The SKU as the cart shows it: name, image, seller, availability and variation.\n \"\"\"\n variant: CartVariant!\n\n \"\"\"\n The product the SKU belongs to: title, detail URL, categories and brand.\n \"\"\"\n product: CartProduct!\n\n \"\"\"How many units were bought.\"\"\"\n quantity: Int!\n\n \"\"\"The unit price at placement, before discounts.\"\"\"\n price: Money!\n\n \"\"\"Zero when the line had no list price.\"\"\"\n listPrice: Money!\n\n \"\"\"The unit price the shopper paid.\"\"\"\n sellingPrice: Money!\n\n \"\"\"The line's own total, as the cart computes it.\"\"\"\n ownTotal: Money!\n\n \"\"\"The line's own total plus its compositions'.\"\"\"\n total: Money!\n\n \"\"\"Whether the line is a gift.\"\"\"\n gift: Boolean!\n\n \"\"\"The featured promotions that discounted this line.\"\"\"\n discounts: [CartItemDiscount!]!\n\n \"\"\"The values the shopper entered for the line's input assemblies.\"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"The add-on services and bundle children nested under this line.\"\"\"\n compositions: [CartItemComposition!]!\n\n \"\"\"\n The shipping method the shopper chose for this line. Null when the order system omits it or its\n estimate is unreadable.\n \"\"\"\n selectedShippingOption: OrderShippingOption\n\n \"\"\"\n Where this line ships: the delivery address, or the pickup point's. Masked under\n personalDataVisible.\n \"\"\"\n deliveryAddress: Address\n\n \"\"\"\n The pickup point's name, e.g. \"RJ - Botafogo Praia Shopping\". Null unless the line is picked up.\n \"\"\"\n pickupPointName: String\n\n \"\"\"The dated promise. Null when the order system has not set one.\"\"\"\n estimatedDeliveryDate: DateTime\n}\n\n\"\"\"\nThe customer of a settled order, as the order recorded them at placement. The same fields as\nClientProfile, which is the live order form's profile.\n\"\"\"\ntype OrderCustomer\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Email address.\"\"\"\n email: String\n\n \"\"\"First name.\"\"\"\n firstName: String\n\n \"\"\"Last name.\"\"\"\n lastName: String\n\n \"\"\"Phone number.\"\"\"\n phone: String\n\n \"\"\"Identity document number.\"\"\"\n document: String\n}\n\n\"\"\"\nThe address fields a postal code resolves to. Each is null when the platform\nleft it blank.\n\"\"\"\ntype PostalCodeAddress\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"The city, as the platform names it.\"\"\"\n city: String\n\n \"\"\"The state or region, as the platform codes it (`SP`, `NY`).\"\"\"\n state: String\n\n \"\"\"The street. Null where the platform resolves codes to an area only.\"\"\"\n street: String\n\n \"\"\"The neighborhood. Null where the platform resolves none.\"\"\"\n neighborhood: String\n}\n\n\"\"\"\nThe authentication methods an account enables, read before rendering a sign-in form.\n\"\"\"\ntype SessionAuthProviders {\n \"\"\"Whether classic email and password sign-in is enabled.\"\"\"\n passwordAuthentication: Boolean!\n\n \"\"\"Whether email access-code (passwordless) sign-in is enabled.\"\"\"\n accessKeyAuthentication: Boolean!\n}\n\n\"\"\"\nA typed, expected failure of a login attempt. Distinct from the top-level\nUNAUTHORIZED gate: this is a domain outcome (the request was understood, the\nbusiness rejected it), never an infrastructure failure.\n\"\"\"\ntype SessionError {\n \"\"\"Machine-readable error code for the login-attempt failure.\"\"\"\n code: SessionErrorCode!\n\n \"\"\"Human-readable message describing the failure.\"\"\"\n message: String!\n}\n\n\"\"\"The set of login-attempt failure codes a session mutation can return.\"\"\"\nenum SessionErrorCode {\n \"\"\"Email or password was not accepted by VTEX ID.\"\"\"\n INVALID_CREDENTIALS\n\n \"\"\"The access code was wrong or expired.\"\"\"\n INVALID_ACCESS_CODE\n\n \"\"\"Too many access codes were requested for this email.\"\"\"\n ACCESS_CODE_SEND_LIMIT\n\n \"\"\"The user is blocked by VTEX ID.\"\"\"\n BLOCKED\n\n \"\"\"\n BFF-side guard: the request lacked the auth context it needed (e.g. a missing\n authenticationToken). Not a VTEX outcome.\n \"\"\"\n MISSING_AUTH_CONTEXT\n}\n\n\"\"\"\nThe login / logout result, projected from the one refreshed order form. session,\ncart, clientProfile and clientPreferences are normalized Relay Nodes (keyed on\nthe orderFormId) so Apollo merges them into the cache and the client updates\nreactively with no refetch.\n\"\"\"\ntype SessionLoginPayload {\n \"\"\"The session after the attempt; loggedIn is true only on success.\"\"\"\n session: Session!\n\n \"\"\"The cart projected from the refreshed order form.\"\"\"\n cart: Cart!\n\n \"\"\"\n The client profile projected from the refreshed order form; the entity always\n resolves, its fields are null when unset.\n \"\"\"\n clientProfile: ClientProfile!\n\n \"\"\"\n The client preferences projected from the refreshed order form; the entity\n always resolves, its fields are null when unset.\n \"\"\"\n clientPreferences: ClientPreferences!\n\n \"\"\"Typed login-attempt failures. Empty on success.\"\"\"\n userErrors: [SessionError!]!\n}\n\n\"\"\"The result of requesting an email access code.\"\"\"\ntype SessionRequestAccessCodePayload {\n \"\"\"\n Opaque token to hand back to sessionValidateAccessCode. Null when the request\n failed.\n \"\"\"\n authenticationToken: String\n\n \"\"\"Typed request failures. Empty on success.\"\"\"\n userErrors: [SessionError!]!\n}\n\n\"\"\"Credentials for a classic email + password sign-in.\"\"\"\ninput SessionPasswordLoginInput {\n \"\"\"The shopper's email address.\"\"\"\n email: String!\n\n \"\"\"\n The shopper's password. Proxied to VTEX ID over TLS, never logged or persisted.\n \"\"\"\n password: String!\n}\n\n\"\"\"The email to send an access code to.\"\"\"\ninput SessionRequestAccessCodeInput {\n \"\"\"The shopper's email address the access code is sent to.\"\"\"\n email: String!\n}\n\n\"\"\"An access code plus the authenticationToken it was issued against.\"\"\"\ninput SessionValidateAccessCodeInput {\n \"\"\"The shopper's email address.\"\"\"\n email: String!\n\n \"\"\"The access code the shopper received by email.\"\"\"\n accessCode: String!\n\n \"\"\"\n The opaque token returned by sessionRequestAccessCode, handed back unchanged.\n \"\"\"\n authenticationToken: String!\n}\n\n\"\"\"\nThe shopper's active region. Both fields are nullable: a shopper who has never\nsubmitted a postal code has no region, and a submitted postal code does not\nalways resolve to a known city.\n\"\"\"\ntype Region\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization. Not a Relay Node ID: a region is\n session-scoped shopper state, never addressable by global id.\n \"\"\"\n id: ID!\n\n \"\"\"The active postal code, formatted for display. Null when none is set.\"\"\"\n postalCode: String\n\n \"\"\"\n The city the postal code resolves to. Null when the postal code is unknown to\n the resolver, which is a normal state and not an error.\n \"\"\"\n city: String\n}\n\n\"\"\"\nWhy a region write was refused. Stable across locales, so a client can render\neach case in the shopper's language instead of echoing the server's message.\n\"\"\"\nenum RegionErrorCode {\n \"\"\"The value did not normalize to a complete postal code.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The postal code is complete but falls outside the served ranges.\"\"\"\n UNSERVED_POSTAL_CODE\n}\n\n\"\"\"\nA typed, expected failure of a region write: the request was understood and the\nbusiness rejected it. Distinct from an infrastructure failure, which surfaces as\na top-level GraphQL error.\n\"\"\"\ntype RegionError {\n \"\"\"Which rule refused the postal code.\"\"\"\n code: RegionErrorCode!\n\n \"\"\"\n Human-readable message describing why the postal code was rejected. Written in\n English by the server; a client should key its copy on `code` instead.\n \"\"\"\n message: String!\n}\n\n\"\"\"The result of submitting a postal code.\"\"\"\ntype RegionUpdatePayload {\n \"\"\"\n The region after the write. Null when the postal code was rejected, leaving\n any previously active region untouched.\n \"\"\"\n region: Region\n\n \"\"\"Typed rejections. Empty on success.\"\"\"\n errors: [RegionError!]!\n}\n\n\"\"\"\nA shopper's persistent, cart-independent profile. Distinct from checkout's\norder-form-scoped ClientProfile.\n\"\"\"\ntype CustomerProfile\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization. Not a Relay Node ID: the profile is\n session-scoped shopper state, derived from the session and never addressable\n by a global id (no id argument, no CustomerProfile entry in Query.node).\n \"\"\"\n id: ID!\n\n \"\"\"Given name. Null when unset.\"\"\"\n firstName: String\n\n \"\"\"Family name. Null when unset.\"\"\"\n lastName: String\n\n \"\"\"\n The shopper's login identifier. Read-only — excluded from the update input by construction.\n \"\"\"\n email: String\n\n \"\"\"Primary contact phone. Null when unset.\"\"\"\n homePhone: String\n\n \"\"\"Mobile contact phone. Null when unset.\"\"\"\n mobilePhone: String\n\n \"\"\"National tax ID. Null when unset.\"\"\"\n document: String\n\n \"\"\"\n The tax ID's type, so the control can adapt to the shopper's region. Null when unset.\n \"\"\"\n documentType: String\n\n \"\"\"Date of birth. Null when unset.\"\"\"\n birthDate: String\n\n \"\"\"\n Free-form gender value; the store configures the options it offers. Null when unset.\n \"\"\"\n gender: String\n}\n\n\"\"\"A typed, expected failure of a profile write.\"\"\"\ntype CustomerProfileError {\n \"\"\"Machine-readable code for the write failure.\"\"\"\n code: CustomerProfileErrorCode!\n\n \"\"\"A safe message. Never echoes a submitted profile value.\"\"\"\n message: String!\n}\n\n\"\"\"The set of expected, typed profile-write failure codes.\"\"\"\nenum CustomerProfileErrorCode {\n \"\"\"\n The account's profile schema refused one or more submitted values. It does not\n attribute the refusal to a cause — a required field left empty and a malformed\n value are not distinguishable until the upstream rejection body is\n characterised, at which point a narrower code joins this one.\n \"\"\"\n INVALID_VALUE\n}\n\n\"\"\"\nEvery field is optional: provide only what the shopper edited. An empty string\nis an explicit erase; an omitted field is left untouched. A `null` is neither —\nit counts as not provided, so nulling an untouched field cannot wipe it.\n\"\"\"\ninput CustomerProfileUpdateInput {\n \"\"\"Given name to write. Omit to leave unchanged; empty string to erase.\"\"\"\n firstName: String\n\n \"\"\"Family name to write. Omit to leave unchanged; empty string to erase.\"\"\"\n lastName: String\n\n \"\"\"\n Primary contact phone to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n homePhone: String\n\n \"\"\"\n Mobile contact phone to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n mobilePhone: String\n\n \"\"\"\n National tax ID to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n document: String\n\n \"\"\"Tax ID type to write. Omit to leave unchanged; empty string to erase.\"\"\"\n documentType: String\n\n \"\"\"\n Date of birth to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n birthDate: String\n\n \"\"\"Gender value to write. Omit to leave unchanged; empty string to erase.\"\"\"\n gender: String\n}\n\n\"\"\"\nThe result of a profile write, carrying the merged profile and any typed\nfailures.\n\"\"\"\ntype CustomerProfileUpdatePayload {\n \"\"\"\n The profile after the write, so a reactive fragment re-delivers without a refetch.\n \"\"\"\n customerProfile: CustomerProfile!\n\n \"\"\"Typed, expected write failures. Empty on success.\"\"\"\n userErrors: [CustomerProfileError!]!\n}\n\n\"\"\"\nAn address the shopper saved to their account. Read from the shopper's own\nprofile, never through a cart. Every field it shares with checkout's Address is\nspelled the same way.\n\"\"\"\ntype CustomerAddress implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Global id. Resolves through Query.node only inside the signed-in shopper's own\n addresses; any other id resolves to null.\n \"\"\"\n id: ID!\n\n \"\"\"\n ISO 3166-1 alpha-3 country code, as stored. Null when the stored address has\n none, as an address another system wrote can; it is listed so the shopper can\n still see and remove it.\n \"\"\"\n country: String\n\n \"\"\"Who receives deliveries at this address. Null when unset.\"\"\"\n recipientName: String\n\n \"\"\"Street name. Null when unset.\"\"\"\n street: String\n\n \"\"\"Street number. Null when unset.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.). Null when unset.\"\"\"\n complement: String\n\n \"\"\"Neighborhood or district. Null when unset.\"\"\"\n neighborhood: String\n\n \"\"\"City. Null when unset.\"\"\"\n city: String\n\n \"\"\"State or province code. Null when unset.\"\"\"\n state: String\n\n \"\"\"Postal code, as stored. Null when unset.\"\"\"\n postalCode: String\n\n \"\"\"A landmark that helps find the address. Null when unset.\"\"\"\n reference: String\n}\n\n\"\"\"\nThe signed-in shopper's saved addresses, held in one object so a client can cache\nand subscribe to the list. It takes no argument and reads only the shopper's own\nlist. Not resolvable through Query.node.\n\"\"\"\ntype CustomerAddressBook\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization, the same for every request of the\n shopper. Not a Relay Node ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Every saved address, the same list `customerAddresses` returns. Empty when the\n shopper has none.\n \"\"\"\n addresses: [CustomerAddress!]!\n}\n\n\"\"\"\nA new saved address. `country` is required; every other field is optional to the\nschema, and the country's rules say which ones it needs. A field that is omitted,\n`null`, or an empty string is not written.\n\"\"\"\ninput CustomerAddressCreateInput {\n \"\"\"\n ISO 3166-1 alpha-3 country code. The store must ship to it. Trimmed and upper-cased.\n \"\"\"\n country: String!\n\n \"\"\"Who receives deliveries at this address.\"\"\"\n recipientName: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood or district.\"\"\"\n neighborhood: String\n\n \"\"\"City.\"\"\"\n city: String\n\n \"\"\"State or province code.\"\"\"\n state: String\n\n \"\"\"Postal code. Stored in the country's masked form once it is valid.\"\"\"\n postalCode: String\n\n \"\"\"A landmark that helps find the address.\"\"\"\n reference: String\n}\n\n\"\"\"\nChanges to a saved address. Omit a field, or send `null`, to keep it; send an empty\nstring to erase it. The country cannot change.\n\"\"\"\ninput CustomerAddressUpdateInput {\n \"\"\"\n Who receives deliveries at this address. Omit to leave unchanged; empty string to erase.\n \"\"\"\n recipientName: String\n\n \"\"\"Street name. Omit to leave unchanged; empty string to erase.\"\"\"\n street: String\n\n \"\"\"Street number. Omit to leave unchanged; empty string to erase.\"\"\"\n number: String\n\n \"\"\"\n Additional address detail (apartment, suite, etc.). Omit to leave unchanged; empty string to erase.\n \"\"\"\n complement: String\n\n \"\"\"\n Neighborhood or district. Omit to leave unchanged; empty string to erase.\n \"\"\"\n neighborhood: String\n\n \"\"\"City. Omit to leave unchanged; empty string to erase.\"\"\"\n city: String\n\n \"\"\"\n State or province code. Omit to leave unchanged; empty string to erase.\n \"\"\"\n state: String\n\n \"\"\"\n Postal code. Omit to leave unchanged; empty string to erase. Stored in the country's masked form once it is valid.\n \"\"\"\n postalCode: String\n\n \"\"\"\n A landmark that helps find the address. Omit to leave unchanged; empty string to erase.\n \"\"\"\n reference: String\n}\n\n\"\"\"\nA typed, expected failure of an address write, or of the lookup that precedes it.\n\"\"\"\ntype CustomerAddressError {\n \"\"\"Machine-readable code for the failure.\"\"\"\n code: CustomerAddressErrorCode!\n\n \"\"\"\n A safe, fixed message. Never echoes a submitted value, an id, or a key.\n \"\"\"\n message: String!\n\n \"\"\"\n The field the failure is about. Null when it is about the address as a whole.\n \"\"\"\n field: CustomerAddressField\n}\n\n\"\"\"The set of expected, typed address-write failure codes.\"\"\"\nenum CustomerAddressErrorCode {\n \"\"\"\n The id is malformed, names another entity type, or is not one of the shopper's saved\n addresses. These cases are indistinguishable.\n \"\"\"\n NOT_FOUND\n\n \"\"\"The country's rules require this field and it is empty.\"\"\"\n MISSING_REQUIRED_FIELD\n\n \"\"\"\n The value is not accepted: a bad format, a value outside the country's options, a value\n that is too long, or a country that is not three letters. With no field, the profile\n service refused the address and does not say why.\n \"\"\"\n INVALID_VALUE\n\n \"\"\"The store does not ship to the country.\"\"\"\n UNSUPPORTED_COUNTRY\n}\n\n\"\"\"The address field a failure is about.\"\"\"\nenum CustomerAddressField {\n \"\"\"The `country` field.\"\"\"\n COUNTRY\n\n \"\"\"The `recipientName` field.\"\"\"\n RECIPIENT_NAME\n\n \"\"\"The `street` field.\"\"\"\n STREET\n\n \"\"\"The `number` field.\"\"\"\n NUMBER\n\n \"\"\"The `complement` field.\"\"\"\n COMPLEMENT\n\n \"\"\"The `neighborhood` field.\"\"\"\n NEIGHBORHOOD\n\n \"\"\"The `city` field.\"\"\"\n CITY\n\n \"\"\"The `state` field.\"\"\"\n STATE\n\n \"\"\"The `postalCode` field.\"\"\"\n POSTAL_CODE\n\n \"\"\"The `reference` field.\"\"\"\n REFERENCE\n}\n\n\"\"\"The result of creating a saved address.\"\"\"\ntype CustomerAddressCreatePayload {\n \"\"\"The address as written. Null when `userErrors` is not empty.\"\"\"\n customerAddress: CustomerAddress\n\n \"\"\"Typed, expected failures, one per refused field. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"The result of updating a saved address.\"\"\"\ntype CustomerAddressUpdatePayload {\n \"\"\"\n The address as written, or as stored when the input provided no field. Null when\n `userErrors` is not empty.\n \"\"\"\n customerAddress: CustomerAddress\n\n \"\"\"Typed, expected failures, one per refused field. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"The result of deleting a saved address.\"\"\"\ntype CustomerAddressDeletePayload {\n \"\"\"\n The id of the deleted address, to evict it from a client cache. Null when `userErrors`\n is not empty.\n \"\"\"\n deletedCustomerAddressId: ID\n\n \"\"\"Typed, expected failures. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"\nThe countries the store ships to, read from the platform's freight\nconfiguration. Store-level and identical for every shopper.\n\"\"\"\ntype ShippingCountries\n @cacheControl(maxAge: 3600, scope: PUBLIC)\n{\n \"\"\"\n ISO 3166-1 alpha-3 codes, upper-case, without duplicates, in the order the\n platform lists them. Never empty: when the freight configuration declares no\n country, this holds the sales channel's country and `source` says so.\n \"\"\"\n countries: [String!]!\n\n \"\"\"\n Where `countries` came from. A consumer that judges an address against the\n list must not do so when this is `SALES_CHANNEL_FALLBACK`.\n \"\"\"\n source: ShippingCountriesSource!\n}\n\n\"\"\"The origin of a shipping-country list.\"\"\"\nenum ShippingCountriesSource {\n \"\"\"The store's freight configuration declares these countries.\"\"\"\n PLATFORM\n\n \"\"\"\n The freight configuration declares none, so the list is the sales channel's\n country alone. It is a guess, not a declared delivery area.\n \"\"\"\n SALES_CHANNEL_FALLBACK\n}\n\n\"\"\"A placed order owned by the signed-in shopper.\"\"\"\ntype CustomerOrder implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Global Node id. Refetch it with `node` or `customerOrder`.\"\"\"\n id: ID!\n\n \"\"\"\n Shopper-facing order number. The same value the list carries as its `id`.\n \"\"\"\n orderNumber: String!\n\n \"\"\"Raw OMS status code.\"\"\"\n status: String!\n\n \"\"\"Whether OMS currently permits whole-order cancellation.\"\"\"\n allowCancellation: Boolean!\n\n \"\"\"Timestamp when the order was placed.\"\"\"\n placedAt: DateTime\n\n \"\"\"Grand total recorded on the order.\"\"\"\n total: Money!\n\n \"\"\"Itemized totals recorded on the order.\"\"\"\n totals: [CustomerOrderTotal!]!\n\n \"\"\"Product lines recorded on the order.\"\"\"\n items: [CustomerOrderItem!]!\n\n \"\"\"Product lines grouped by their selected delivery option.\"\"\"\n deliveryOptions: [CustomerOrderDeliveryOption!]!\n\n \"\"\"Payments recorded on active and historical transactions.\"\"\"\n payments: [CustomerOrderPayment!]!\n\n \"\"\"Whether every package has a recorded delivery confirmation.\"\"\"\n isAllDelivered: Boolean\n\n \"\"\"Earliest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMin: DateTime\n\n \"\"\"Latest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMax: DateTime\n\n \"\"\"Timestamp when the order was invoiced.\"\"\"\n invoiceDate: DateTime\n\n \"\"\"\n Order delivery channel. The order-level value when OMS supplies it, otherwise\n the channel every logistics entry agrees on. Null when those entries differ.\n \"\"\"\n selectedDeliveryChannel: String\n\n \"\"\"\n Completion resolved once for this order, with the inputs the single-order payload carries. The list also passes courierStatusFinished, which this payload does not.\n \"\"\"\n completion: CustomerOrderCompletion!\n\n \"\"\"The progress stage this order is in.\"\"\"\n progress: CustomerOrderProgress!\n}\n\n\"\"\"\nOne of the four progress stages a shopper sees. Approval is not a stage.\n\"\"\"\nenum CustomerOrderProgressStage {\n \"\"\"The order was placed and payment has not started.\"\"\"\n PLACED\n\n \"\"\"Payment is pending, awaiting authorization, or denied.\"\"\"\n PAYMENT\n\n \"\"\"Payment was approved and the order is being prepared.\"\"\"\n PROCESSING\n\n \"\"\"The order was invoiced and is on its way or ready for pickup.\"\"\"\n SHIPPING\n}\n\n\"\"\"Progress stage resolved once for one order.\"\"\"\ntype CustomerOrderProgress {\n \"\"\"The stage the order is in. A cancelled order stays on PAYMENT.\"\"\"\n stage: CustomerOrderProgressStage!\n\n \"\"\"True when payment was denied or the order was cancelled.\"\"\"\n paymentFailed: Boolean!\n\n \"\"\"True when the order is cancelled or a cancellation was requested.\"\"\"\n cancelled: Boolean!\n}\n\n\"\"\"One total line recorded on a placed order.\"\"\"\ntype CustomerOrderTotal {\n \"\"\"Stable total category code.\"\"\"\n id: String!\n\n \"\"\"Upstream total name.\"\"\"\n name: String!\n\n \"\"\"Monetary value of this total line.\"\"\"\n value: Money!\n}\n\n\"\"\"One product line recorded on a placed order.\"\"\"\ntype CustomerOrderItem {\n \"\"\"Stable line identifier within the order.\"\"\"\n id: ID!\n\n \"\"\"Product name recorded at purchase time.\"\"\"\n name: String!\n\n \"\"\"Purchased quantity.\"\"\"\n quantity: Int!\n\n \"\"\"Product image recorded at purchase time.\"\"\"\n image: Image\n\n \"\"\"Base unit price recorded on the line.\"\"\"\n price: Money\n\n \"\"\"Unit list price recorded on the line.\"\"\"\n listPrice: Money\n\n \"\"\"Effective unit selling price recorded on the line.\"\"\"\n sellingPrice: Money\n\n \"\"\"\n Line total from the recorded selling price and quantity. Null when that price is absent.\n \"\"\"\n total: Money\n\n \"\"\"\n Tax recorded on the line. Null when OMS omitted it. A recorded zero is kept.\n \"\"\"\n tax: Money\n\n \"\"\"Custom values recorded on the line.\"\"\"\n customFields: [CustomerOrderItemCustomField!]!\n}\n\n\"\"\"A custom value recorded on an order line.\"\"\"\ntype CustomerOrderItemCustomField {\n \"\"\"Custom field name.\"\"\"\n name: String!\n\n \"\"\"Custom field value as recorded on the order.\"\"\"\n value: String!\n}\n\n\"\"\"Products that share one selected delivery option.\"\"\"\ntype CustomerOrderDeliveryOption {\n \"\"\"Selected service-level agreement name.\"\"\"\n selectedSla: String\n\n \"\"\"Address identifier recorded by OMS.\"\"\"\n addressId: String\n\n \"\"\"Delivery or pickup channel.\"\"\"\n deliveryChannel: String\n\n \"\"\"Estimated delivery timestamp for this option.\"\"\"\n shippingEstimateDate: DateTime\n\n \"\"\"Historical address recorded on the order.\"\"\"\n address: CustomerOrderAddress\n\n \"\"\"Product lines assigned to this option.\"\"\"\n items: [CustomerOrderItem!]!\n}\n\n\"\"\"Historical delivery address recorded on an order.\"\"\"\ntype CustomerOrderAddress {\n \"\"\"Recipient name.\"\"\"\n receiverName: String\n\n \"\"\"Postal code.\"\"\"\n postalCode: String\n\n \"\"\"City.\"\"\"\n city: String\n\n \"\"\"State or region.\"\"\"\n state: String\n\n \"\"\"ISO country code.\"\"\"\n country: String\n\n \"\"\"Street.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Neighborhood.\"\"\"\n neighborhood: String\n\n \"\"\"Address complement.\"\"\"\n complement: String\n\n \"\"\"Address reference.\"\"\"\n reference: String\n}\n\n\"\"\"One payment recorded on a placed order.\"\"\"\ntype CustomerOrderPayment {\n \"\"\"Shopper-facing payment method name.\"\"\"\n methodName: String\n\n \"\"\"\n Last four digits recorded on the payment. Null when OMS omitted them or sent a blank.\n \"\"\"\n lastDigits: String\n\n \"\"\"Amount charged through this payment.\"\"\"\n amount: Money!\n\n \"\"\"Number of installments.\"\"\"\n installments: Int\n\n \"\"\"Gift-card redemption code when this payment used one.\"\"\"\n redemptionCode: String\n\n \"\"\"Bank-invoice number already recorded on the payment.\"\"\"\n bankInvoiceNumber: String\n\n \"\"\"Existing bank-invoice print URL.\"\"\"\n bankInvoicePrintUrl: URI\n}\n\n\"\"\"Which slice of the shopper's orders to read.\"\"\"\nenum CustomerOrdersView {\n \"\"\"Every order in the narrowed route result.\"\"\"\n ALL\n\n \"\"\"Orders the completion rule places in ongoing.\"\"\"\n ONGOING\n\n \"\"\"Orders the completion rule places in completed.\"\"\"\n COMPLETED\n\n \"\"\"Orders the completion rule places in cancelled.\"\"\"\n CANCELLED\n}\n\n\"\"\"The view resolved for one list order.\"\"\"\nenum CustomerOrderCompletionView {\n \"\"\"The order is still open.\"\"\"\n ONGOING\n\n \"\"\"The order has reached the shopper, or the shipment window has passed.\"\"\"\n COMPLETED\n\n \"\"\"The cancellation has finished.\"\"\"\n CANCELLED\n}\n\n\"\"\"Label id for the catalogue. The catalogue owns the sentence.\"\"\"\nenum CustomerOrderCompletionLabel {\n \"\"\"A finished cancellation.\"\"\"\n CANCELLED\n\n \"\"\"A cancellation that was requested and has not finished.\"\"\"\n CANCELLATION_REQUESTED\n\n \"\"\"An order that is not yet shipped.\"\"\"\n IN_PROGRESS\n\n \"\"\"Delivery was confirmed.\"\"\"\n DELIVERED\n\n \"\"\"Shipped, or completed from the estimate or the invoice period.\"\"\"\n SHIPPED\n\n \"\"\"Ready for the shopper to collect.\"\"\"\n READY_FOR_PICKUP\n\n \"\"\"Pickup collection was confirmed.\"\"\"\n COLLECTED\n}\n\n\"\"\"View and label resolved once for one list order.\"\"\"\ntype CustomerOrderCompletion {\n \"\"\"The view this order belongs to.\"\"\"\n view: CustomerOrderCompletionView!\n\n \"\"\"The catalogue label id.\"\"\"\n label: CustomerOrderCompletionLabel!\n}\n\n\"\"\"One order on the shopper's list. The detail document is CustomerOrder.\"\"\"\ntype CustomerOrderListItem {\n \"\"\"Shopper-facing order number. Pass this value to customerOrder.\"\"\"\n id: ID!\n\n \"\"\"Raw OMS status code. Empty when the list entry omits it.\"\"\"\n status: String!\n\n \"\"\"When the order was placed.\"\"\"\n placedAt: DateTime\n\n \"\"\"\n Grand total. Null when the list entry omits the value or the currency code.\n \"\"\"\n total: Money\n\n \"\"\"Sum of line quantities. Null when the list entry omits it.\"\"\"\n itemCount: Int\n\n \"\"\"Completion resolved once for this order.\"\"\"\n completion: CustomerOrderCompletion!\n\n \"\"\"Whether every package has a recorded delivery confirmation.\"\"\"\n isAllDelivered: Boolean\n\n \"\"\"Earliest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMin: DateTime\n\n \"\"\"Latest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMax: DateTime\n\n \"\"\"Timestamp when the order was invoiced.\"\"\"\n invoiceDate: DateTime\n\n \"\"\"Delivery channel when the list entry carries it.\"\"\"\n selectedDeliveryChannel: String\n}\n\n\"\"\"An edge in the shopper's order list.\"\"\"\ntype CustomerOrderListItemEdge {\n \"\"\"Resume cursor for the order after this one.\"\"\"\n cursor: Cursor!\n\n \"\"\"The list order.\"\"\"\n node: CustomerOrderListItem!\n}\n\n\"\"\"One page of the signed-in shopper's orders.\"\"\"\ntype CustomerOrdersConnection {\n \"\"\"Orders on this page.\"\"\"\n edges: [CustomerOrderListItemEdge!]!\n\n \"\"\"Cursors for the page.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Route total for ALL. Classified count so far for a filtered view.\"\"\"\n totalCount: Int!\n\n \"\"\"True only when a filtered walk stopped at 20 upstream pages.\"\"\"\n totalIncomplete: Boolean!\n}\n\n\"\"\"Criteria applied before the page is returned.\"\"\"\ninput CustomerOrdersFilterInput {\n \"\"\"View to return. Defaults to every order.\"\"\"\n view: CustomerOrdersView = ALL\n\n \"\"\"Free-text term sent to the order route.\"\"\"\n text: String\n\n \"\"\"Inclusive start of the placed-date range, as an instant.\"\"\"\n placedFrom: DateTime\n\n \"\"\"Inclusive end of the placed-date range, as an instant.\"\"\"\n placedTo: DateTime\n}\n\n\"\"\"What the shopper submits with a whole-order cancellation.\"\"\"\ninput CustomerOrderCancelInput {\n \"\"\"Optional reason the merchant keeps. Trimmed; at most 500 characters.\"\"\"\n reason: String\n}\n\n\"\"\"The set of expected, typed cancellation failure codes.\"\"\"\nenum CustomerOrderCancelErrorCode {\n \"\"\"\n Checkout refused the cancellation. The order is past the point where the shopper\n can cancel it, or a cancellation was already requested.\n \"\"\"\n ORDER_NOT_CANCELLABLE\n\n \"\"\"\n No order the signed-in shopper can see has this id. A missing id and someone\n else's id are not distinguished.\n \"\"\"\n NOT_FOUND\n}\n\n\"\"\"A typed, expected failure of a cancellation.\"\"\"\ntype CustomerOrderCancelError {\n \"\"\"Machine-readable code for the failure.\"\"\"\n code: CustomerOrderCancelErrorCode!\n\n \"\"\"A fixed message. Never echoes the upstream response.\"\"\"\n message: String!\n}\n\n\"\"\"The result of a cancellation request.\"\"\"\ntype CustomerOrderCancelPayload {\n \"\"\"\n The order re-read after checkout accepted the request. Null on a user error, and\n null when the re-read failed after an accepted request.\n \"\"\"\n customerOrder: CustomerOrder\n\n \"\"\"Typed, expected failures. Empty on success.\"\"\"\n userErrors: [CustomerOrderCancelError!]!\n}\n\nenum link__Purpose {\n \"\"\"\n `SECURITY` features provide metadata necessary to securely resolve fields.\n \"\"\"\n SECURITY\n\n \"\"\"\n `EXECUTION` features provide metadata necessary for operation execution.\n \"\"\"\n EXECUTION\n}\n\nscalar link__Import\n\nscalar federation__FieldSet\n\nscalar federation__Scope\n\nscalar federation__Policy\n\nscalar federation__ContextFieldValue\n\nscalar _Any\n\ntype _Service {\n sdl: String\n}\n\nunion _Entity = Product\n";
18305
+ var core_federation_default = "# GENERATED by src/schema/emit.ts (pnpm run schema:emit) — do not edit by hand.\n# core version: 0.0.1\nschema\n @link(url: \"https://specs.apollo.dev/link/v1.0\")\n{\n query: Query\n mutation: Mutation\n}\n\nextend schema\n @link(url: \"https://specs.apollo.dev/federation/v2.9\", import: [\"@key\"])\n\n\"\"\"\nRecords the planned removal date of a deprecated schema element. Pairs with the\nstandard built-in `@deprecated(reason)`: `@deprecated` carries the client-facing\nreason, `@deprecationDate` carries only the machine-readable deletion date. The\nreason is not duplicated here — that would drift from the built-in.\n\nThis replaces the previous redefinition of the built-in `@deprecated` (which\nadded a `deletionDate` argument). Redefining a built-in makes Federation\ncomposition (`wgc compose`) fail, so the deletion date moved to this custom\ndirective. As a non-built-in directive it is dropped during composition rather\nthan rejected. See ADR-00011 and CONTEXT.md. The `@deprecated`/`@deprecationDate`\npairing (both directions) and the future-date rule are enforced by a contract\ntest, not a lint rule.\n\"\"\"\ndirective @deprecationDate(\n \"\"\"\n Target removal date in ISO-8601 (YYYY-MM-DD) format. Must be in the future.\n \"\"\"\n deletionDate: String!\n) on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\n\n\"\"\"\nDeclares an HTTP cache policy for a type, field, or interface. Apollo Server\naggregates every hint resolved by a query and emits a single `Cache-Control`\nheader whose `max-age` is the minimum across hints and whose scope is the most\nrestrictive (PRIVATE wins over PUBLIC). Mutations and error responses ignore\nthese hints and always carry `Cache-Control: no-store`.\n\"\"\"\ndirective @cacheControl(\n \"\"\"Longest time (in seconds) this data may live in a cache.\"\"\"\n maxAge: Int\n\n \"\"\"\n Whether shared caches (CDN, proxy) may store the response. Defaults to\n PUBLIC when another field or type sets a scope and nothing overrides it.\n \"\"\"\n scope: CacheControlScope\n\n \"\"\"\n When true, this field inherits its `maxAge` from the parent field rather\n than contributing its own hint. Useful for wrapper/connection types.\n \"\"\"\n inheritMaxAge: Boolean\n) on OBJECT | FIELD_DEFINITION | INTERFACE\n\ndirective @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA\n\ndirective @key(fields: federation__FieldSet!, resolvable: Boolean = true) repeatable on OBJECT | INTERFACE\n\ndirective @federation__requires(fields: federation__FieldSet!) on FIELD_DEFINITION\n\ndirective @federation__provides(fields: federation__FieldSet!) on FIELD_DEFINITION\n\ndirective @federation__external(reason: String) on OBJECT | FIELD_DEFINITION\n\ndirective @federation__tag(name: String!) repeatable on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION | SCHEMA\n\ndirective @federation__extends on OBJECT | INTERFACE\n\ndirective @federation__shareable repeatable on OBJECT | FIELD_DEFINITION\n\ndirective @federation__inaccessible on FIELD_DEFINITION | OBJECT | INTERFACE | UNION | ARGUMENT_DEFINITION | SCALAR | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION\n\ndirective @federation__override(from: String!, label: String) on FIELD_DEFINITION\n\ndirective @federation__composeDirective(name: String) repeatable on SCHEMA\n\ndirective @federation__interfaceObject on OBJECT\n\ndirective @federation__authenticated on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__requiresScopes(scopes: [[federation__Scope!]!]!) on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__policy(policies: [[federation__Policy!]!]!) on FIELD_DEFINITION | OBJECT | INTERFACE | SCALAR | ENUM\n\ndirective @federation__context(name: String!) repeatable on INTERFACE | OBJECT | UNION\n\ndirective @federation__fromContext(field: federation__ContextFieldValue) on ARGUMENT_DEFINITION\n\ndirective @federation__cost(weight: Int!) on ARGUMENT_DEFINITION | ENUM | FIELD_DEFINITION | INPUT_FIELD_DEFINITION | OBJECT | SCALAR\n\ndirective @federation__listSize(assumedSize: Int, slicingArguments: [String!], sizedFields: [String!], requireOneSlicingArgument: Boolean = true) on FIELD_DEFINITION\n\n\"\"\"Visibility scope for an HTTP cache entry.\"\"\"\nenum CacheControlScope {\n \"\"\"\n The response may be stored by shared caches (CDN, proxy) and reused\n across users.\n \"\"\"\n PUBLIC\n\n \"\"\"\n The response may only be stored by single-user caches (browser, service\n worker). Shared caches must not store it.\n \"\"\"\n PRIVATE\n}\n\n\"\"\"\nAn [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) encoded UTC datetime.\n\"\"\"\nscalar DateTime\n\n\"\"\"\nAn [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) encoded URI.\n\"\"\"\nscalar URI\n\n\"\"\"A string containing raw HTML markup.\"\"\"\nscalar HTML\n\n\"\"\"\nAn ISO 4217 currency amount represented as a decimal string (e.g. \"29.99\").\n\"\"\"\nscalar Decimal\n\n\"\"\"\nA [BCP 47](https://tools.ietf.org/html/bcp47) language tag (e.g. \"en-US\").\n\"\"\"\nscalar Locale\n\n\"\"\"An opaque cursor used for Relay-style pagination.\"\"\"\nscalar Cursor\n\n\"\"\"\nThe Relay `Node` interface. Every entity in the graph implements this so\nthe client can refetch any object with a single `node(id: ID!)` query.\n\"\"\"\ninterface Node {\n \"\"\"Globally unique identifier. Base64 of `entityType:rawId`.\"\"\"\n id: ID!\n}\n\n\"\"\"Metadata about the current page in a Relay connection.\"\"\"\ntype PageInfo {\n \"\"\"Whether more pages exist after the current page.\"\"\"\n hasNextPage: Boolean!\n\n \"\"\"Whether more pages exist before the current page.\"\"\"\n hasPreviousPage: Boolean!\n\n \"\"\"Cursor of the first edge in the current page.\"\"\"\n startCursor: Cursor\n\n \"\"\"Cursor of the last edge in the current page.\"\"\"\n endCursor: Cursor\n}\n\n\"\"\"Sort direction for orderBy arguments.\"\"\"\nenum SortDirection {\n \"\"\"Ascending order.\"\"\"\n ASC\n\n \"\"\"Descending order.\"\"\"\n DESC\n}\n\n\"\"\"Represents a monetary amount with its currency.\"\"\"\ntype Money {\n \"\"\"Decimal amount (e.g. \"49.99\").\"\"\"\n amount: Decimal!\n\n \"\"\"ISO 4217 currency code (e.g. \"USD\", \"BRL\").\"\"\"\n currencyCode: CurrencyCode!\n}\n\n\"\"\"A price range, useful for showing \"from – to\" on product cards.\"\"\"\ntype PriceRange {\n \"\"\"Lowest price across all variants.\"\"\"\n min: Money!\n\n \"\"\"Highest price across all variants.\"\"\"\n max: Money!\n}\n\n\"\"\"ISO 4217 currency codes. Extend as needed.\"\"\"\nenum CurrencyCode {\n \"\"\"United States Dollar.\"\"\"\n USD\n\n \"\"\"Euro.\"\"\"\n EUR\n\n \"\"\"British Pound Sterling.\"\"\"\n GBP\n\n \"\"\"Brazilian Real.\"\"\"\n BRL\n\n \"\"\"Argentine Peso.\"\"\"\n ARS\n\n \"\"\"Chilean Peso.\"\"\"\n CLP\n\n \"\"\"Colombian Peso.\"\"\"\n COP\n\n \"\"\"Mexican Peso.\"\"\"\n MXN\n\n \"\"\"Peruvian Sol.\"\"\"\n PEN\n\n \"\"\"Japanese Yen.\"\"\"\n JPY\n}\n\n\"\"\"An image resource associated with a product variant or other entity.\"\"\"\ntype Image {\n \"\"\"Source URL of the image.\"\"\"\n url: URI!\n\n \"\"\"Alt text for accessibility.\"\"\"\n altText: String\n}\n\n\"\"\"A video resource associated with a product.\"\"\"\ntype Video {\n \"\"\"Playback URL.\"\"\"\n url: URI!\n\n \"\"\"Alt text for accessibility.\"\"\"\n altText: String\n\n \"\"\"Preview / poster image.\"\"\"\n previewImage: Image\n}\n\n\"\"\"Any media attached to a product — image or video.\"\"\"\nunion Media = Image | Video\n\n\"\"\"Search engine optimization metadata for any displayable entity.\"\"\"\ntype SEO {\n \"\"\"Page title (`<title>` tag).\"\"\"\n title: String\n\n \"\"\"Meta description.\"\"\"\n description: String\n}\n\n\"\"\"Root query type for the storefront API.\"\"\"\ntype Query {\n \"\"\"\n Fetch any entity by its global ID.\n Clients use this for refetching or cache normalization.\n \"\"\"\n node(\n \"\"\"The globally unique ID.\"\"\"\n id: ID!\n ): Node\n\n \"\"\"Fetch multiple entities by their global IDs.\"\"\"\n nodes(\n \"\"\"A list of globally unique IDs.\"\"\"\n ids: [ID!]!\n ): [Node]!\n _entities(representations: [_Any!]!): [_Entity]!\n _service: _Service!\n}\n\nextend type Query {\n \"\"\"Look up a single product by global ID.\"\"\"\n product(\n \"\"\"Global product ID.\"\"\"\n id: ID!\n ): Product\n\n \"\"\"Look up a single product by its URL slug.\"\"\"\n productBySlug(\n \"\"\"URL-friendly handle (e.g. \\\"nike-zoom-janoski-red\\\").\"\"\"\n slug: String!\n ): Product\n\n \"\"\"Paginated, filterable list of products.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n\n \"\"\"\n Full-text product search with facets and filters.\n Returns the same connection shape but is backed by the search engine\n rather than the catalog database.\n \"\"\"\n productSearch(\n \"\"\"Search query string.\"\"\"\n query: String!\n\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductSearchResult!\n\n \"\"\"\n Product recommendations based on a seed product (frequently bought\n together, similar items, etc.).\n \"\"\"\n productRecommendations(\n \"\"\"URL slug of the product to base recommendations on.\"\"\"\n slug: String!\n\n \"\"\"The recommendation strategy to use.\"\"\"\n intent: RecommendationIntent\n\n \"\"\"Maximum number of recommendations.\"\"\"\n first: Int = 10\n ): [Product!]!\n\n \"\"\"\n Resolves a catalog route by ID or by path and returns its confirmed localized equivalents.\n Null when the route does not exist or the catalog could not be reached.\n \"\"\"\n catalogRoute(\n \"\"\"The route to resolve, by ID or by path.\"\"\"\n input: CatalogRouteInput!\n ): CatalogRoute\n\n \"\"\"Look up a single category by global ID.\"\"\"\n category(\n \"\"\"Global category ID.\"\"\"\n id: ID!\n ): Category\n\n \"\"\"Look up a category by its URL slug.\"\"\"\n categoryBySlug(\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n ): Category\n\n \"\"\"\n The full category tree starting from root departments.\n Accepts a `maxDepth` to limit tree traversal (default: all levels).\n \"\"\"\n categoryTree(\n \"\"\"Maximum depth of the tree to return. Maps to VTEX `categoryLevels`.\"\"\"\n maxDepth: Int\n ): [Category!]!\n\n \"\"\"Paginated flat list of categories.\"\"\"\n categories(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: CategorySortingInput\n ): CategoriesConnection!\n\n \"\"\"Look up a single brand by global ID.\"\"\"\n brand(\n \"\"\"Global brand ID.\"\"\"\n id: ID!\n ): Brand\n\n \"\"\"\n All brands available in the store, derived from the search index.\n Returns brands with their product counts.\n \"\"\"\n brands(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): BrandsConnection!\n\n \"\"\"Look up a single sales channel by global ID.\"\"\"\n salesChannel(\n \"\"\"Global sales channel ID.\"\"\"\n id: ID!\n ): SalesChannel\n\n \"\"\"\n Autocomplete suggestions for a partial search query.\n Returns suggested terms with estimated result counts and facet attributes.\n \"\"\"\n autocompleteSuggestions(\n \"\"\"Partial search query (e.g. \\\"choc\\\").\"\"\"\n query: String!\n ): [AutocompleteSuggestion!]!\n\n \"\"\"The most popular search terms in the last 14 days.\"\"\"\n topSearches: [TrendingSearch!]!\n\n \"\"\"\n Spelling correction for a potentially misspelled search query.\n Returns null if no correction is available.\n \"\"\"\n searchCorrection(\n \"\"\"The potentially misspelled query.\"\"\"\n query: String!\n ): SearchCorrection\n}\n\nextend type Query {\n \"\"\"\n Resolve the active cart from the request context (x-order-form-id header,\n then cookie). When no cart context is present, a new cart is created and\n the x-order-form-id cookie is set on the response.\n \"\"\"\n cart: Cart!\n}\n\nextend type Query {\n \"\"\"\n Simulate available shipping options for a variant on a product detail page.\n Returns delivery options with estimated times and prices for the given\n postal code and item.\n \"\"\"\n shippingSimulation(\n \"\"\"Simulation input: destination, SKU, quantity, and seller.\"\"\"\n input: ShippingSimulateInput!\n ): ShippingSimulationPayload!\n\n \"\"\"\n Simulate shipping options for the entire active cart. Reads the cart from the\n x-order-form-id context and simulates all of its items against the\n destination, returning the options common to every item with prices summed\n across items. Never mints a cart: absent context returns a MISSING_CART_CONTEXT\n userError.\n \"\"\"\n cartShippingSimulation(\n \"\"\"Simulation input: destination only. Items come from the active cart.\"\"\"\n input: CartShippingSimulateInput!\n ): CartShippingSimulationPayload!\n}\n\nextend type Query {\n \"\"\"\n The shopper's profile for the active cart, resolved from the same order form\n as `cart`. The entity always resolves; its fields are null when unset.\n \"\"\"\n clientProfile: ClientProfile!\n\n \"\"\"\n The shopper's preferences for the active cart, resolved from the same order\n form as `cart`. The entity always resolves; its fields are null when unset.\n \"\"\"\n clientPreferences: ClientPreferences!\n}\n\nextend type Query {\n \"\"\"\n The cart's shipping state. Projected from the same order form as Query.cart.\n \"\"\"\n shipping: Shipping!\n\n \"\"\"\n Resolve the shopper's session state from the active order form (x-order-form-id\n header, then cookie). Projects from the same order form fetch as `cart`.\n \"\"\"\n session: Session!\n}\n\nextend type Query {\n \"\"\"\n The cart's payment state: methods, selection, installment options, and saved cards. Projected from the same order form as Query.cart. Always resolves; lists are empty and selection fields are null when payment is unset.\n \"\"\"\n payment: Payment!\n}\n\nextend type Query {\n \"\"\"\n A settled order's payment recap, keyed on the order group\n paymentStartTransaction / paymentGatewayCallback return. Null when the\n order group does not resolve to a settled order — never a fabricated empty\n projection (contrast Query.payment, which always resolves).\n \"\"\"\n order(\n \"\"\"\n The order group returned by paymentStartTransaction / paymentGatewayCallback.\n \"\"\"\n orderGroup: String!\n ): Order\n}\n\nextend type Query {\n \"\"\"\n The fields a postal code resolves to. Needs no cart and no shopper. Null when\n the platform does not know the code. A lookup that could not run is an error,\n never null. A malformed argument is a BAD_USER_INPUT error and reaches no\n upstream.\n \"\"\"\n addressByPostalCode(\n \"\"\"\n ISO 3166-1 alpha-3 code, such as `BRA`. Case and surrounding spaces are\n ignored.\n \"\"\"\n country: String!\n\n \"\"\"\n The postal code, masked or not: letters, digits, spaces, and hyphens, up to\n 20 characters.\n \"\"\"\n postalCode: String!\n ): PostalCodeAddress\n}\n\nextend type Query {\n \"\"\"Which authentication methods this account enables.\"\"\"\n sessionAuthProviders: SessionAuthProviders!\n}\n\nextend type Query {\n \"\"\"\n The shopper's active region, or null when none has been set. Takes no\n arguments by design: the postal code travels on the transport.\n \"\"\"\n region: Region\n}\n\nextend type Query {\n \"\"\"\n The signed-in shopper's own persistent profile. Takes no id — the identity\n comes from the session. Nullable because it is permission-gated (ADR-00005).\n Null with no error when the session names no shopper. Null with an\n UNAUTHORIZED, UPSTREAM_ERROR, UPSTREAM_TIMEOUT or CIRCUIT_OPEN error on this\n field's path when the read fails (ADR-00007), so the rest of the operation\n still resolves. A profile whose fields are null when the shopper has saved\n nothing yet.\n \"\"\"\n customerProfile: CustomerProfile\n\n \"\"\"\n The signed-in shopper's saved addresses, in the order the profile returns\n them. Takes no id: the identity comes from the session. Empty when the shopper\n has none. Throws UNAUTHORIZED or UPSTREAM_ERROR (ADR-00007).\n \"\"\"\n customerAddresses: [CustomerAddress!]!\n\n \"\"\"\n The signed-in shopper's address book. Takes no id: the identity comes from the\n session. Throws UNAUTHORIZED, or UPSTREAM_ERROR when `addresses` is selected\n (ADR-00007).\n \"\"\"\n customerAddressBook: CustomerAddressBook!\n\n \"\"\"\n One of the signed-in shopper's saved addresses. Null when the id is malformed,\n names another entity type, or is not one of this shopper's addresses; these\n cases are indistinguishable.\n \"\"\"\n customerAddress(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n ): CustomerAddress\n}\n\nextend type Query {\n \"\"\"\n The countries the store ships to. Takes no arguments and needs no cart or\n shopper. Null when the platform could not be read, with the reason in\n `errors`; a consumer then knows no shipping country rather than none.\n \"\"\"\n shippingCountries: ShippingCountries\n}\n\nextend type Query {\n \"\"\"\n Read one order owned by the signed-in shopper. A missing or foreign order returns null.\n \"\"\"\n customerOrder(\n \"\"\"Shopper-facing order number, or the global Node id of a CustomerOrder.\"\"\"\n id: ID!\n ): CustomerOrder @cacheControl(maxAge: 0, scope: PRIVATE)\n\n \"\"\"One page of the signed-in shopper's orders.\"\"\"\n customerOrders(\n \"\"\"Page size. Must be 25.\"\"\"\n first: Int!\n\n \"\"\"Opaque resume cursor issued by this field.\"\"\"\n after: Cursor\n\n \"\"\"Not supported. The list is read forward from the route.\"\"\"\n last: Int\n\n \"\"\"Not supported. The list is read forward from the route.\"\"\"\n before: Cursor\n\n \"\"\"View, text, and placed-date range.\"\"\"\n filter: CustomerOrdersFilterInput\n ): CustomerOrdersConnection! @cacheControl(maxAge: 0, scope: PRIVATE)\n}\n\nextend type Query {\n \"\"\"\n The signed-in shopper's own saved cards. Takes no id — the identity comes from\n the session. Resolves to the shopper's entity, with an empty list when no card\n is saved. Null only when the read fails, alongside an UNAUTHORIZED,\n UPSTREAM_ERROR, or UPSTREAM_TIMEOUT error at this path (ADR-00007), so the\n failure does not null the rest of the operation.\n \"\"\"\n customerSavedCards: CustomerSavedCards\n}\n\nextend type Query {\n \"\"\"\n The credit-card networks the store accepts on the request's sales channel,\n with their validation rules, for adding a saved card. Requires a signed-in\n shopper. Null when the read fails, alongside an UNAUTHORIZED, UPSTREAM_ERROR,\n UPSTREAM_TIMEOUT, or NO_CARD_NETWORKS error at this path (ADR-00007).\n NO_CARD_NETWORKS means the store accepts no credit-card network on this\n sales channel; the list is never empty.\n \"\"\"\n savedCardNetworks: [CardNetworkRule!]\n\n \"\"\"\n The signed-in shopper's saved addresses a new card can be billed to, in the\n platform's order. Takes no id. Empty when none is saved. Null only when the\n read fails, alongside an UNAUTHORIZED, UPSTREAM_ERROR, or UPSTREAM_TIMEOUT\n error at this path.\n \"\"\"\n customerSavedCardBillingAddresses: [CardBillingAddress!]\n}\n\n\"\"\"\nRoot mutation type. Cart and checkout operations are declared via\n`extend type Mutation` in the checkout module.\n\"\"\"\ntype Mutation {\n \"\"\"\n Exists only so `extend type Mutation` in feature modules is valid for schema\n linters and subgraph composition; not intended for client use.\n \"\"\"\n inertMutationPlaceholder: Boolean\n\n \"\"\"Placeholder field — removed once a real mutation is added via extend.\"\"\"\n empty: String @deprecated(reason: \"Placeholder — will be dropped when the first real mutation is added.\") @deprecationDate(deletionDate: \"2026-12-31\")\n}\n\nextend type Mutation {\n \"\"\"\n Add an item to the cart. If the variant already exists in the cart, its\n quantity is increased by the given amount.\n \"\"\"\n cartItemAdd(\n \"\"\"Item details to add.\"\"\"\n input: CartItemAddInput!\n ): CartItemAddPayload!\n\n \"\"\"Remove a line from the cart entirely (sets quantity to 0).\"\"\"\n cartItemRemove(\n \"\"\"Item to remove.\"\"\"\n input: CartItemRemoveInput!\n ): CartItemRemovePayload!\n\n \"\"\"\n Remove multiple items from the cart in a single upstream write (each line's\n quantity is set to 0). Tolerant: lines absent from the cart are skipped.\n \"\"\"\n cartItemsRemove(\n \"\"\"Items to remove.\"\"\"\n input: CartItemsRemoveInput!\n ): CartItemsRemovePayload!\n\n \"\"\"Increase the quantity of an existing cart item.\"\"\"\n cartItemQuantityIncrease(\n \"\"\"Item and quantity details.\"\"\"\n input: CartItemQuantityIncreaseInput!\n ): CartItemQuantityIncreasePayload!\n\n \"\"\"\n Decrease the quantity of an existing cart item.\n If the resulting quantity would be zero or less, the item is removed.\n \"\"\"\n cartItemQuantityDecrease(\n \"\"\"Item and quantity details.\"\"\"\n input: CartItemQuantityDecreaseInput!\n ): CartItemQuantityDecreasePayload!\n\n \"\"\"\n Apply a coupon code to the active cart. Appends to the existing set and returns\n the recomputed cart, or typed errors when the code is rejected.\n \"\"\"\n cartCouponApply(\n \"\"\"Coupon code to apply.\"\"\"\n input: CartCouponApplyInput!\n ): CartCouponApplyPayload!\n\n \"\"\"\n Remove a coupon code from the active cart. Idempotent when the code is not applied.\n \"\"\"\n cartCouponRemove(\n \"\"\"Coupon code to remove.\"\"\"\n input: CartCouponRemoveInput!\n ): CartCouponRemovePayload!\n\n \"\"\"\n Re-check the active cart against the platform and return it with each line's\n availability refreshed. Writes nothing: the cart is re-simulated and only\n `items.variant.availability` is corrected, so a line the platform can no longer\n fulfil comes back flagged for the shopper to remove. Quantities are never\n altered, and totals stay as the cart reported them until that removal\n recomputes them. Takes no arguments: the cart is resolved from the request\n context and is never created.\n \"\"\"\n cartValidate: CartValidatePayload!\n\n \"\"\"\n Move the active cart onto the request's sales channel, then reconcile its locale. Takes no\n arguments: the cart is resolved from the request context and is never created. An empty cart, or\n a cart already on the active channel, does not send `sc`. Otherwise one POST to `items/update`\n with `sc` re-sends every item's index and current quantity, so Checkout reprocesses that order\n form and drops lines the destination cannot sell. An upstream failure is reported in `userErrors`\n and does not throw.\n \"\"\"\n cartSalesChannelSync: CartSalesChannelSyncPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Write the provided profile fields to the active cart's clientProfileData\n attachment. Partial: omitted fields are untouched. Never mints a cart.\n \"\"\"\n clientProfileUpdate(\n \"\"\"Profile fields to write.\"\"\"\n input: ClientProfileUpdateInput!\n ): ClientProfileUpdatePayload!\n\n \"\"\"\n Write the provided preference flags to the active cart's clientPreferencesData\n attachment. Partial: omitted flags are untouched. Never mints a cart.\n \"\"\"\n clientPreferencesUpdate(\n \"\"\"Preference flags to write.\"\"\"\n input: ClientPreferencesUpdateInput!\n ): ClientPreferencesUpdatePayload!\n\n \"\"\"\n Set the full delivery address (delivery step). Auto-selects the cheapest SLA\n when available. Never mints a cart.\n \"\"\"\n shippingAddressUpdate(\n \"\"\"Address details to write.\"\"\"\n input: ShippingAddressUpdateInput!\n ): ShippingAddressUpdatePayload!\n\n \"\"\"\n Select one shipping option for the whole cart. Fans the selection out to\n every item. Never mints a cart.\n \"\"\"\n shippingOptionSelect(\n \"\"\"The option to select.\"\"\"\n input: ShippingOptionSelectInput!\n ): ShippingOptionSelectPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Select a payment method, optionally identifying a new card's BIN or a saved card's account.\n \"\"\"\n paymentMethodSelect(\n \"\"\"Method (and optional BIN/saved-card) to select.\"\"\"\n input: PaymentMethodSelectInput!\n ): PaymentMethodSelectPayload!\n\n \"\"\"\n Select an installment count for the currently-selected method. Recomputes the cart total.\n \"\"\"\n paymentInstallmentSelect(\n \"\"\"Installment count to select.\"\"\"\n input: PaymentInstallmentSelectInput!\n ): PaymentInstallmentSelectPayload!\n\n \"\"\"Set the billing address, or fall back to the delivery address.\"\"\"\n paymentBillingAddressUpdate(\n \"\"\"\n Billing address details, or sameAsDelivery: true to use the delivery address.\n \"\"\"\n input: PaymentBillingAddressUpdateInput!\n ): PaymentBillingAddressUpdatePayload!\n\n \"\"\"\n Open a VTEX transaction from the currently-selected payment. No input: every field is server-derived.\n \"\"\"\n paymentStartTransaction: PaymentStartTransactionPayload!\n\n \"\"\"\n Finalize a transaction after the direct-to-gateway payment call succeeded.\n \"\"\"\n paymentGatewayCallback(\n \"\"\"The order group to finalize.\"\"\"\n input: PaymentGatewayCallbackInput!\n ): PaymentGatewayCallbackPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Sign in with email and password. Returns the refreshed session, or typed\n userErrors.\n \"\"\"\n sessionLoginWithPassword(\n \"\"\"The email and password to authenticate with.\"\"\"\n input: SessionPasswordLoginInput!\n ): SessionLoginPayload!\n\n \"\"\"\n Request an email access code. Returns an opaque authenticationToken to\n round-trip into validate.\n \"\"\"\n sessionRequestAccessCode(\n \"\"\"The email to send the access code to.\"\"\"\n input: SessionRequestAccessCodeInput!\n ): SessionRequestAccessCodePayload!\n\n \"\"\"\n Validate an email access code with its authenticationToken. Returns the\n refreshed session.\n \"\"\"\n sessionValidateAccessCode(\n \"\"\"The email, access code, and authenticationToken to validate.\"\"\"\n input: SessionValidateAccessCodeInput!\n ): SessionLoginPayload!\n\n \"\"\"\n Sign out. Clears auth cookies and refreshes the order form to a guest session.\n Idempotent.\n \"\"\"\n sessionLogout: SessionLoginPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Set the shopper's active region from a postal code. Accepts the value as the\n shopper typed it, including any mask; the server normalizes it and derives the\n city.\n \"\"\"\n regionUpdate(\n \"\"\"The postal code to activate, masked or bare.\"\"\"\n postalCode: String!\n ): RegionUpdatePayload!\n}\n\nextend type Mutation {\n \"\"\"\n Partially update the signed-in shopper's own profile. Upserts: succeeds whether or not a record exists.\n \"\"\"\n customerProfileUpdate(\n \"\"\"The fields to write. Provide only what the shopper edited.\"\"\"\n input: CustomerProfileUpdateInput!\n ): CustomerProfileUpdatePayload!\n\n \"\"\"\n Save a new address for the signed-in shopper. The store must ship to the country, and the\n country's rules must accept the fields. Refusals come back as `userErrors`.\n \"\"\"\n customerAddressCreate(\n \"\"\"The address to save.\"\"\"\n input: CustomerAddressCreateInput!\n ): CustomerAddressCreatePayload!\n\n \"\"\"\n Change one of the signed-in shopper's saved addresses. The merged address is validated\n against its stored country. Refusals come back as `userErrors`.\n \"\"\"\n customerAddressUpdate(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n\n \"\"\"The fields to change. Provide only what the shopper edited.\"\"\"\n input: CustomerAddressUpdateInput!\n ): CustomerAddressUpdatePayload!\n\n \"\"\"\n Remove one of the signed-in shopper's saved addresses. An address that is already gone\n counts as removed.\n \"\"\"\n customerAddressDelete(\n \"\"\"The CustomerAddress global id, as returned by `customerAddresses`.\"\"\"\n id: ID!\n ): CustomerAddressDeletePayload!\n}\n\nextend type Mutation {\n \"\"\"\n Request the cancellation of one order owned by the signed-in shopper. Checkout\n records the request and OMS applies it afterwards, so the returned order can\n still show the previous status.\n \"\"\"\n customerOrderCancel(\n \"\"\"Shopper-facing order number.\"\"\"\n id: ID!\n\n \"\"\"The optional reason.\"\"\"\n input: CustomerOrderCancelInput!\n ): CustomerOrderCancelPayload!\n}\n\nextend type Mutation {\n \"\"\"\n Removes one of the signed-in shopper's saved cards, by the id the\n customerSavedCards read returned. Returns the refreshed list on success.\n Throws UNAUTHORIZED / UPSTREAM_ERROR / UPSTREAM_TIMEOUT (ADR-00007).\n \"\"\"\n customerSavedCardRemove(\n \"\"\"The card's id, as customerSavedCards returned it.\"\"\"\n id: ID!\n ): CustomerSavedCardRemovePayload!\n}\n\n\"\"\"\nA manufacturer or designer brand.\nMaps to VTEX Brand entity.\n\"\"\"\ntype Brand implements Node\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Human-readable brand name.\"\"\"\n name: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Whether the brand is currently active in the storefront.\"\"\"\n isActive: Boolean!\n\n \"\"\"Brand logo image.\"\"\"\n logo: Image\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated list of products belonging to this brand.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n}\n\n\"\"\"Paginated list of brands.\"\"\"\ntype BrandsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [BrandEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of brands matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype BrandEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Brand!\n}\n\n\"\"\"\nA hierarchical product classification level (department → category → subcategory).\nMaps to VTEX Category entity. The tree structure is modeled via parent/children\nreferences, allowing arbitrary depth.\n\"\"\"\ntype Category implements Node\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Display name of the category.\"\"\"\n name: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Full materialized path, e.g. \\\"/clothing/shirts/casual\\\".\"\"\"\n path: String!\n\n \"\"\"Zero-indexed depth in the tree (0 = department).\"\"\"\n level: Int!\n\n \"\"\"Whether this category is currently active.\"\"\"\n isActive: Boolean!\n\n \"\"\"Parent category. Null for top-level departments.\"\"\"\n parent: Category\n\n \"\"\"Direct children of this category.\"\"\"\n children: [Category!]!\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated products within this category.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n\n \"\"\"Specification groups relevant to this category.\"\"\"\n specificationGroups: [SpecificationGroup!]!\n}\n\n\"\"\"Paginated list of categories.\"\"\"\ntype CategoriesConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [CategoryEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of categories matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype CategoryEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Category!\n}\n\n\"\"\"\nA group of related specifications that apply to products in a category.\nMaps to VTEX Specification Group.\n\"\"\"\ntype SpecificationGroup {\n \"\"\"Display name (e.g. \\\"Physical Attributes\\\", \\\"Technical Details\\\").\"\"\"\n name: String!\n\n \"\"\"Specifications in this group.\"\"\"\n specifications: [Specification!]!\n}\n\n\"\"\"\nA product-level or variant-level specification field.\nMaps to VTEX Specification / Specification Field.\nExamples: \"Material\", \"Warranty Period\" (product-level);\n\"Color\", \"Size\" (variant-level / option axis).\n\"\"\"\ntype Specification {\n \"\"\"Display label (e.g. \\\"Material\\\").\"\"\"\n name: String!\n\n \"\"\"The assigned values for this specification.\"\"\"\n values: [String!]!\n\n \"\"\"How this spec was captured.\"\"\"\n fieldType: SpecificationFieldType!\n}\n\n\"\"\"A single breadcrumb entry in the product's navigation trail.\"\"\"\ntype BreadcrumbItem {\n \"\"\"Human-readable label (e.g. \"Electronics\", \"Smartphones\").\"\"\"\n name: String!\n\n \"\"\"URL path for this breadcrumb level (e.g. \"/electronics/smartphones\").\"\"\"\n url: String!\n\n \"\"\"1-based position in the breadcrumb trail.\"\"\"\n position: Int!\n}\n\n\"\"\"\nDiscriminates how a specification value was captured.\nMaps to VTEX FieldType numeric codes.\n\"\"\"\nenum SpecificationFieldType {\n \"\"\"Free text.\"\"\"\n TEXT\n\n \"\"\"Multi-line free text.\"\"\"\n MULTI_LINE_TEXT\n\n \"\"\"Single-select dropdown.\"\"\"\n COMBO\n\n \"\"\"Single-select radio.\"\"\"\n RADIO\n\n \"\"\"Multi-select checkbox.\"\"\"\n CHECKBOX\n\n \"\"\"Rich text / HTML.\"\"\"\n RICH_TEXT\n}\n\n\"\"\"\nA named option axis on a product that differentiates variants.\nThink \"Color\" or \"Size\". Each option has a set of possible values.\nSimilar to Shopify's ProductOption.\n\"\"\"\ntype ProductOption {\n \"\"\"Option name (e.g. \\\"Color\\\").\"\"\"\n name: String!\n\n \"\"\"\n All values available across variants (e.g. [\\\"Red\\\", \\\"Blue\\\", \\\"Green\\\"]).\n \"\"\"\n values: [String!]!\n}\n\n\"\"\"\nA concrete option/value pair selected on a specific variant.\nExample: { name: \"Color\", value: \"Red\" }.\n\"\"\"\ntype SelectedOption {\n \"\"\"Option axis name.\"\"\"\n name: String!\n\n \"\"\"Selected value.\"\"\"\n value: String!\n}\n\n\"\"\"\nA purchasable unit of a product.\nMaps to VTEX SKU. In commerce, this is the concrete item a customer adds to cart —\na specific size/color/voltage combination of a product.\n\"\"\"\ntype Variant implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Variant display name (e.g. \\\"Varsity Red — Size 10\\\").\"\"\"\n name: String!\n\n \"\"\"Stock Keeping Unit code. Unique merchant-side identifier.\"\"\"\n sku: String!\n\n \"\"\"\n PDP path segment in the active locale for this SKU, \"{linkId}-{skuId}\".\n \"\"\"\n routeSlug: String!\n\n \"\"\"International Article Number (barcode). Maps to VTEX SKU EAN.\"\"\"\n ean: String\n\n \"\"\"Merchant reference code.\"\"\"\n referenceId: String\n\n \"\"\"Whether this variant is currently available for purchase.\"\"\"\n availableForSale: Boolean!\n\n \"\"\"Current selling price.\"\"\"\n price: Money!\n\n \"\"\"Original list price before promotions. Null when there is no discount.\"\"\"\n compareAtPrice: Money\n\n \"\"\"All option selections that define this variant.\"\"\"\n selectedOptions: [SelectedOption!]!\n\n \"\"\"Variant images. First image is the primary.\"\"\"\n images(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ImagesConnection!\n\n \"\"\"Variant videos.\"\"\"\n videos: [Video!]!\n\n \"\"\"Quantity currently in stock. Null when inventory tracking is disabled.\"\"\"\n quantityAvailable: Int\n\n \"\"\"Unit of sale (e.g. \\\"un\\\", \\\"kg\\\", \\\"l\\\").\"\"\"\n measurementUnit: String!\n\n \"\"\"\n Multiplier for the measurement unit (e.g. 1.5 means each unit is 1.5 kg).\n \"\"\"\n unitMultiplier: Float!\n\n \"\"\"The parent product.\"\"\"\n product: Product!\n\n \"\"\"Variant-level specifications (e.g. voltage, plug type).\"\"\"\n specifications: [Specification!]!\n\n \"\"\"Add-on customizations available for this variant.\"\"\"\n customizations: [Customization!]!\n\n \"\"\"Sellers that fulfill this variant. Relevant in marketplace scenarios.\"\"\"\n sellers: [Seller!]!\n}\n\n\"\"\"Paginated list of variants.\"\"\"\ntype VariantsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [VariantEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of variants matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype VariantEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Variant!\n}\n\n\"\"\"\nA product is a generic item in the catalog (e.g. \"Nike Zoom Janoski\").\nEach product has one or more variants (SKUs) that are the purchasable units.\nMaps to the VTEX Product entity.\n\"\"\"\ntype Product implements Node\n @key(fields: \"slug\")\n @cacheControl(maxAge: 60, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Product title as displayed in the storefront.\"\"\"\n title: String!\n\n \"\"\"URL-friendly handle / slug. Maps to VTEX `LinkId`.\"\"\"\n slug: String!\n\n \"\"\"\n PDP path segment in the active locale, \"{linkId}-{skuId}\" with the representative SKU (in stock first, then lowest\n spot price, then the first SKU). Build product URLs from this, not from `slug`.\n \"\"\"\n routeSlug: String!\n\n \"\"\"Full marketing description.\"\"\"\n description: String\n\n \"\"\"Description rendered as HTML.\"\"\"\n descriptionHtml: HTML\n\n \"\"\"Vendor / manufacturer name. Shortcut for brand.name.\"\"\"\n vendor: String\n\n \"\"\"Whether this product is currently active on the storefront.\"\"\"\n isActive: Boolean!\n\n \"\"\"Whether to show the product even when out of stock.\"\"\"\n showWhenOutOfStock: Boolean!\n\n \"\"\"Date the product was first published.\"\"\"\n publishedAt: DateTime\n\n \"\"\"Release or launch date.\"\"\"\n releaseDate: DateTime\n\n \"\"\"Date the product was created in the system.\"\"\"\n createdAt: DateTime!\n\n \"\"\"Date the product was last updated.\"\"\"\n updatedAt: DateTime!\n\n \"\"\"Merchant reference ID. Maps to VTEX `RefId`.\"\"\"\n referenceId: String\n\n \"\"\"The brand this product belongs to.\"\"\"\n brand: Brand\n\n \"\"\"The primary (most specific) category.\"\"\"\n category: Category\n\n \"\"\"All ancestor categories up to the root department.\"\"\"\n categories: [Category!]!\n\n \"\"\"The price range across all variants.\"\"\"\n priceRange: PriceRange!\n\n \"\"\"The compare-at (original) price range across all variants.\"\"\"\n compareAtPriceRange: PriceRange\n\n \"\"\"Named option axes available on this product (e.g. Color, Size).\"\"\"\n options: [ProductOption!]!\n\n \"\"\"Product-level specifications (e.g. material, care instructions).\"\"\"\n specifications: [Specification!]!\n\n \"\"\"Specification groups with full detail.\"\"\"\n specificationGroups: [SpecificationGroup!]!\n\n \"\"\"All purchasable variants.\"\"\"\n variants(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): VariantsConnection!\n\n \"\"\"Total number of variants.\"\"\"\n totalVariants: Int!\n\n \"\"\"Product images aggregated from all variants.\"\"\"\n images(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ImagesConnection!\n\n \"\"\"All media (images + videos) for this product.\"\"\"\n media(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 12\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): MediaConnection!\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Navigation breadcrumb trail from root category to this product.\"\"\"\n breadcrumbs: [BreadcrumbItem!]!\n\n \"\"\"User-generated review / rating summary.\"\"\"\n rating: Rating\n\n \"\"\"\n Products related to this one (accessories, suggestions). Maps to VTEX SKU Complement.\n \"\"\"\n relatedProducts(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int = 10\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ProductsConnection!\n\n \"\"\"Collections this product belongs to.\"\"\"\n collections: [Collection!]!\n\n \"\"\"\n Sales channels where this product is available. Maps to VTEX Trade Policy.\n \"\"\"\n salesChannels: [SalesChannel!]!\n\n \"\"\"Bundle components if this product is a kit. Maps to VTEX SKU Kit.\"\"\"\n bundleItems: [BundleItem!]!\n}\n\n\"\"\"Paginated list of products.\"\"\"\ntype ProductsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [ProductEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of products matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype ProductEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Product!\n}\n\n\"\"\"Paginated list of images.\"\"\"\ntype ImagesConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [ImageEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype ImageEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Image!\n}\n\n\"\"\"Paginated list of media.\"\"\"\ntype MediaConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [MediaEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype MediaEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Media!\n}\n\n\"\"\"\nAggregate review/rating summary for a product.\nMaps to VTEX Product Review Rate.\n\"\"\"\ntype Rating {\n \"\"\"Average score (e.g. 4.3).\"\"\"\n average: Float!\n\n \"\"\"Total number of reviews.\"\"\"\n count: Int!\n}\n\n\"\"\"\nA curated group of products. Maps to VTEX Collection (Beta) entity.\nCollections can be used for seasonal promotions, editorial picks, etc.\n\"\"\"\ntype Collection implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Collection title.\"\"\"\n title: String!\n\n \"\"\"URL-friendly slug.\"\"\"\n slug: String!\n\n \"\"\"Editorial description.\"\"\"\n description: String\n\n \"\"\"Whether the collection is currently active.\"\"\"\n isActive: Boolean!\n\n \"\"\"Hero / banner image.\"\"\"\n image: Image\n\n \"\"\"SEO metadata.\"\"\"\n seo: SEO\n\n \"\"\"Paginated products in this collection.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n\n \"\"\"Sorting criteria.\"\"\"\n orderBy: ProductSortingInput\n\n \"\"\"Filter criteria.\"\"\"\n filter: ProductsFilterInput\n ): ProductsConnection!\n}\n\n\"\"\"Paginated list of collections.\"\"\"\ntype CollectionsConnection {\n \"\"\"A list of edges.\"\"\"\n edges: [CollectionEdge!]!\n\n \"\"\"Information to aid in pagination.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Total number of collections matching the query.\"\"\"\n totalCount: Int!\n}\n\n\"\"\"An edge in a connection.\"\"\"\ntype CollectionEdge {\n \"\"\"A cursor for pagination.\"\"\"\n cursor: Cursor!\n\n \"\"\"The item at the end of the edge.\"\"\"\n node: Collection!\n}\n\n\"\"\"\nA seller / merchant that fulfills orders for one or more variants.\nMaps to VTEX Seller entity.\n\"\"\"\ntype Seller implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Seller display name.\"\"\"\n name: String!\n\n \"\"\"Whether this is the default (1P) seller.\"\"\"\n isDefault: Boolean!\n\n \"\"\"Seller logo.\"\"\"\n logo: Image\n\n \"\"\"\n The seller's commercial offer for this variant (price, availability, installments).\n \"\"\"\n offer: Offer\n}\n\n\"\"\"\nA seller's commercial offer for a specific variant — includes pricing,\navailability, and available payment/installment options.\n\"\"\"\ntype Offer {\n \"\"\"Current selling price.\"\"\"\n price: Money!\n\n \"\"\"Original list price before promotions.\"\"\"\n listPrice: Money!\n\n \"\"\"\n Best cash/immediate-payment price (e.g. Pix discount). Equals price when there is no spot discount.\n \"\"\"\n spotPrice: Money!\n\n \"\"\"Price before any cart-level or coupon discounts.\"\"\"\n priceWithoutDiscount: Money!\n\n \"\"\"Available quantity from this seller.\"\"\"\n availableQuantity: Int!\n\n \"\"\"Tax amount.\"\"\"\n tax: Money!\n\n \"\"\"\n Tax as a percentage of the price (e.g. 0.18 for 18%). Null when not applicable.\n \"\"\"\n taxPercentage: Float\n\n \"\"\"Loyalty / reward points value earned on this purchase.\"\"\"\n rewardValue: Float!\n\n \"\"\"\n ISO 8601 timestamp after which this price is no longer guaranteed. Null when open-ended.\n \"\"\"\n priceValidUntil: DateTime\n\n \"\"\"SKU IDs of free gifts included with this offer.\"\"\"\n giftSkuIds: [String!]!\n\n \"\"\"\n Named discount labels applied to this offer (e.g. \\\"10% off\\\", \\\"Black Friday\\\").\n \"\"\"\n discountHighlights: [String!]!\n\n \"\"\"Available installment plans grouped by payment method.\"\"\"\n installmentPlans: [InstallmentPlan!]!\n\n \"\"\"\n Active promotions applicable to this offer (e.g. bundle discounts, buy-X-get-Y).\n \"\"\"\n promotions: [Promotion!]!\n}\n\n\"\"\"\nA group of installment options for a single payment method (e.g. \"Visa\", \"Pix\").\n\"\"\"\ntype InstallmentPlan {\n \"\"\"Payment method name (e.g. \\\"Visa\\\", \\\"Mastercard\\\", \\\"Pix\\\").\"\"\"\n paymentMethod: String!\n\n \"\"\"Payment method category.\"\"\"\n paymentType: PaymentType!\n\n \"\"\"\n Available installment tiers, sorted by number of installments ascending.\n \"\"\"\n installments: [Installment!]!\n}\n\n\"\"\"\nA single installment tier within a payment method.\nExample: 6 × R$ 61.65 at 0% interest.\n\"\"\"\ntype Installment {\n \"\"\"Number of installments (1 = single payment).\"\"\"\n count: Int!\n\n \"\"\"Amount per installment.\"\"\"\n value: Money!\n\n \"\"\"Total amount including any interest.\"\"\"\n totalAmount: Money!\n\n \"\"\"Annual interest rate as a percentage (0 = interest-free).\"\"\"\n interestRate: Float!\n\n \"\"\"Whether this tier is interest-free.\"\"\"\n interestFree: Boolean!\n}\n\n\"\"\"Broad category of a payment method.\"\"\"\nenum PaymentType {\n \"\"\"Credit card (Visa, Mastercard, Amex, etc.).\"\"\"\n CREDIT_CARD\n\n \"\"\"Debit card.\"\"\"\n DEBIT_CARD\n\n \"\"\"Instant / real-time payment (Pix, etc.).\"\"\"\n INSTANT\n\n \"\"\"Bank slip / boleto.\"\"\"\n BANK_SLIP\n\n \"\"\"Digital wallet or store-specific payment.\"\"\"\n DIGITAL_WALLET\n\n \"\"\"Other / unknown payment type.\"\"\"\n OTHER\n}\n\n\"\"\"\nAn active promotion or incentive applicable to an offer.\nExamples: \"Buy 3 for R$14.99\", \"9% Pix discount\".\n\"\"\"\ntype Promotion {\n \"\"\"Human-readable promotion name / headline.\"\"\"\n name: String!\n\n \"\"\"Conditions that must be met for the promotion to apply.\"\"\"\n conditions: PromotionConditions!\n\n \"\"\"Effects applied when conditions are met.\"\"\"\n effects: PromotionEffects!\n}\n\n\"\"\"Conditions required for a promotion to activate.\"\"\"\ntype PromotionConditions {\n \"\"\"Minimum quantity of items required (0 = no minimum).\"\"\"\n minimumQuantity: Int!\n\n \"\"\"\n Additional condition parameters (e.g. required payment method, collection membership).\n \"\"\"\n parameters: [PromotionParameter!]!\n}\n\n\"\"\"Effects granted when a promotion's conditions are satisfied.\"\"\"\ntype PromotionEffects {\n \"\"\"Effect parameters describing the discount or benefit.\"\"\"\n parameters: [PromotionParameter!]!\n}\n\n\"\"\"\nA key-value parameter describing a promotion condition or effect.\nCommon keys: \\\"PercentualDiscount\\\", \\\"MaximumUnitPriceDiscount\\\",\n\\\"PaymentMethodId\\\", \\\"CollectionsIdsList\\\".\n\"\"\"\ntype PromotionParameter {\n \"\"\"Parameter key.\"\"\"\n name: String!\n\n \"\"\"Parameter value.\"\"\"\n value: String!\n}\n\n\"\"\"\nA trade policy / sales channel through which products are sold.\nMaps to VTEX Trade Policy / Sales Channel.\n\"\"\"\ntype SalesChannel implements Node\n @cacheControl(maxAge: 3600, scope: PUBLIC)\n{\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Channel name.\"\"\"\n name: String!\n\n \"\"\"ISO 4217 default currency for this channel.\"\"\"\n currencyCode: CurrencyCode!\n\n \"\"\"BCP 47 locale for this channel.\"\"\"\n locale: Locale\n\n \"\"\"Whether the channel is active.\"\"\"\n isActive: Boolean!\n}\n\n\"\"\"\nAn optional, free-form customization that can be attached to a variant.\nMaps to VTEX Attachment. Examples: gift wrapping, engraving, custom message.\n\"\"\"\ntype Customization implements Node {\n \"\"\"Globally unique identifier.\"\"\"\n id: ID!\n\n \"\"\"Display name (e.g. \\\"Gift Message\\\").\"\"\"\n name: String!\n\n \"\"\"Whether this customization is required.\"\"\"\n isRequired: Boolean!\n\n \"\"\"Allowed keys and their constraints.\"\"\"\n fields: [CustomizationField!]!\n}\n\n\"\"\"A single input field within a customization.\"\"\"\ntype CustomizationField {\n \"\"\"Field key (e.g. \\\"message\\\").\"\"\"\n key: String!\n\n \"\"\"Maximum allowed characters.\"\"\"\n maxLength: Int\n\n \"\"\"Regex or enum-based validation domain.\"\"\"\n allowedValues: [String!]\n}\n\n\"\"\"\nA component of a product bundle / kit.\nMaps to VTEX SKU Kit.\n\"\"\"\ntype BundleItem {\n \"\"\"The variant included in the bundle.\"\"\"\n variant: Variant!\n\n \"\"\"Quantity of this variant in the bundle.\"\"\"\n quantity: Int!\n}\n\n\"\"\"Filter criteria for product queries.\"\"\"\ninput ProductsFilterInput {\n \"\"\"Full-text search term.\"\"\"\n searchTerm: String\n\n \"\"\"Include only products in these category IDs.\"\"\"\n categoryIds: [ID!]\n\n \"\"\"Include only products from these brand IDs.\"\"\"\n brandIds: [ID!]\n\n \"\"\"Minimum price filter.\"\"\"\n priceMin: Decimal\n\n \"\"\"Maximum price filter.\"\"\"\n priceMax: Decimal\n\n \"\"\"Include only available (in-stock) products.\"\"\"\n availableOnly: Boolean\n\n \"\"\"Filter by product type / taxonomy label.\"\"\"\n productType: String\n\n \"\"\"\n Filter by specification values, e.g. {name: \\\"Color\\\", values: [\\\"Red\\\", \\\"Blue\\\"]}.\n \"\"\"\n specifications: [SpecificationFilterInput!]\n\n \"\"\"Filter by sales channel ID.\"\"\"\n salesChannelId: ID\n\n \"\"\"Filter by collection ID.\"\"\"\n collectionId: ID\n\n \"\"\"Include only products published after this date.\"\"\"\n publishedAfter: DateTime\n\n \"\"\"Include only products published before this date.\"\"\"\n publishedBefore: DateTime\n\n \"\"\"Filter by tags / keywords.\"\"\"\n tags: [String!]\n}\n\n\"\"\"Allows filtering products by specification name and values.\"\"\"\ninput SpecificationFilterInput {\n \"\"\"Specification name (e.g. \\\"Color\\\").\"\"\"\n name: String!\n\n \"\"\"Accepted values (OR semantics within, AND across different specs).\"\"\"\n values: [String!]!\n}\n\n\"\"\"Sorting input for product queries.\"\"\"\ninput ProductSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: ProductSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting products.\"\"\"\nenum ProductSortField {\n \"\"\"Alphabetical by title.\"\"\"\n TITLE\n\n \"\"\"By price (uses min variant price).\"\"\"\n PRICE\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n\n \"\"\"By last update date.\"\"\"\n UPDATED_AT\n\n \"\"\"By release date.\"\"\"\n RELEASE_DATE\n\n \"\"\"By relevance / scoring.\"\"\"\n RELEVANCE\n\n \"\"\"By number of sales.\"\"\"\n BEST_SELLING\n}\n\n\"\"\"Filter criteria for collection queries.\"\"\"\ninput CollectionsFilterInput {\n \"\"\"Full-text search term.\"\"\"\n searchTerm: String\n\n \"\"\"Include only active collections.\"\"\"\n activeOnly: Boolean\n}\n\n\"\"\"Sorting input for collection queries.\"\"\"\ninput CollectionSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: CollectionSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting collections.\"\"\"\nenum CollectionSortField {\n \"\"\"Alphabetical by title.\"\"\"\n TITLE\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n\n \"\"\"By last update date.\"\"\"\n UPDATED_AT\n}\n\n\"\"\"Sorting input for brand queries.\"\"\"\ninput BrandSortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: BrandSortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting brands.\"\"\"\nenum BrandSortField {\n \"\"\"Alphabetical by name.\"\"\"\n NAME\n\n \"\"\"By creation date.\"\"\"\n CREATED_AT\n}\n\n\"\"\"Sorting input for category queries.\"\"\"\ninput CategorySortingInput {\n \"\"\"Field to sort on.\"\"\"\n field: CategorySortField!\n\n \"\"\"Sort direction.\"\"\"\n direction: SortDirection!\n}\n\n\"\"\"Fields available for sorting categories.\"\"\"\nenum CategorySortField {\n \"\"\"Alphabetical by name.\"\"\"\n NAME\n\n \"\"\"By depth level in the tree.\"\"\"\n LEVEL\n}\n\n\"\"\"\nThe result of a full-text product search, including facets for building\nfilter UI.\n\"\"\"\ntype ProductSearchResult {\n \"\"\"Paginated product results.\"\"\"\n products(\n \"\"\"Returns the first N elements.\"\"\"\n first: Int\n\n \"\"\"Returns elements after this cursor.\"\"\"\n after: Cursor\n\n \"\"\"Returns the last N elements.\"\"\"\n last: Int\n\n \"\"\"Returns elements before this cursor.\"\"\"\n before: Cursor\n ): ProductsConnection!\n\n \"\"\"Available facets/filters derived from the result set.\"\"\"\n facets: [SearchFacet!]!\n\n \"\"\"Corrected or suggested query if the original had a typo.\"\"\"\n suggestedQuery: String\n\n \"\"\"Spelling correction details for the query.\"\"\"\n correction: SearchCorrection\n}\n\n\"\"\"Spelling correction information returned by the search engine.\"\"\"\ntype SearchCorrection {\n \"\"\"Whether the original query was corrected.\"\"\"\n corrected: Boolean!\n\n \"\"\"Whether the original query was misspelled.\"\"\"\n misspelled: Boolean!\n\n \"\"\"The corrected query text.\"\"\"\n text: String\n\n \"\"\"The corrected text with `<em>` tags highlighting the changed parts.\"\"\"\n highlighted: String\n}\n\n\"\"\"A facet returned from search, representing a filterable dimension.\"\"\"\ntype SearchFacet {\n \"\"\"Facet name (e.g. \\\"Brand\\\", \\\"Color\\\", \\\"Price Range\\\").\"\"\"\n name: String!\n\n \"\"\"\n Facet key used in filter parameters (e.g. \\\"brand\\\", \\\"category-1\\\", \\\"price\\\").\n \"\"\"\n key: String!\n\n \"\"\"Type discriminator for rendering the correct UI control.\"\"\"\n type: SearchFacetType!\n\n \"\"\"Whether this facet should be hidden from the UI.\"\"\"\n hidden: Boolean!\n\n \"\"\"Total number of values in this facet.\"\"\"\n quantity: Int!\n\n \"\"\"Individual values within this facet.\"\"\"\n values: [SearchFacetValue!]!\n}\n\n\"\"\"Discriminates the facet UI control type.\"\"\"\nenum SearchFacetType {\n \"\"\"A list of discrete values (brand, color, size).\"\"\"\n LIST\n\n \"\"\"A numeric range (price).\"\"\"\n RANGE\n}\n\n\"\"\"A single value within a search facet.\"\"\"\ntype SearchFacetValue {\n \"\"\"Display label.\"\"\"\n label: String!\n\n \"\"\"Value to send back in the filter.\"\"\"\n value: String!\n\n \"\"\"Number of products matching this facet value.\"\"\"\n count: Int!\n\n \"\"\"Whether the user has currently selected this value.\"\"\"\n isSelected: Boolean!\n\n \"\"\"For RANGE facets: the lower bound.\"\"\"\n rangeFrom: Float\n\n \"\"\"For RANGE facets: the upper bound.\"\"\"\n rangeTo: Float\n\n \"\"\"Navigable href for this facet selection.\"\"\"\n href: String\n}\n\n\"\"\"Recommendation strategy hint.\"\"\"\nenum RecommendationIntent {\n \"\"\"Products related by purchase history.\"\"\"\n RELATED\n\n \"\"\"Products frequently bought together.\"\"\"\n COMPLEMENTARY\n\n \"\"\"Similar products (same category / specs).\"\"\"\n SIMILAR\n}\n\n\"\"\"An autocomplete suggestion returned for a partial search query.\"\"\"\ntype AutocompleteSuggestion {\n \"\"\"The suggested search term.\"\"\"\n term: String!\n\n \"\"\"Estimated number of results for this term.\"\"\"\n count: Int!\n\n \"\"\"\n Suggested facet filters associated with this term (e.g. department, category).\n \"\"\"\n attributes: [AutocompleteAttribute!]!\n}\n\n\"\"\"A facet attribute suggested alongside an autocomplete term.\"\"\"\ntype AutocompleteAttribute {\n \"\"\"Attribute key (e.g. \\\"category-1\\\").\"\"\"\n key: String!\n\n \"\"\"Attribute value (e.g. \\\"alimentos-e-bebidas\\\").\"\"\"\n value: String!\n\n \"\"\"Human-readable label for the key (e.g. \\\"Departamento\\\").\"\"\"\n labelKey: String!\n\n \"\"\"Human-readable label for the value (e.g. \\\"Alimentos e bebidas\\\").\"\"\"\n labelValue: String!\n}\n\n\"\"\"A trending search term.\"\"\"\ntype TrendingSearch {\n \"\"\"The search term.\"\"\"\n term: String!\n\n \"\"\"Number of searches in the recent period.\"\"\"\n count: Int!\n}\n\n\"\"\"Identifies a catalog route. Set exactly one member.\"\"\"\ninput CatalogRouteInput {\n \"\"\"\n Relay node ID of the entity behind the route. Only Product IDs are accepted.\n \"\"\"\n id: ID\n\n \"\"\"\n Logical store route, without the binding's origin or base path\n (e.g. \"/apparel/t-shirts\", \"/shirt-51/p\").\n \"\"\"\n path: String\n}\n\n\"\"\"Kind of entity a catalog route resolves to.\"\"\"\nenum CatalogRouteKind {\n \"\"\"A product detail page.\"\"\"\n PRODUCT\n\n \"\"\"A category or subcategory page.\"\"\"\n CATEGORY\n\n \"\"\"A brand page.\"\"\"\n BRAND\n\n \"\"\"A collection page.\"\"\"\n COLLECTION\n}\n\n\"\"\"\nA catalog route and its confirmed equivalents in every locale the catalog registers.\n\"\"\"\ntype CatalogRoute\n @cacheControl(maxAge: 300, scope: PUBLIC)\n{\n \"\"\"\n Relay node ID of the entity. Stable across locales; the route's identity.\n \"\"\"\n id: ID!\n\n \"\"\"Kind of entity behind the route.\"\"\"\n kind: CatalogRouteKind!\n\n \"\"\"\n One entry per locale the catalog confirms for every segment of the route. Editorial fallback never adds an\n entry. May include locales the store does not publish; intersect with the store's bindings.\n \"\"\"\n variants: [CatalogRouteVariant!]!\n}\n\n\"\"\"A route's equivalent in one locale.\"\"\"\ntype CatalogRouteVariant {\n \"\"\"BCP 47 tag, canonicalized.\"\"\"\n locale: String!\n\n \"\"\"\n Route segment(s) in that locale, lowercased, accents kept. Not percent-encoded.\n \"\"\"\n slug: String!\n\n \"\"\"\n Relative logical path (\"/{slug}\" or \"/{slug}/p\"). No origin, no base path, not percent-encoded.\n \"\"\"\n path: String!\n}\n\n\"\"\"\nA shopping cart representing items a customer intends to purchase.\nMaps to the VTEX orderForm entity.\n\"\"\"\ntype Cart implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Globally unique identifier (Relay Node ID).\"\"\"\n id: ID!\n\n \"\"\"Line items currently in the cart.\"\"\"\n items: [CartItem!]!\n\n \"\"\"Aggregated totals (items, shipping, discounts, etc.).\"\"\"\n totalizers: [CartTotalizer!]!\n\n \"\"\"Total cart value.\"\"\"\n total: Money!\n\n \"\"\"\n Server messages from cart processing (e.g. promotions applied, stock warnings).\n \"\"\"\n messages: [CartMessage!]!\n\n \"\"\"\n The coupon codes currently applied to the cart. Empty when none are applied.\n \"\"\"\n appliedCoupons: [AppliedCoupon!]!\n\n \"\"\"\n Cart-level discounts as labeled lines: one per promotion or coupon, plus a\n residual for whatever they do not account for. Always a list (possibly empty),\n never null.\n \n The itemized companion to the aggregated \"Discounts\" totalizer, which stays on\n `totalizers` unchanged: these entries sum to it, so a summary built on them\n cannot under-report. Distinct from the per-line `CartItem.discounts`, which is\n featured-only and itemized per price tag rather than per promotion.\n \"\"\"\n discounts: [CartDiscount!]!\n\n \"\"\"\n Aggregate item-level catalog markdown: the sum of `(listPrice - price) * quantity`\n across non-gift lines, clamped at zero (in cents from VTEX, exposed as Money). This\n is the reduction from each line's list price down to the price the \"Items\" subtotal\n is built on — the catalog \"de/por\" savings baked into the price before any\n cart-level promotion runs.\n \n Distinct money from the cart-level promotions and coupons on the \"Discounts\"\n totalizer and `discounts` (those are `price - sellingPrice`, the reduction below the\n subtotal): item markdown sits *above* the subtotal, so it is never part of\n `totalizers` and never summed into `total`. It is an informational savings figure and\n is zero when no line is marked down. Gift lines are excluded — a gift's value is\n already a promotion entry in `discounts`.\n \"\"\"\n itemMarkdownTotal: Money!\n\n \"\"\"\n Progress toward the cart's nearest free-shipping promotion. Null when no\n eligible free-shipping promotion is identified for this cart.\n \"\"\"\n freeShippingProgress: FreeShippingProgress\n\n \"\"\"\n Non-null when the cart belongs to a different sales channel than the request's active context. The\n cart is left exactly as it was: nothing here reprices it or removes an item. Converging it is the\n `cartSalesChannelSync` write, and that write makes Checkout reprocess the same orderForm — prices,\n promotions, coupons and logistics are recomputed and items not sellable in the destination channel\n are removed by Checkout, while orderFormId, attachments and addresses survive.\n \"\"\"\n salesChannelMismatch: CartSalesChannelMismatch\n}\n\n\"\"\"\nThe two sales channels that disagree. Both are trade-policy identifiers.\n\"\"\"\ntype CartSalesChannelMismatch {\n \"\"\"The channel the cart is currently on.\"\"\"\n cartSalesChannel: String!\n\n \"\"\"The channel the request's active context resolves to.\"\"\"\n activeSalesChannel: String!\n}\n\n\"\"\"\nProgress toward the cart's nearest free-shipping promotion, derived from the\npromotion teasers on a checkout simulation run with the cart's destination.\nNull until the cart has a destination, and when no eligible free-shipping\npromotion is identified for this cart (none configured, none teaser-emitting,\nempty cart, or unreadable promotion data) — absence is a normal state, never\nan error.\n\"\"\"\ntype FreeShippingProgress {\n \"\"\"\n Minimum qualifying cart total for the promotion. Null when the cart already\n qualifies: the promotion teaser disappears once met, so the threshold is no\n longer reported upstream.\n \"\"\"\n threshold: Money\n\n \"\"\"Amount still to add to qualify. Zero when the cart qualifies.\"\"\"\n remaining: Money!\n\n \"\"\"Whether the cart currently qualifies for free shipping.\"\"\"\n qualified: Boolean!\n}\n\n\"\"\"\nOne labeled cart-level discount line, attributed to the promotion or coupon that\ngranted it. Amounts are summed from the cart's price tags and reconciled against\nthe aggregated \"Discounts\" totalizer.\n\"\"\"\ntype CartDiscount {\n \"\"\"\n The promotion's name, or the coupon code exactly as the shopper entered it.\n Null when nothing upstream names this amount: always for OTHER, and for a\n promotion the platform left unnamed. The consumer supplies the label in that\n case; an internal promotion identifier is never exposed here.\n \"\"\"\n name: String\n\n \"\"\"\n Amount taken off by this line, as a positive monetary value. The minus sign is\n presentational and applied by the UI. Never zero: a promotion that took nothing\n off this cart is omitted rather than reported as an empty line.\n \"\"\"\n value: Money!\n\n \"\"\"\n Where this line came from: an automatic promotion, a coupon, or the residual.\n \"\"\"\n kind: CartDiscountKind!\n}\n\n\"\"\"Origin of a cart-level discount line.\"\"\"\nenum CartDiscountKind {\n \"\"\"An automatically applied promotion.\"\"\"\n PROMOTION\n\n \"\"\"A promotion matched by a coupon code the shopper entered.\"\"\"\n COUPON\n\n \"\"\"\n The part of the aggregate discount that no named promotion or coupon accounts\n for — a promotion the merchant did not feature, a discount the platform never\n itemized, or rounding. At most one entry, always last.\n \"\"\"\n OTHER\n}\n\n\"\"\"\nA coupon code applied to the cart, with whether its promotion conditions matched.\n\"\"\"\ntype AppliedCoupon {\n \"\"\"The coupon code, stored verbatim as the shopper entered it.\"\"\"\n code: String!\n\n \"\"\"\n True when the code is on the cart but its promotion conditions did not match\n (no discount granted).\n \"\"\"\n isUnmatchedCondition: Boolean!\n}\n\n\"\"\"\nA single line item in the cart. Carries a historical snapshot of the variant\nand product at the time it was added: cart-line value objects describe what\nthe customer actually has, not what the catalog says about it today.\n\"\"\"\ntype CartItem {\n \"\"\"\n Cart-scoped line identifier (opaque, stable across mutations for the same line).\n Encoded as Base64(\"CartItem:<orderFormId>:<uniqueId>\"). Not a Relay Node; this id\n exists only to serve as a stable cache key for clients doing optimistic UI.\n \"\"\"\n id: ID!\n\n \"\"\"\n Variant snapshot for this line. Built from the order line itself, not from\n a live catalog read.\n \"\"\"\n variant: CartVariant!\n\n \"\"\"\n Product snapshot for this line. Built from the order line itself, not from\n a live catalog read.\n \"\"\"\n product: CartProduct!\n\n \"\"\"Quantity of this variant in the cart.\"\"\"\n quantity: Int!\n\n \"\"\"Unit price (in cents from VTEX, exposed as Money).\"\"\"\n price: Money!\n\n \"\"\"Original list price before discounts.\"\"\"\n listPrice: Money!\n\n \"\"\"Final selling price after discounts.\"\"\"\n sellingPrice: Money!\n\n \"\"\"Whether this line is a gift item.\"\"\"\n gift: Boolean!\n\n \"\"\"\n Discounts applied to this line, one entry per featured promotion price tag that\n carries a currency amount. Always a list (possibly empty), never null. The\n per-line, itemized companion to the aggregated \"Discounts\" totalizer on Cart —\n not a replacement for it.\n \n Percentage-configured promotions are absent: their price tag carries a rate\n rather than an amount, so there is no monetary value to report per line. Use\n `Cart.discounts` for a breakdown that accounts for every discount, naming what\n it can and reporting the rest as a residual.\n \"\"\"\n discounts: [CartItemDiscount!]!\n\n \"\"\"\n Upstream line identifier (order-form uniqueId). The stable per-line address:\n with customizations, the same variant can appear as several distinct lines,\n so variantId is not unique per line. Stable across cart mutations.\n \"\"\"\n lineId: String!\n\n \"\"\"\n This line's own total (own unit selling price × quantity, rounding-exact),\n excluding composition children.\n \"\"\"\n ownTotal: Money!\n\n \"\"\"\n This line's total including all nested composition children, recursively.\n Equals ownTotal when the line has no compositions.\n \"\"\"\n total: Money!\n\n \"\"\"\n Form-based customizations applied to this line (personalization text,\n selections, uploaded-file URLs). Empty when the line has none.\n \"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"\n Child products added to this line by bundle/assembly choices. Children are\n not top-level cart lines; they ship, and are removed, with their parent.\n \"\"\"\n compositions: [CartItemComposition!]!\n\n \"\"\"\n The cart-wide delivery options this item is eligible for: the same ShippingOption\n entities Shipping.options lists, carrying the shared-pool price, not a per-item\n quote. Excludes pickup options; delivery channel only.\n \"\"\"\n shippingOptions: [ShippingOption!]!\n\n \"\"\"\n This item's own currently selected delivery option, or null when no selection\n is persisted or the persisted selection is a pickup option.\n \"\"\"\n selectedShippingOption: ItemShippingOption\n}\n\n\"\"\"\nOne customization group applied to a cart line, keyed by the upstream\nassembly id. Entries are the shopper's submitted key/value pairs.\n\"\"\"\ntype CartItemCustomization {\n \"\"\"Upstream assembly identifier (e.g. \"Engraving\", \"Optional features\").\"\"\"\n id: String!\n\n \"\"\"\n Submitted values, one entry per input field. File uploads carry the file URL\n as the value.\n \"\"\"\n entries: [CartItemCustomizationEntry!]!\n}\n\n\"\"\"A single submitted customization field.\"\"\"\ntype CartItemCustomizationEntry\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Field name as defined by the assembly (e.g. \"Text\").\"\"\"\n name: String!\n\n \"\"\"Submitted value, stringified. File uploads carry the file URL.\"\"\"\n value: String!\n}\n\n\"\"\"\nA child product nested under a cart line by a bundle/assembly choice. Slim by\ndesign: children are not independently addressable cart lines. May carry its\nown children (nested assemblies).\n\"\"\"\ntype CartItemComposition {\n \"\"\"\n Identifier for this child line, scoped to the cart's order form or to the\n order's group (same opaque encoding as CartItem.id). Cache key only; not\n independently mutable.\n \"\"\"\n id: ID!\n\n \"\"\"Display name as recorded on the order line.\"\"\"\n name: String!\n\n \"\"\"Quantity of this child in the composition.\"\"\"\n quantity: Int!\n\n \"\"\"Unit selling price of the child.\"\"\"\n price: Money!\n\n \"\"\"\n The child's own availability. The parent's variant.availability already\n reflects the worst state across the whole composition.\n \"\"\"\n availability: CartItemAvailability!\n\n \"\"\"\n The assembly group that added this child (upstream parentAssemblyBinding,\n e.g. \"Material Product_Material\").\n \"\"\"\n assemblyId: String!\n\n \"\"\"This child's own total, excluding its nested children.\"\"\"\n ownTotal: Money!\n\n \"\"\"This child's total including its nested children, recursively.\"\"\"\n total: Money!\n\n \"\"\"\n Form-based customizations applied to this child. A composition child is\n itself an order-form line and can carry its own input assemblies. Empty\n when it has none.\n \"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"Nested composition children of this child. Empty when it has none.\"\"\"\n compositions: [CartItemComposition!]!\n}\n\n\"\"\"\nA single discount applied to a cart line, broken out from that line's price tags.\nSourced from items[].priceTags filtered to featured promotions carrying a currency\namount; the aggregate discount total stays on the Cart \"Discounts\" totalizer.\n\"\"\"\ntype CartItemDiscount {\n \"\"\"\n Human-readable label resolved from the matched promotion (e.g. \"Black Friday\").\n Falls back to the price tag identifier when the promotion has no name.\n \"\"\"\n name: String!\n\n \"\"\"\n Amount taken off by this discount, as a positive monetary value. The minus\n sign is presentational and applied by the UI.\n \"\"\"\n value: Money!\n\n \"\"\"\n Always false. A price tag expressing a percentage carries a rate rather than a\n currency amount, so it has no value this type can report and is excluded from\n the list. Retained for compatibility; branching on it gains nothing.\n \"\"\"\n isPercentual: Boolean!\n}\n\n\"\"\"\nStock availability status for a cart line. Mapped from the upstream\norder-form availability strings; UNKNOWN absorbs values we haven't classified.\n\"\"\"\nenum CartItemAvailability {\n \"\"\"In stock and shippable.\"\"\"\n AVAILABLE\n\n \"\"\"Known to be out of stock.\"\"\"\n OUT_OF_STOCK\n\n \"\"\"\n Other known-bad states (cannot deliver, fulfillment unavailable, etc.).\n \"\"\"\n UNAVAILABLE\n\n \"\"\"Upstream returned a state we don't recognize yet.\"\"\"\n UNKNOWN\n}\n\n\"\"\"\nCart-line snapshot of a Variant. Value object: holds the line-level facts\nrecorded at add-to-cart time. Does not implement Node; refetch the live\ncatalog Variant via Query.node(variantId) when needed.\n\"\"\"\ntype CartVariant {\n \"\"\"\n Relay Node ID of the catalog Variant this line refers to. Use it with\n Query.node to refetch the live Variant.\n \"\"\"\n variantId: ID!\n\n \"\"\"Stock-keeping unit code as recorded on the order line.\"\"\"\n sku: String!\n\n \"\"\"\n Display name as recorded on the order line (e.g. \"Classic T-Shirt - Red / M\").\n \"\"\"\n name: String!\n\n \"\"\"\n Single image captured at add-to-cart time. Null when no image URL was recorded.\n \"\"\"\n image: Image\n\n \"\"\"\n International Article Number (barcode). May be empty for items without one.\n \"\"\"\n ean: String\n\n \"\"\"Merchant SKU reference code.\"\"\"\n referenceId: String\n\n \"\"\"Availability classification of this line.\"\"\"\n availability: CartItemAvailability!\n\n \"\"\"Unit of sale (e.g. \"un\", \"kg\").\"\"\"\n measurementUnit: String!\n\n \"\"\"Multiplier for the measurement unit.\"\"\"\n unitMultiplier: Float!\n\n \"\"\"Seller fulfilling this line.\"\"\"\n seller: CartSellerRef!\n\n \"\"\"\n Variations selected on this cart line (e.g. Cor: Vermelho, Tamanho: M). [] when the SKU has\n no variations, never null. Resolved server-side from catalog data (ADR-00012); use this field\n instead of a Query.node(variantId) refetch to read a line's selected options.\n \"\"\"\n selectedOptions: [SelectedOption!]!\n}\n\n\"\"\"\nCart-line snapshot of a Product. Value object: holds the line-level facts\nrecorded at add-to-cart time. Does not implement Node; refetch the live\ncatalog Product via Query.node(productId) when needed.\n\"\"\"\ntype CartProduct {\n \"\"\"\n Relay Node ID of the catalog Product. Use it with Query.node to refetch\n the live Product.\n \"\"\"\n productId: ID!\n\n \"\"\"Product title as recorded on the order line.\"\"\"\n title: String!\n\n \"\"\"Product detail URL as recorded on the order line.\"\"\"\n detailUrl: String!\n\n \"\"\"Categories root-to-leaf as recorded on the order line.\"\"\"\n categories: [CartCategoryRef!]!\n\n \"\"\"\n Brand reference as recorded on the order line. Null when the product has no brand.\n \"\"\"\n brand: CartBrandRef\n}\n\n\"\"\"\nLightweight reference to a Category captured on a cart line. Carries enough\nidentity to deep-link back to the live Category via Query.node.\n\"\"\"\ntype CartCategoryRef {\n \"\"\"Relay Node ID of the catalog Category.\"\"\"\n categoryId: ID!\n\n \"\"\"Category name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"Lightweight reference to a Brand captured on a cart line.\"\"\"\ntype CartBrandRef {\n \"\"\"Relay Node ID of the catalog Brand.\"\"\"\n brandId: ID!\n\n \"\"\"Brand name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"Lightweight reference to a Seller captured on a cart line.\"\"\"\ntype CartSellerRef {\n \"\"\"Relay Node ID of the catalog Seller.\"\"\"\n sellerId: ID!\n\n \"\"\"Seller display name as recorded on the order line.\"\"\"\n name: String!\n}\n\n\"\"\"\nAn aggregated total section in the cart (e.g. Items, Shipping, Discounts).\n\"\"\"\ntype CartTotalizer {\n \"\"\"Totalizer key (e.g. \"Items\", \"Shipping\", \"Discounts\").\"\"\"\n id: String!\n\n \"\"\"Human-readable label.\"\"\"\n name: String!\n\n \"\"\"Totalizer value.\"\"\"\n value: Money!\n}\n\n\"\"\"\nA server message attached to the cart (promotions applied, warnings, etc.).\n\"\"\"\ntype CartMessage {\n \"\"\"Message code identifier.\"\"\"\n code: String\n\n \"\"\"Human-readable message text.\"\"\"\n text: String!\n\n \"\"\"Message severity (e.g. \"info\", \"warning\", \"error\").\"\"\"\n status: String!\n}\n\n\"\"\"Input for adding an item to a cart.\"\"\"\ninput CartItemAddInput {\n \"\"\"The variant's global Node ID to add.\"\"\"\n variantId: ID!\n\n \"\"\"Quantity to add. Defaults to 1.\"\"\"\n quantity: Int = 1\n\n \"\"\"\n The seller's global Node ID. Defaults to the first-party seller (Seller:1).\n \"\"\"\n seller: ID = \"U2VsbGVyOjE=\"\n}\n\n\"\"\"Input for removing a line from a cart.\"\"\"\ninput CartItemRemoveInput {\n \"\"\"The line to remove: its `CartItem.lineId`.\"\"\"\n lineId: String!\n}\n\n\"\"\"Input for removing multiple lines from a cart in one call.\"\"\"\ninput CartItemsRemoveInput {\n \"\"\"\n The lines to remove: their `CartItem.lineId` values. Duplicates are collapsed.\n \"\"\"\n lineIds: [String!]!\n}\n\n\"\"\"Input for increasing the quantity of a cart line.\"\"\"\ninput CartItemQuantityIncreaseInput {\n \"\"\"The line whose quantity to increase: its `CartItem.lineId`.\"\"\"\n lineId: String!\n\n \"\"\"Amount to add to the current quantity. Defaults to 1.\"\"\"\n quantityToAdd: Int = 1\n}\n\n\"\"\"Input for decreasing the quantity of a cart line.\"\"\"\ninput CartItemQuantityDecreaseInput {\n \"\"\"The line whose quantity to decrease: its `CartItem.lineId`.\"\"\"\n lineId: String!\n\n \"\"\"Amount to subtract from the current quantity. Defaults to 1.\"\"\"\n quantityToRemove: Int = 1\n}\n\n\"\"\"Input for applying a coupon code to the cart.\"\"\"\ninput CartCouponApplyInput {\n \"\"\"The coupon code to apply, sent verbatim.\"\"\"\n code: String!\n}\n\n\"\"\"Input for removing a coupon code from the cart.\"\"\"\ninput CartCouponRemoveInput {\n \"\"\"The coupon code to remove from the applied set.\"\"\"\n code: String!\n}\n\n\"\"\"Error codes for cart item add operations.\"\"\"\nenum CartItemAddErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n\n \"\"\"The provided seller ID is not a valid Seller Node ID.\"\"\"\n INVALID_SELLER_ID\n}\n\n\"\"\"Error codes for cart item remove operations.\"\"\"\nenum CartItemRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The specified line was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The upstream checkout API returned an unusable response.\"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"Error codes for cart items batch remove operations.\"\"\"\nenum CartItemsRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"None of the specified lines were found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The input contained no line IDs.\"\"\"\n NO_LINE_IDS_PROVIDED\n\n \"\"\"The upstream checkout API returned an unusable response.\"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"Error codes for cart item quantity increase operations.\"\"\"\nenum CartItemQuantityIncreaseErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The specified line was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The upstream checkout API returned an unusable response.\"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"Error codes for cart item quantity decrease operations.\"\"\"\nenum CartItemQuantityDecreaseErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The quantity must be a positive integer.\"\"\"\n INVALID_QUANTITY\n\n \"\"\"The specified line was not found in the cart.\"\"\"\n ITEM_NOT_FOUND\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The upstream checkout API returned an unusable response.\"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"A domain error returned from a cart item add mutation.\"\"\"\ntype CartItemAddError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemAddErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item remove mutation.\"\"\"\ntype CartItemRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart items batch remove mutation.\"\"\"\ntype CartItemsRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemsRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item quantity increase mutation.\"\"\"\ntype CartItemQuantityIncreaseError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemQuantityIncreaseErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart item quantity decrease mutation.\"\"\"\ntype CartItemQuantityDecreaseError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartItemQuantityDecreaseErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartItemAdd mutation.\"\"\"\ntype CartItemAddPayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemAddError!]!\n}\n\n\"\"\"Payload returned by the cartItemRemove mutation.\"\"\"\ntype CartItemRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemRemoveError!]!\n}\n\n\"\"\"Payload returned by the cartItemsRemove mutation.\"\"\"\ntype CartItemsRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemsRemoveError!]!\n}\n\n\"\"\"Payload returned by the cartItemQuantityIncrease mutation.\"\"\"\ntype CartItemQuantityIncreasePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemQuantityIncreaseError!]!\n}\n\n\"\"\"Payload returned by the cartItemQuantityDecrease mutation.\"\"\"\ntype CartItemQuantityDecreasePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartItemQuantityDecreaseError!]!\n}\n\n\"\"\"Error codes for cart coupon apply operations.\"\"\"\nenum CartCouponApplyErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The coupon code is empty, unknown, or not accepted by this cart.\"\"\"\n COUPON_NOT_FOUND\n\n \"\"\"The coupon code has expired.\"\"\"\n COUPON_EXPIRED\n\n \"\"\"\n The code was rejected while another coupon was applied, and the applied coupons were kept. The\n platform does not say whether the code is unknown or cannot be combined with them.\n \"\"\"\n COUPON_NOT_COMBINED\n}\n\n\"\"\"Error codes for cart coupon remove operations.\"\"\"\nenum CartCouponRemoveErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n A surviving coupon was rejected by the cart after the removal (unknown or not accepted).\n \"\"\"\n COUPON_NOT_FOUND\n\n \"\"\"A surviving coupon has expired.\"\"\"\n COUPON_EXPIRED\n}\n\n\"\"\"A domain error returned from a cart coupon apply mutation.\"\"\"\ntype CartCouponApplyError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartCouponApplyErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a cart coupon remove mutation.\"\"\"\ntype CartCouponRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartCouponRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartCouponApply mutation.\"\"\"\ntype CartCouponApplyPayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartCouponApplyError!]!\n}\n\n\"\"\"Payload returned by the cartCouponRemove mutation.\"\"\"\ntype CartCouponRemovePayload {\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartCouponRemoveError!]!\n}\n\n\"\"\"Error codes for cart validation operations.\"\"\"\nenum CartValidateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n The upstream checkout API could not be reached or returned an unusable response.\n \"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"A domain error returned from a cart validate mutation.\"\"\"\ntype CartValidateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartValidateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the cartValidate mutation.\"\"\"\ntype CartValidatePayload {\n \"\"\"The re-checked cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartValidateError!]!\n}\n\n\"\"\"Error codes for moving a cart onto the active sales channel.\"\"\"\nenum CartSalesChannelSyncErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n The upstream checkout API could not be reached or returned an unusable response.\n \"\"\"\n UPSTREAM_ERROR\n}\n\n\"\"\"A domain error returned from the cartSalesChannelSync mutation.\"\"\"\ntype CartSalesChannelSyncError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CartSalesChannelSyncErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"\nPayload returned by the cartSalesChannelSync mutation.\n\nThe cart comes from the request context and is never created. An empty cart, or a cart already on\nthe active sales channel, does not send `sc`. Otherwise one POST to `items/update` with `sc`\nre-sends every item's index and current quantity, so Checkout reprocesses that order form and drops\nlines the destination cannot sell, and then the locale is reconciled. An upstream failure is\nreported in `userErrors` and does not throw.\n\"\"\"\ntype CartSalesChannelSyncPayload {\n \"\"\"\n The cart after the channel move and locale reconciliation, or null if errors occurred.\n \"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [CartSalesChannelSyncError!]!\n}\n\n\"\"\"The delivery channel for a shipping option.\"\"\"\nenum DeliveryChannel {\n \"\"\"Home delivery.\"\"\"\n DELIVERY\n\n \"\"\"Pickup in store or pickup point.\"\"\"\n PICKUP\n\n \"\"\"Unrecognised delivery channel returned by the fulfillment provider.\"\"\"\n UNKNOWN\n}\n\n\"\"\"The unit of a shipping time estimate.\"\"\"\nenum ShippingEstimateUnit {\n \"\"\"Calendar days (e.g. \"7d\").\"\"\"\n DAYS\n\n \"\"\"Business days, excluding weekends and holidays (e.g. \"5bd\").\"\"\"\n BUSINESS_DAYS\n\n \"\"\"Hours (e.g. \"7h\").\"\"\"\n HOURS\n\n \"\"\"Minutes (e.g. \"119m\").\"\"\"\n MINUTES\n}\n\n\"\"\"\nParsed shipping time estimate (e.g. \"5bd\" → { value: 5, unit: BUSINESS_DAYS }).\n\"\"\"\ntype ShippingEstimate {\n \"\"\"Numeric quantity of the estimate.\"\"\"\n value: Int!\n\n \"\"\"Time unit for the estimate.\"\"\"\n unit: ShippingEstimateUnit!\n}\n\n\"\"\"\nOne cart item's current selection. Its price and estimate are Checkout's real values for\nthis item; option carries the shared name and channel. All values are a live snapshot:\nanother item joining or leaving the same SLA can change them.\n\"\"\"\ntype ItemShippingOption {\n \"\"\"\n Opaque delivery option identifier, encoded to distinguish per-item options\n from cart-wide options so the Apollo cache never conflates them.\n \"\"\"\n id: ID!\n\n \"\"\"The cart-wide shipping option this selection belongs to.\"\"\"\n option: ShippingOption!\n\n \"\"\"Estimated shipping time for this item.\"\"\"\n shippingEstimate: ShippingEstimate!\n\n \"\"\"Shipping cost for this item. Zero when free shipping applies.\"\"\"\n price: Money!\n\n \"\"\"Shipping list price for this item before any promotions.\"\"\"\n listPrice: Money!\n}\n\n\"\"\"\nA shipping option with at least one cart item currently selected on it. Its price and\nshippingEstimateList cover only those items, recomputed on every request.\n\"\"\"\ntype SelectedShippingOption {\n \"\"\"The cart-wide shipping option these items selected.\"\"\"\n option: ShippingOption!\n\n \"\"\"\n Cart items currently selected on this option (not every eligible item).\n \"\"\"\n items: [CartItem!]!\n\n \"\"\"Sum of items[].selectedShippingOption.price.\"\"\"\n price: Money!\n\n \"\"\"Sum of items[].selectedShippingOption.listPrice.\"\"\"\n listPrice: Money!\n\n \"\"\"\n items[].selectedShippingOption.shippingEstimate, one entry per item, unreduced and\n uncompared.\n \"\"\"\n shippingEstimateList: [ShippingEstimate!]!\n}\n\n\"\"\"A shipping option available for a given item and destination.\"\"\"\ntype ShippingOption {\n \"\"\"Opaque delivery option identifier.\"\"\"\n id: ID!\n\n \"\"\"\n Human-readable option name (e.g. \"Standard Delivery\"). Derived from a Checkout simulation, which\n sends no `Accept-Language` and keys its SKU cache without a locale, so this text is NOT localized:\n it may read in the account's default culture on a non-default binding.\n \"\"\"\n name: String!\n\n \"\"\"Delivery channel: home delivery or pickup.\"\"\"\n channel: DeliveryChannel!\n\n \"\"\"\n Estimated shipping time, sampled from one eligible item. Delivery estimates can genuinely vary\n per item under the same option; use shippingEstimateList for every item's own value.\n \"\"\"\n shippingEstimate: ShippingEstimate! @deprecated(reason: \"Sampled from one item and can misrepresent the others. Use shippingEstimateList.\") @deprecationDate(deletionDate: \"2027-03-31\")\n\n \"\"\"\n Every eligible item's own shippingEstimate, one entry per item, unreduced and uncompared.\n \"\"\"\n shippingEstimateList: [ShippingEstimate!]!\n\n \"\"\"\n Shipping cost for every item this option covers. Zero when free shipping applies. A live\n estimate of the shared per-SLA pool, not a guaranteed quote.\n \"\"\"\n price: Money!\n\n \"\"\"Shipping list price before any promotions, summed like price.\"\"\"\n listPrice: Money!\n\n \"\"\"Cart items for which this option is currently available.\"\"\"\n items: [CartItem!]!\n}\n\n\"\"\"Error codes for shipping simulation operations.\"\"\"\nenum ShippingSimulateErrorCode {\n \"\"\"The postal code was not found or rejected by the fulfillment provider.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The provided variant ID is not a valid Variant Node ID.\"\"\"\n INVALID_VARIANT_ID\n\n \"\"\"The provided seller ID is not a valid Seller Node ID.\"\"\"\n INVALID_SELLER_ID\n\n \"\"\"\n No active cart in context: the cartShippingSimulation query requires an x-order-form-id and never mints a cart.\n \"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from the shippingSimulation query.\"\"\"\ntype ShippingSimulateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingSimulateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingSimulation query.\"\"\"\ntype ShippingSimulationPayload {\n \"\"\"\n Available shipping options for the given item and destination.\n Null when userErrors is non-empty.\n \"\"\"\n shippingOptions: [ShippingOption!]\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingSimulateError!]!\n}\n\n\"\"\"Input for simulating shipping options for a single variant on a PDP.\"\"\"\ninput ShippingSimulateInput {\n \"\"\"Postal code of the delivery destination.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n\n \"\"\"The variant's global Node ID to simulate shipping for.\"\"\"\n variantId: ID!\n\n \"\"\"Quantity of the variant. Must be at least 1.\"\"\"\n quantity: Int!\n\n \"\"\"The seller's global Node ID responsible for the variant.\"\"\"\n seller: ID!\n}\n\n\"\"\"\nInput for simulating shipping for the whole active cart. Carries the\ndestination only; items are sourced from the cart in the x-order-form-id\ncontext, so there is no variant, quantity, or seller.\n\"\"\"\ninput CartShippingSimulateInput {\n \"\"\"Postal code of the delivery destination.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n}\n\n\"\"\"Payload returned by the cartShippingSimulation query.\"\"\"\ntype CartShippingSimulationPayload {\n \"\"\"\n Shipping options available for every item in the cart, prices summed across\n items. Empty when the cart is empty or no option is common to all items.\n Null when userErrors is non-empty.\n \"\"\"\n shippingOptions: [ShippingOption!]\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingSimulateError!]!\n}\n\n\"\"\"\nThe shopper's profile, projected from the order form's clientProfileData.\nA sibling of Cart, not nested under it. Individual (B2C) only.\n\"\"\"\ntype ClientProfile implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Contact email as recorded on the order form. Null when no profile is set.\n \"\"\"\n email: String\n\n \"\"\"Given name. Null when unset.\"\"\"\n firstName: String\n\n \"\"\"Family name. Null when unset.\"\"\"\n lastName: String\n\n \"\"\"Contact phone in the order form's stored format. Null when unset.\"\"\"\n phone: String\n\n \"\"\"Tax document (CPF for Individual shoppers). Null when unset.\"\"\"\n document: String\n}\n\n\"\"\"\nThe shopper's preference opt-ins, projected from the order form's\nclientPreferencesData. A sibling of Cart, not nested under it.\n\"\"\"\ntype ClientPreferences implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"Newsletter opt-in. Null when the shopper has not chosen.\"\"\"\n optinNewsLetter: Boolean\n\n \"\"\"Save-personal-data opt-in. Null when the shopper has not chosen.\"\"\"\n savePersonalData: Boolean\n}\n\n\"\"\"\nPartial profile update. Provide only the fields to write; omitted fields are\nleft unchanged.\n\"\"\"\ninput ClientProfileUpdateInput {\n \"\"\"Contact email to write. Omit to leave unchanged.\"\"\"\n email: String\n\n \"\"\"Given name to write. Omit to leave unchanged.\"\"\"\n firstName: String\n\n \"\"\"Family name to write. Omit to leave unchanged.\"\"\"\n lastName: String\n\n \"\"\"Contact phone to write. Omit to leave unchanged.\"\"\"\n phone: String\n\n \"\"\"Tax document to write. Omit to leave unchanged.\"\"\"\n document: String\n}\n\n\"\"\"\nPartial preferences update. Provide only the flags to write; omitted flags are\nleft unchanged.\n\"\"\"\ninput ClientPreferencesUpdateInput {\n \"\"\"Newsletter opt-in to write. Omit to leave unchanged.\"\"\"\n optinNewsLetter: Boolean\n\n \"\"\"Save-personal-data opt-in to write. Omit to leave unchanged.\"\"\"\n savePersonalData: Boolean\n}\n\n\"\"\"Error codes for client profile update operations.\"\"\"\nenum ClientProfileUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The input contained no profile fields to write.\"\"\"\n NO_PROFILE_FIELD_PROVIDED\n}\n\n\"\"\"Error codes for client preferences update operations.\"\"\"\nenum ClientPreferencesUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The input contained no preferences to write.\"\"\"\n NO_PREFERENCE_PROVIDED\n}\n\n\"\"\"A domain error returned from a client profile update mutation.\"\"\"\ntype ClientProfileUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ClientProfileUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"A domain error returned from a client preferences update mutation.\"\"\"\ntype ClientPreferencesUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ClientPreferencesUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the clientProfileUpdate mutation.\"\"\"\ntype ClientProfileUpdatePayload {\n \"\"\"The updated profile, or null if a context/validation error occurred.\"\"\"\n clientProfile: ClientProfile\n\n \"\"\"\n The session after the write, reflecting the now-current isIdentified derived from\n clientProfileData.email. Null alongside clientProfile on a context/validation error.\n \"\"\"\n session: Session\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ClientProfileUpdateError!]!\n}\n\n\"\"\"Payload returned by the clientPreferencesUpdate mutation.\"\"\"\ntype ClientPreferencesUpdatePayload {\n \"\"\"\n The updated preferences, or null if a context/validation error occurred.\n \"\"\"\n clientPreferences: ClientPreferences\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ClientPreferencesUpdateError!]!\n}\n\n\"\"\"\nThe delivery address, saved addresses, and shipping options for the cart.\nA read-only sibling of Cart, projected from the same order form fetch.\nNull fields project explicitly (never undefined), allowing partial queries.\n\"\"\"\ntype Shipping implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"The delivery address on the cart. Null until the shopper provides one.\"\"\"\n address: Address\n\n \"\"\"The logged-in shopper's saved addresses. Empty for anonymous shoppers.\"\"\"\n savedAddresses: [Address!]!\n\n \"\"\"\n Delivery-channel shipping options any cart item is eligible for at the current address, prices summed across the eligible items.\n \"\"\"\n options: [ShippingOption!]!\n\n \"\"\"\n Delivery-channel options with at least one item currently selected on them, one entry per option. Pickup selections are excluded.\n \"\"\"\n selectedOptions: [SelectedShippingOption!]!\n\n \"\"\"\n The selected option, when one selection applies to the whole cart. Null when items disagree or the persisted selection is a pickup-channel SLA.\n \"\"\"\n selectedOptionId: ID @deprecated(reason: \"Cannot express split shipping. Use Shipping.selectedOptions.\") @deprecationDate(deletionDate: \"2027-03-31\")\n}\n\n\"\"\"A delivery address or saved-address reference.\"\"\"\ntype Address\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Saved-address reference. Null for addresses entered in this session.\"\"\"\n id: ID\n\n \"\"\"Recipient name for this address.\"\"\"\n recipientName: String\n\n \"\"\"\n Postal code. Required when persisting an address via the mutation inputs, but nullable here:\n pickup/search/disposable addresses and legacy saved addresses can come back without one.\n \"\"\"\n postalCode: String\n\n \"\"\"\n ISO 3166-1 alpha-3 country code. Required when persisting an address via the mutation inputs,\n but nullable here for the same reason as postalCode.\n \"\"\"\n country: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n}\n\n\"\"\"\nThe shopper's session and authentication state for the active order form.\nA read-only sibling of Cart, projected from the same order form fetch. Carries\nno profile data — profile fields live on ClientProfile.\n\"\"\"\ntype Session implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Whether the shopper holds an authenticated VTEX session. A guest is `false` — a normal state, never an error.\n \"\"\"\n loggedIn: Boolean!\n\n \"\"\"\n Whether the shopper may edit their identity data. Lets Controls render editable vs. identified-but-masked fields.\n \"\"\"\n canEditData: Boolean!\n\n \"\"\"\n Server-computed: whether a profile is attached to the order form (clientProfileData.email is present and non-empty). Identification is distinct from authentication.\n \"\"\"\n isIdentified: Boolean!\n}\n\n\"\"\"Input for updating the delivery address on the cart.\"\"\"\ninput ShippingAddressUpdateInput {\n \"\"\"\n Saved address reference. Present when the shopper picked (and possibly edited) a saved address.\n \"\"\"\n savedAddressId: ID\n\n \"\"\"\n Recipient name for the delivery address. Omit it for a destination-only write: the cart keeps its current recipient name. A blank string is rejected with MISSING_RECIPIENT_NAME.\n \"\"\"\n recipientName: String\n\n \"\"\"Postal code for the delivery address.\"\"\"\n postalCode: String!\n\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n country: String!\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n}\n\n\"\"\"Error codes for shipping address update operations.\"\"\"\nenum ShippingAddressUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The recipient name is blank.\"\"\"\n MISSING_RECIPIENT_NAME\n\n \"\"\"The provided saved address ID does not match any available addresses.\"\"\"\n INVALID_SAVED_ADDRESS_ID\n\n \"\"\"The postal code is invalid or not found.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The address is invalid.\"\"\"\n INVALID_ADDRESS\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from a shipping address update mutation.\"\"\"\ntype ShippingAddressUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingAddressUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingAddressUpdate mutation.\"\"\"\ntype ShippingAddressUpdatePayload {\n \"\"\"The updated shipping state, or null if errors occurred.\"\"\"\n shipping: Shipping\n\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingAddressUpdateError!]!\n}\n\n\"\"\"Input for selecting a shipping option for the whole cart.\"\"\"\ninput ShippingOptionSelectInput {\n \"\"\"\n The shipping option ID to select. Must be offered as a delivery option by at least one item in\n the cart; items that don't offer it fall back to the Checkout API's own choice.\n \"\"\"\n optionId: ID!\n}\n\n\"\"\"Error codes for shipping option select operations.\"\"\"\nenum ShippingOptionSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n The option id is not offered as a delivery option by any item in the cart (unknown id or\n pickup). Returned without calling Checkout. An option only some items offer is not an error.\n \"\"\"\n OPTION_UNAVAILABLE\n\n \"\"\"No delivery address is persisted on the cart.\"\"\"\n MISSING_SHIPPING_ADDRESS\n}\n\n\"\"\"A domain error returned from a shipping option select mutation.\"\"\"\ntype ShippingOptionSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: ShippingOptionSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the shippingOptionSelect mutation.\"\"\"\ntype ShippingOptionSelectPayload {\n \"\"\"The updated shipping state, or null if errors occurred.\"\"\"\n shipping: Shipping\n\n \"\"\"The updated cart, or null if errors occurred.\"\"\"\n cart: Cart\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [ShippingOptionSelectError!]!\n}\n\n\"\"\"\nThe cart's payment state: available methods with server-driven validator config,\nthe current selection, installment options, and the shopper's saved cards. A\nread-only sibling of Cart, Shipping, and Session, projected from the same order\nform fetch. Method-agnostic: projects whatever payment systems VTEX returns, not\nonly credit card. Never carries a full card number or CVV.\n\"\"\"\ntype Payment implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order form ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Payment methods available on this cart. Empty when none are configured.\n \"\"\"\n methods: [PaymentMethod!]!\n\n \"\"\"\n The currently selected method's id (PaymentMethod.id), or null when unselected.\n \"\"\"\n selectedMethodId: String\n\n \"\"\"\n Saved-card account reference for the current selection, when a saved card is selected. Null otherwise.\n \"\"\"\n selectedAccountId: String\n\n \"\"\"\n The currently selected installment tier, resolved from the selection against installmentOptions. Null when unselected or unresolved.\n \"\"\"\n selectedInstallment: PaymentInstallment\n\n \"\"\"\n Installment plans available, grouped by method (and BIN, for card methods). Serves both a new card (matched by BIN) and a saved card (matched by its stored method).\n \"\"\"\n installmentOptions: [PaymentInstallmentOption!]!\n\n \"\"\"\n The shopper's saved cards. Empty for anonymous shoppers or when none are saved.\n \"\"\"\n savedCards: [SavedCard!]!\n\n \"\"\"\n The BIN persisted on the current selection, or null when the selection carries\n none (a non-card method, or a saved card selected without one). Echoes back what\n paymentMethodSelect wrote, which is what a client needs in order to know whether\n its own locally-detected BIN has actually reached the order form: installment\n options are matched against THIS value server-side, never against a client draft.\n Not sensitive — a BIN identifies an issuer range, never a card.\n \"\"\"\n selectedBin: String\n\n \"\"\"\n The store's country as an ISO 3166-1 alpha-3 code (e.g. \"BRA\"), read from the order form's\n store preferences. Null when the order form carries none or the value is not three capital\n letters. It is not limited to the countries in `countries`: a store in another country gets its\n own code and no table entry, and the API never substitutes another country's entry.\n \"\"\"\n storeCountryCode: String\n\n \"\"\"\n The countries the payment data supports and, per country, the cardholder document types it\n accepts. A fixed table, identical in every response and independent of the cart. Order: USA,\n BRA, CAN, MEX. Select the entry whose countryCode equals storeCountryCode.\n \"\"\"\n countries: [PaymentCountry!]!\n}\n\n\"\"\"\nA country the payment data supports, with the cardholder document types it accepts. A\nnon-normalized value object read directly off Payment.countries.\n\"\"\"\ntype PaymentCountry {\n \"\"\"ISO 3166-1 alpha-3 country code (e.g. \"BRA\").\"\"\"\n countryCode: String!\n\n \"\"\"\n The document types a cardholder of this country can give. Masks and validation rules are not\n carried: the client keys them on the document type.\n \"\"\"\n documents: [PaymentCountryDocument!]!\n}\n\n\"\"\"\nOne cardholder document type of a PaymentCountry, with whether it is shown and whether it is\nrequired. Values follow @vtex/country-forms 1.2.0 for an individual person.\n\"\"\"\ntype PaymentCountryDocument {\n \"\"\"Document type id, lowercase (e.g. \"cpf\", \"ssn\", \"sin\", \"rfc\").\"\"\"\n type: String!\n\n \"\"\"Whether the document field should be shown for this country.\"\"\"\n displayable: Boolean!\n\n \"\"\"Whether the document is required for this country.\"\"\"\n required: Boolean!\n}\n\n\"\"\"\nA payment method available on the cart, with the server-driven validator config\nthat determines which card-form fields render, their masks, and whether they\nare required. A non-normalized value object (ADR-0012); read directly off\nPayment.methods.\n\"\"\"\ntype PaymentMethod {\n \"\"\"Payment-system identifier (VTEX paymentSystem stringId).\"\"\"\n id: String!\n\n \"\"\"\n Display name (e.g. \"Visa\", \"Mastercard\", \"Cash\"). Doubles as the network name for card methods.\n \"\"\"\n name: String!\n\n \"\"\"\n Payment-system group (e.g. \"creditCardPaymentGroup\", \"debitCardPaymentGroup\"). Store-configured; kept as a string, not an enum.\n \"\"\"\n groupName: String!\n\n \"\"\"\n Whether VTEX flags this payment system as requiring cardholder authentication\n (for example 3-D Secure). Projected verbatim from the order form's payment-system\n configuration: it describes how the store configured the system, not a guarantee\n about any particular transaction. Null when the order form carries no value for\n this system — which is not the same as false. Detection only: this API implements\n no authentication challenge.\n \"\"\"\n requiresAuthentication: Boolean\n\n \"\"\"\n Validator configuration driving field presence, masks, and requiredness.\n \"\"\"\n validator: PaymentMethodValidator!\n}\n\n\"\"\"\nPer-method validator configuration. Server-driven so no component hardcodes\nfield presence, masks, or requiredness.\n\"\"\"\ntype PaymentMethodValidator {\n \"\"\"\n Mask pattern for the card number input. Null when the method carries no mask.\n \"\"\"\n numberMask: String\n\n \"\"\"\n Regex for real-time network detection against the typed BIN. Null when unset.\n \"\"\"\n numberRegex: String\n\n \"\"\"\n Mask pattern for the security-code (CVV) input. Null when unused or unmasked.\n \"\"\"\n cvvMask: String\n\n \"\"\"Regex validating the security-code (CVV) input. Null when unused.\"\"\"\n cvvRegex: String\n\n \"\"\"Whether this method requires the security code (CVV).\"\"\"\n cvvRequired: Boolean!\n\n \"\"\"Whether this method requires an expiration date.\"\"\"\n expirationRequired: Boolean!\n\n \"\"\"Whether this method requires the cardholder name.\"\"\"\n holderNameRequired: Boolean!\n\n \"\"\"Whether this method requires a billing address.\"\"\"\n billingAddressRequired: Boolean!\n\n \"\"\"\n Whether a cardholder document field is displayable for this method. Distinct from documentRequired.\n \"\"\"\n documentDisplayable: Boolean! @deprecated(reason: \"The document type, mask and country come from Payment.countries. Storefront clients still read this flag as the merchant's per-method gate until a per-method replacement exists.\") @deprecationDate(deletionDate: \"2027-09-30\")\n\n \"\"\"\n Whether the displayed cardholder document is required. Distinct from documentDisplayable — a document can be shown without being mandatory.\n \"\"\"\n documentRequired: Boolean! @deprecated(reason: \"The document type, mask and country come from Payment.countries. Storefront clients still read this flag as the merchant's per-method gate until a per-method replacement exists.\") @deprecationDate(deletionDate: \"2027-09-30\")\n}\n\n\"\"\"\nOne installment tier: a specific installment count at a given per-installment\nvalue and total. Keyed by count within its parent PaymentInstallmentOption — a\nnon-normalized value object (ADR-0012).\n\"\"\"\ntype PaymentInstallment {\n \"\"\"Number of installments (1 = single payment, no interest).\"\"\"\n count: Int!\n\n \"\"\"Amount per installment.\"\"\"\n value: Money!\n\n \"\"\"Total amount across all installments, including any interest.\"\"\"\n total: Money!\n\n \"\"\"\n Interest rate in hundredths of a percent, exactly as the VTEX order form carries it (100 = 1%; 0 = interest-free).\n \"\"\"\n interestRate: Float!\n}\n\n\"\"\"\nInstallment tiers available for one payment method (and, for card methods, one\nBIN range). A non-normalized value object (ADR-0012): read straight off\nPayment.installmentOptions.\n\"\"\"\ntype PaymentInstallmentOption\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"The payment method this option applies to (PaymentMethod.id).\"\"\"\n methodId: String!\n\n \"\"\"\n The BIN range this option applies to, when method-and-BIN-specific. Null when the option applies by method alone.\n \"\"\"\n bin: String\n\n \"\"\"Base order value this option was quoted against.\"\"\"\n baseValue: Money!\n\n \"\"\"\n Installment tiers, with a guaranteed `count: 1` entry prepended when VTEX\n omits one. A tier that upstream already supplies is passed through untouched\n (including its position and interest rate).\n \"\"\"\n installments: [PaymentInstallment!]!\n}\n\n\"\"\"\nOne of the shopper's saved cards. Never carries a full card number or CVV. A\nnormalized, id-bearing value object (ADR-0012): id is a stable opaque cache\nkey, not a Relay Node.\n\"\"\"\ntype SavedCard\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Opaque, stable cache key. Not a Relay Node ID; SavedCard is not registered in the cross-module Node registry.\n \"\"\"\n id: ID!\n\n \"\"\"\n The saved-card account reference. Pass this back on selection; never a full card number.\n \"\"\"\n accountId: String!\n\n \"\"\"\n The saved card's payment-system id (PaymentMethod.id), for cross-referencing validator config and installment options.\n \"\"\"\n methodId: String!\n\n \"\"\"Card network / issuer display name (e.g. \"Visa\").\"\"\"\n network: String!\n\n \"\"\"Last four digits of the card number.\"\"\"\n lastFourDigits: String!\n\n \"\"\"BIN of the saved card, for installment-option lookup by network.\"\"\"\n bin: String!\n\n \"\"\"Shopper-assigned custom label, when set.\"\"\"\n label: String\n\n \"\"\"\n Whether the card is expired. Expired cards are still returned; non-selectable is a UI concern downstream.\n \"\"\"\n expired: Boolean!\n\n \"\"\"\n Whether completing payment with this card requires the shopper to enter the CVV.\n \"\"\"\n cvvRequired: Boolean!\n}\n\n\"\"\"\nInput for selecting a payment method, optionally identifying a new card (by\nBIN) or a saved card (by account reference). A non-card method (e.g. Cash)\nomits both `bin` and `accountId`. When `accountId` is given, `bin` may also\nbe given to match the saved card against a BIN-specific installment option;\na `bin` that does not match the saved card's own BIN is rejected with\nMISMATCHED_BIN_FOR_SAVED_CARD.\n\"\"\"\ninput PaymentMethodSelectInput {\n \"\"\"The method to select (PaymentMethod.id).\"\"\"\n methodId: String!\n\n \"\"\"\n A newly-entered card's BIN, once detected. Omit for a saved card or a non-card method.\n \"\"\"\n bin: String\n\n \"\"\"\n A saved card's account reference (SavedCard.accountId). Omit for a new card or a non-card method.\n \"\"\"\n accountId: String\n}\n\n\"\"\"Error codes for the paymentMethodSelect mutation.\"\"\"\nenum PaymentMethodSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"The provided methodId does not match any entry in Payment.methods.\"\"\"\n INVALID_METHOD_ID\n\n \"\"\"The provided accountId does not match any entry in Payment.savedCards.\"\"\"\n INVALID_SAVED_CARD_ACCOUNT_ID\n\n \"\"\"The bin does not match the BIN of the saved card named by accountId.\"\"\"\n MISMATCHED_BIN_FOR_SAVED_CARD\n\n \"\"\"\n The bin is not 1 to 8 numeric digits — a BIN identifies an issuer range, never a card number.\n \"\"\"\n INVALID_BIN_FORMAT\n\n \"\"\"\n Never returned. The input once allowed at most one of bin / accountId; both are\n now accepted so a saved card can be matched to an installment option by its own\n BIN. Retained per ADR-00010 (additive-only with a deprecation window).\n \"\"\"\n CONFLICTING_BIN_AND_ACCOUNT_ID @deprecated(reason: \"Never returned; bin and accountId may now be sent together.\") @deprecationDate(deletionDate: \"2027-08-06\")\n}\n\n\"\"\"A domain error returned from the paymentMethodSelect mutation.\"\"\"\ntype PaymentMethodSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentMethodSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentMethodSelect mutation.\"\"\"\ntype PaymentMethodSelectPayload {\n \"\"\"The updated payment state, or null if errors occurred.\"\"\"\n payment: Payment\n\n \"\"\"\n The current billing address, echoed for convenience. Null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentMethodSelectError!]!\n}\n\n\"\"\"\nInput for selecting an installment count for the currently-selected method.\n\"\"\"\ninput PaymentInstallmentSelectInput {\n \"\"\"Number of installments to select (1 = single payment, no interest).\"\"\"\n count: Int!\n}\n\n\"\"\"Error codes for the paymentInstallmentSelect mutation.\"\"\"\nenum PaymentInstallmentSelectErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n No payment method has been selected yet (paymentMethodSelect was never called).\n \"\"\"\n MISSING_PAYMENT_METHOD_SELECTION\n\n \"\"\"\n The count does not match any tier in the resolvable installment option.\n \"\"\"\n INVALID_INSTALLMENT_COUNT\n}\n\n\"\"\"A domain error returned from the paymentInstallmentSelect mutation.\"\"\"\ntype PaymentInstallmentSelectError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentInstallmentSelectErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"\nPayload returned by the paymentInstallmentSelect mutation. Includes the\nrecomputed cart so the order total (with any interest) updates in the same\nround trip.\n\"\"\"\ntype PaymentInstallmentSelectPayload {\n \"\"\"The updated payment state, or null if errors occurred.\"\"\"\n payment: Payment\n\n \"\"\"\n The recomputed cart, or null if errors occurred. Carries the order total with any installment interest applied.\n \"\"\"\n cart: Cart\n\n \"\"\"\n The current billing address, echoed for convenience. Null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentInstallmentSelectError!]!\n}\n\n\"\"\"\nInput for setting the billing address. When sameAsDelivery is true, every\nother field is ignored and no upstream write happens (VTEX's own default:\nan absent invoiceData falls back to the delivery address).\n\"\"\"\ninput PaymentBillingAddressUpdateInput {\n \"\"\"\n When true, billing uses the delivery address; every field below is ignored.\n \"\"\"\n sameAsDelivery: Boolean!\n\n \"\"\"Address classification for the billing address.\"\"\"\n addressType: String\n\n \"\"\"\n Postal code for the billing address. Required when sameAsDelivery is false.\n \"\"\"\n postalCode: String\n\n \"\"\"\n ISO 3166-1 alpha-3 country code (e.g. \"BRA\"). Required when sameAsDelivery is false.\n \"\"\"\n country: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood / district.\"\"\"\n neighborhood: String\n\n \"\"\"City name.\"\"\"\n city: String\n\n \"\"\"State / province code.\"\"\"\n state: String\n\n \"\"\"\n A landmark reference. Sent upstream but not echoed back on billingAddress (Decision 11).\n \"\"\"\n reference: String\n}\n\n\"\"\"Error codes for the paymentBillingAddressUpdate mutation.\"\"\"\nenum PaymentBillingAddressUpdateErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"sameAsDelivery is false but postalCode or country was omitted.\"\"\"\n MISSING_BILLING_ADDRESS_FIELDS\n\n \"\"\"\n The country is not an ISO 3166-1 alpha-3 code (three capital letters). Refused before any upstream call.\n \"\"\"\n INVALID_COUNTRY_CODE\n}\n\n\"\"\"A domain error returned from the paymentBillingAddressUpdate mutation.\"\"\"\ntype PaymentBillingAddressUpdateError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentBillingAddressUpdateErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentBillingAddressUpdate mutation.\"\"\"\ntype PaymentBillingAddressUpdatePayload {\n \"\"\"\n The billing address just written, or null when same-as-delivery is in effect.\n \"\"\"\n billingAddress: Address\n\n \"\"\"\n The updated payment state, or null if errors occurred, or when same-as-delivery is in effect, where no upstream write happens.\n \"\"\"\n payment: Payment\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentBillingAddressUpdateError!]!\n}\n\n\"\"\"\nError codes for the paymentStartTransaction mutation. Login-required VTEX\nbusiness codes (CHK0087, CHK003, ORD062) and generic infrastructure failures\nare never in this enum — per ADR-00007 they surface as top-level GraphQL\nerrors (UNAUTHORIZED / UPSTREAM_ERROR), not userErrors.\n\"\"\"\nenum PaymentStartTransactionErrorCode {\n \"\"\"No cart context was provided (x-order-form-id header/cookie).\"\"\"\n MISSING_CART_CONTEXT\n\n \"\"\"The cart was not found.\"\"\"\n CART_NOT_FOUND\n\n \"\"\"\n No payment method has been selected yet (paymentMethodSelect was never called).\n \"\"\"\n MISSING_PAYMENT_METHOD_SELECTION\n\n \"\"\"\n VTEX opened the transaction but named no merchant transaction on it, so\n neither the transaction id the send-payments POST addresses nor the merchant\n name its body carries exists. The transaction is open upstream but cannot be\n paid; the legacy checkout refuses the same state.\n \"\"\"\n INVALID_TRANSACTION_DATA\n}\n\n\"\"\"A domain error returned from the paymentStartTransaction mutation.\"\"\"\ntype PaymentStartTransactionError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentStartTransactionErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"\nPayload returned by paymentStartTransaction: everything the browser needs to\nrun the direct-to-gateway send-payments call (out of scope here) and the\nlater gatewayCallback. The transaction cookies VTEX issues are set on the\nHTTP response (Set-Cookie), not exposed as a field.\n\"\"\"\ntype PaymentStartTransactionPayload {\n \"\"\"The opened transaction's id. Null if errors occurred.\"\"\"\n transactionId: String\n\n \"\"\"\n Name of the merchant responsible for the sale, as the gateway call's payment\n `id` and `transaction.merchantName`. Projected from the same\n merchantTransactions entry transactionId comes from — VTEX returns one entry\n per seller, so a multi-seller order carries more than one and only the first\n is exposed here (see specs/payment-transaction-payload-gaps.md, Decision 1).\n Null if errors occurred.\n \"\"\"\n merchantName: String\n\n \"\"\"\n Origin of the payment gateway this transaction must be paid at, e.g.\n \"https://mystore.vtexvault.com\" — the base the browser's direct-to-gateway\n send-payments POST appends its own path to. Always `https://{account}.vtexvault.com`,\n derived from the request's account alone: no upstream field and no caller-supplied\n value is an input, since this field decides where card data is sent. Null when the\n account is not a single DNS label, and if errors occurred.\n \"\"\"\n gatewayUrl: String\n\n \"\"\"\n The order group, needed for the gateway call's orderId parameter and for gatewayCallback's input.\n \"\"\"\n orderGroup: String\n\n \"\"\"The shopper's user profile id, needed for the gateway call.\"\"\"\n userProfileId: String\n\n \"\"\"\n The payment amount for this transaction, as a decimal (e.g. \"100.00\") for\n display. The gateway body wants minor units — read valueInCents for that,\n never a client-side multiplication of this amount.\n \"\"\"\n value: Money\n\n \"\"\"\n The same payment amount in the currency's minor units (e.g. 10000 for\n \"100.00\"), exactly as VTEX returned it and as this mutation sent it upstream.\n The unit the gateway body's `value`/`installmentValue` fields expect. Null if\n errors occurred.\n \"\"\"\n valueInCents: Int\n\n \"\"\"\n Pre-interest base amount this transaction was opened against, in the\n currency's minor units — the gateway body's `referenceValue`. Equals\n valueInCents when no interest applies. Null if errors occurred.\n \"\"\"\n referenceValueInCents: Int\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentStartTransactionError!]!\n}\n\n\"\"\"\nInput for finalizing a transaction after the direct-to-gateway call\nsucceeded.\n\"\"\"\ninput PaymentGatewayCallbackInput {\n \"\"\"The order group returned by paymentStartTransaction.\"\"\"\n orderGroup: String!\n\n \"\"\"\n The resume flag. False (the default) on the first pass; true when the shopper\n returns from the bank's challenge page, so the callback accepts the challenge.\n \"\"\"\n acceptChallenges: Boolean = false\n}\n\n\"\"\"\nError codes for the paymentGatewayCallback mutation. Login-required VTEX\nbusiness codes (CHK0087, CHK003, ORD062) and generic infrastructure failures\nare never in this enum — per ADR-00007 they surface as top-level GraphQL\nerrors (UNAUTHORIZED / UPSTREAM_ERROR), not userErrors.\n\"\"\"\nenum PaymentGatewayCallbackErrorCode {\n \"\"\"\n The transaction cookies (Vtex_CHKO_Auth, CheckoutDataAccess) were not present on this request — paymentStartTransaction was not called first, or the five-minute window lapsed.\n \"\"\"\n MISSING_TRANSACTION_COOKIES\n\n \"\"\"\n VTEX answered 428: the payment needs a challenge step. When `redirectUrl` is set the shopper must be sent there; when it is null the challenge uses a mechanism this API does not hand over (for example a payment app).\n \"\"\"\n REDIRECT_REQUIRED\n}\n\n\"\"\"A domain error returned from the paymentGatewayCallback mutation.\"\"\"\ntype PaymentGatewayCallbackError {\n \"\"\"Machine-readable error code.\"\"\"\n code: PaymentGatewayCallbackErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Payload returned by the paymentGatewayCallback mutation.\"\"\"\ntype PaymentGatewayCallbackPayload {\n \"\"\"\n The finalized order group, echoed back on success. Null if errors occurred.\n \"\"\"\n orderId: String\n\n \"\"\"\n The bank's challenge page; set only when VTEX answered 428 with a usable http(s) URL.\n \"\"\"\n redirectUrl: String\n\n \"\"\"Domain errors that occurred during the operation.\"\"\"\n userErrors: [PaymentGatewayCallbackError!]!\n}\n\n\"\"\"\nThe installment plan a settled order was charged in. Projected from the\nplaced-order payment record, which carries the count and the settled total\nonly — never a per-installment amount and never an interest rate, unlike the\nlive order form behind `Payment.selectedInstallment`. That asymmetry is\nupstream and permanent (see specs/settle-and-project-the-placed-order.md,\nDecision 2).\n\"\"\"\ntype OrderInstallment\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Number of installments the order was charged in. 1 = single payment.\"\"\"\n count: Int!\n\n \"\"\"\n Total charged across all installments, including any interest, in the\n order's currency, or the request's when no seller order carries one, as the\n order's other amounts are. Null when the settled record carries no amount.\n \"\"\"\n total: Money\n}\n\n\"\"\"\nA settled order's payment recap. Read-only; projected from VTEX's\nsettled-order source rather than the live order form, so it keeps resolving\nafter the order form itself stops existing. Carries no sensitive field: no\nfull card number or CVV is ever read for this projection (RFC D13).\n\"\"\"\ntype Order implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Globally unique identifier (Relay Node ID), encoded from the order group.\n \"\"\"\n id: ID!\n\n \"\"\"\n The purchase's payment outcome, shared by its seller orders. The banner shows this one. UNKNOWN when\n the seller orders disagree.\n \"\"\"\n status: OrderStatus!\n\n \"\"\"\n The distinct payments of the purchase, each counted once across its seller orders. They follow the\n seller orders sorted by order id, and within a transaction the order the order system lists them\n in, which this API does not change. Empty when the order carries no payment.\n \"\"\"\n payments: [OrderPayment!]!\n\n \"\"\"\n Card network / payment-system display name of the first payment (e.g. \"Visa\", or a non-card\n method's own name such as \"Boleto Bancário\"). Kept for the payment recap; prefer payments. Null\n when the settled order carries no payment record to project one from.\n \"\"\"\n network: String\n\n \"\"\"\n Last four digits of the card used by the first payment, when the payment method was a card.\n Present for both a saved and a freshly-entered card — unlike Payment (T1),\n where last four is a saved-card-only field. Kept for the payment recap; prefer payments. Null for\n a non-card method or when no payment record exists to project one from.\n \"\"\"\n lastFourDigits: String\n\n \"\"\"Always null: the order system sends no card label.\"\"\"\n label: String @deprecated(reason: \"The order system sends no card label; always null.\") @deprecationDate(deletionDate: \"2027-03-31\")\n\n \"\"\"\n The installment plan of the first payment. Kept for the payment recap; prefer payments. Null when\n the settled record reports none.\n \"\"\"\n installment: OrderInstallment\n\n \"\"\"\n Who bought, as the order recorded them at placement, not the live profile. Masked (e.g.\n \"A*** S***\") when personalDataVisible is false. Null when the order carries no profile.\n \"\"\"\n customer: OrderCustomer\n\n \"\"\"\n Whether the order system returned the order's personal data unmasked: the customer, and the\n addresses, invoice and payment details it masks under the same verdict. False means masked, and is\n also the answer when the order system does not say.\n \"\"\"\n personalDataVisible: Boolean!\n\n \"\"\"\n The order group: the reference the shopper reads and support resolves. One per purchase, however\n many sellers.\n \"\"\"\n reference: String!\n\n \"\"\"\n When the purchase was placed: the earliest creation date across its seller orders. Null when none\n carries one.\n \"\"\"\n placedAt: DateTime\n\n \"\"\"\n What the purchase costs: the sum of its seller orders' totals. Null when a seller order has none.\n \"\"\"\n total: Money\n\n \"\"\"\n The purchase's money lines: each line summed across seller orders, keyed on (id, name).\n \"\"\"\n totals: [CartTotalizer!]!\n\n \"\"\"\n The purchase split by seller, one entry per seller order, sorted by orderId.\n \"\"\"\n sellerOrders: [SellerOrder!]!\n\n \"\"\"\n Every item of the purchase grouped by shipping method, channel and relative estimate, across\n sellers; SmartCheckout uses the same key within each seller order.\n \"\"\"\n deliveries: [OrderDelivery!]!\n}\n\n\"\"\"\nItems that arrive together: the same shipping method, channel and relative estimate.\n\"\"\"\ntype OrderDelivery\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the grouping key and its scope, the order group.\"\"\"\n id: ID!\n\n \"\"\"\n The shipping method, as the shopper chose it: its name, channel and relative estimate. Its price\n is one line's; use price. Null when the order system omits the method or its estimate is\n unreadable.\n \"\"\"\n shippingOption: OrderShippingOption\n\n \"\"\"\n The group's dated promise: its latest line's, so it covers every item. Null when no line carries a\n date.\n \"\"\"\n estimatedDate: DateTime\n\n \"\"\"\n What the group's shipping cost: the sum of its lines' shipping prices. A line without a readable\n method adds zero, so with shippingOption null this zero is unknown, never free shipping.\n \"\"\"\n price: Money!\n\n \"\"\"\n What the group's shipping would have cost without discounts: the sum of its lines' list prices,\n read as price is.\n \"\"\"\n listPrice: Money!\n\n \"\"\"\n Where the group ships: its first line's address. The address is not part of the grouping key: the\n cart delivers to one address, so a group's lines share it. Each line's own is on\n items.deliveryAddress. Masked under personalDataVisible.\n \"\"\"\n address: Address\n\n \"\"\"\n The pickup point's name: its first line's. Null unless the group is picked up.\n \"\"\"\n pickupPointName: String\n\n \"\"\"The number of items in the group.\"\"\"\n itemCount: Int!\n\n \"\"\"The group's items, in the order of the seller orders.\"\"\"\n items: [OrderItem!]!\n}\n\n\"\"\"\nThe shipping method the shopper chose, as the order recorded it. Read from the order, never from the\ncart.\n\"\"\"\ntype OrderShippingOption\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the order group, the line's uniqueId and the SLA id.\"\"\"\n id: ID!\n\n \"\"\"\n The method's name, e.g. Motoboy. The SLA id when the order system sends no name.\n \"\"\"\n name: String!\n\n \"\"\"Delivery channel: home delivery or pickup.\"\"\"\n channel: DeliveryChannel!\n\n \"\"\"The method's relative estimate, e.g. 7 business days.\"\"\"\n shippingEstimate: ShippingEstimate!\n\n \"\"\"What this line's shipping cost. Zero when free shipping applies.\"\"\"\n price: Money!\n\n \"\"\"What this line's shipping would have cost without discounts.\"\"\"\n listPrice: Money!\n}\n\n\"\"\"\nThe payment outcome of a settled order (PRD UQ-2), mapped from the order's Checkout workflow state.\n\"\"\"\nenum OrderStatus {\n \"\"\"The payment was approved, or the order has moved past approval.\"\"\"\n APPROVED\n\n \"\"\"The payment is not decided yet, under anti-fraud review included.\"\"\"\n PENDING\n\n \"\"\"The payment was denied, or the order was cancelled.\"\"\"\n DENIED\n\n \"\"\"A state the page does not classify. It asserts no outcome.\"\"\"\n UNKNOWN\n}\n\n\"\"\"One payment of a settled purchase. No id: it lives inside its Order.\"\"\"\ntype OrderPayment\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Card network / payment-system display name, e.g. \"Visa\". Null when the order system sends none.\n \"\"\"\n network: String\n\n \"\"\"\n Last four digits of the card, when the payment method was a card. Never the card number.\n \"\"\"\n lastFourDigits: String\n\n \"\"\"\n The installment plan of this payment. Null when the settled record reports none.\n \"\"\"\n installment: OrderInstallment\n\n \"\"\"\n What this payment charged, in full: never one instalment. Null only if the order system omits it,\n which it does not today.\n \"\"\"\n value: Money\n}\n\n\"\"\"One seller's part of a purchase: its own seller, totals and items.\"\"\"\ntype SellerOrder\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from orderId.\"\"\"\n id: ID!\n\n \"\"\"The seller order's number, e.g. 1667094470146-01.\"\"\"\n orderId: String!\n\n \"\"\"\n The seller fulfilling this order. Null only when neither sellers nor any readable item names one.\n \"\"\"\n seller: CartSellerRef\n\n \"\"\"\n What this seller order costs. Null when the order system does not send it.\n \"\"\"\n total: Money\n\n \"\"\"This seller order's money lines. The cart's own totalizer type.\"\"\"\n totals: [CartTotalizer!]!\n\n \"\"\"\n Every line of this seller order. Children of a composition nest under their parent.\n \"\"\"\n items: [OrderItem!]!\n}\n\n\"\"\"\nOne purchased line of a settled order. The fields mean what they mean on CartItem.\n\"\"\"\ntype OrderItem\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Encoded from the order group and the line's uniqueId.\"\"\"\n id: ID!\n\n \"\"\"\n The SKU as the cart shows it: name, image, seller, availability and variation.\n \"\"\"\n variant: CartVariant!\n\n \"\"\"\n The product the SKU belongs to: title, detail URL, categories and brand.\n \"\"\"\n product: CartProduct!\n\n \"\"\"How many units were bought.\"\"\"\n quantity: Int!\n\n \"\"\"The unit price at placement, before discounts.\"\"\"\n price: Money!\n\n \"\"\"Zero when the line had no list price.\"\"\"\n listPrice: Money!\n\n \"\"\"The unit price the shopper paid.\"\"\"\n sellingPrice: Money!\n\n \"\"\"The line's own total, as the cart computes it.\"\"\"\n ownTotal: Money!\n\n \"\"\"The line's own total plus its compositions'.\"\"\"\n total: Money!\n\n \"\"\"Whether the line is a gift.\"\"\"\n gift: Boolean!\n\n \"\"\"The featured promotions that discounted this line.\"\"\"\n discounts: [CartItemDiscount!]!\n\n \"\"\"The values the shopper entered for the line's input assemblies.\"\"\"\n customizations: [CartItemCustomization!]!\n\n \"\"\"The add-on services and bundle children nested under this line.\"\"\"\n compositions: [CartItemComposition!]!\n\n \"\"\"\n The shipping method the shopper chose for this line. Null when the order system omits it or its\n estimate is unreadable.\n \"\"\"\n selectedShippingOption: OrderShippingOption\n\n \"\"\"\n Where this line ships: the delivery address, or the pickup point's. Masked under\n personalDataVisible.\n \"\"\"\n deliveryAddress: Address\n\n \"\"\"\n The pickup point's name, e.g. \"RJ - Botafogo Praia Shopping\". Null unless the line is picked up.\n \"\"\"\n pickupPointName: String\n\n \"\"\"The dated promise. Null when the order system has not set one.\"\"\"\n estimatedDeliveryDate: DateTime\n}\n\n\"\"\"\nThe customer of a settled order, as the order recorded them at placement. The same fields as\nClientProfile, which is the live order form's profile.\n\"\"\"\ntype OrderCustomer\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Email address.\"\"\"\n email: String\n\n \"\"\"First name.\"\"\"\n firstName: String\n\n \"\"\"Last name.\"\"\"\n lastName: String\n\n \"\"\"Phone number.\"\"\"\n phone: String\n\n \"\"\"Identity document number.\"\"\"\n document: String\n}\n\n\"\"\"\nThe address fields a postal code resolves to. Each is null when the platform\nleft it blank.\n\"\"\"\ntype PostalCodeAddress\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"The city, as the platform names it.\"\"\"\n city: String\n\n \"\"\"The state or region, as the platform codes it (`SP`, `NY`).\"\"\"\n state: String\n\n \"\"\"The street. Null where the platform resolves codes to an area only.\"\"\"\n street: String\n\n \"\"\"The neighborhood. Null where the platform resolves none.\"\"\"\n neighborhood: String\n}\n\n\"\"\"\nThe authentication methods an account enables, read before rendering a sign-in form.\n\"\"\"\ntype SessionAuthProviders {\n \"\"\"Whether classic email and password sign-in is enabled.\"\"\"\n passwordAuthentication: Boolean!\n\n \"\"\"Whether email access-code (passwordless) sign-in is enabled.\"\"\"\n accessKeyAuthentication: Boolean!\n}\n\n\"\"\"\nA typed, expected failure of a login attempt. Distinct from the top-level\nUNAUTHORIZED gate: this is a domain outcome (the request was understood, the\nbusiness rejected it), never an infrastructure failure.\n\"\"\"\ntype SessionError {\n \"\"\"Machine-readable error code for the login-attempt failure.\"\"\"\n code: SessionErrorCode!\n\n \"\"\"Human-readable message describing the failure.\"\"\"\n message: String!\n}\n\n\"\"\"The set of login-attempt failure codes a session mutation can return.\"\"\"\nenum SessionErrorCode {\n \"\"\"Email or password was not accepted by VTEX ID.\"\"\"\n INVALID_CREDENTIALS\n\n \"\"\"The access code was wrong or expired.\"\"\"\n INVALID_ACCESS_CODE\n\n \"\"\"Too many access codes were requested for this email.\"\"\"\n ACCESS_CODE_SEND_LIMIT\n\n \"\"\"The user is blocked by VTEX ID.\"\"\"\n BLOCKED\n\n \"\"\"\n BFF-side guard: the request lacked the auth context it needed (e.g. a missing\n authenticationToken). Not a VTEX outcome.\n \"\"\"\n MISSING_AUTH_CONTEXT\n}\n\n\"\"\"\nThe login / logout result, projected from the one refreshed order form. session,\ncart, clientProfile and clientPreferences are normalized Relay Nodes (keyed on\nthe orderFormId) so Apollo merges them into the cache and the client updates\nreactively with no refetch.\n\"\"\"\ntype SessionLoginPayload {\n \"\"\"The session after the attempt; loggedIn is true only on success.\"\"\"\n session: Session!\n\n \"\"\"The cart projected from the refreshed order form.\"\"\"\n cart: Cart!\n\n \"\"\"\n The client profile projected from the refreshed order form; the entity always\n resolves, its fields are null when unset.\n \"\"\"\n clientProfile: ClientProfile!\n\n \"\"\"\n The client preferences projected from the refreshed order form; the entity\n always resolves, its fields are null when unset.\n \"\"\"\n clientPreferences: ClientPreferences!\n\n \"\"\"Typed login-attempt failures. Empty on success.\"\"\"\n userErrors: [SessionError!]!\n}\n\n\"\"\"The result of requesting an email access code.\"\"\"\ntype SessionRequestAccessCodePayload {\n \"\"\"\n Opaque token to hand back to sessionValidateAccessCode. Null when the request\n failed.\n \"\"\"\n authenticationToken: String\n\n \"\"\"Typed request failures. Empty on success.\"\"\"\n userErrors: [SessionError!]!\n}\n\n\"\"\"Credentials for a classic email + password sign-in.\"\"\"\ninput SessionPasswordLoginInput {\n \"\"\"The shopper's email address.\"\"\"\n email: String!\n\n \"\"\"\n The shopper's password. Proxied to VTEX ID over TLS, never logged or persisted.\n \"\"\"\n password: String!\n}\n\n\"\"\"The email to send an access code to.\"\"\"\ninput SessionRequestAccessCodeInput {\n \"\"\"The shopper's email address the access code is sent to.\"\"\"\n email: String!\n}\n\n\"\"\"An access code plus the authenticationToken it was issued against.\"\"\"\ninput SessionValidateAccessCodeInput {\n \"\"\"The shopper's email address.\"\"\"\n email: String!\n\n \"\"\"The access code the shopper received by email.\"\"\"\n accessCode: String!\n\n \"\"\"\n The opaque token returned by sessionRequestAccessCode, handed back unchanged.\n \"\"\"\n authenticationToken: String!\n}\n\n\"\"\"\nThe shopper's active region. Both fields are nullable: a shopper who has never\nsubmitted a postal code has no region, and a submitted postal code does not\nalways resolve to a known city.\n\"\"\"\ntype Region\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization. Not a Relay Node ID: a region is\n session-scoped shopper state, never addressable by global id.\n \"\"\"\n id: ID!\n\n \"\"\"The active postal code, formatted for display. Null when none is set.\"\"\"\n postalCode: String\n\n \"\"\"\n The city the postal code resolves to. Null when the postal code is unknown to\n the resolver, which is a normal state and not an error.\n \"\"\"\n city: String\n}\n\n\"\"\"\nWhy a region write was refused. Stable across locales, so a client can render\neach case in the shopper's language instead of echoing the server's message.\n\"\"\"\nenum RegionErrorCode {\n \"\"\"The value did not normalize to a complete postal code.\"\"\"\n INVALID_POSTAL_CODE\n\n \"\"\"The postal code is complete but falls outside the served ranges.\"\"\"\n UNSERVED_POSTAL_CODE\n}\n\n\"\"\"\nA typed, expected failure of a region write: the request was understood and the\nbusiness rejected it. Distinct from an infrastructure failure, which surfaces as\na top-level GraphQL error.\n\"\"\"\ntype RegionError {\n \"\"\"Which rule refused the postal code.\"\"\"\n code: RegionErrorCode!\n\n \"\"\"\n Human-readable message describing why the postal code was rejected. Written in\n English by the server; a client should key its copy on `code` instead.\n \"\"\"\n message: String!\n}\n\n\"\"\"The result of submitting a postal code.\"\"\"\ntype RegionUpdatePayload {\n \"\"\"\n The region after the write. Null when the postal code was rejected, leaving\n any previously active region untouched.\n \"\"\"\n region: Region\n\n \"\"\"Typed rejections. Empty on success.\"\"\"\n errors: [RegionError!]!\n}\n\n\"\"\"\nA shopper's persistent, cart-independent profile. Distinct from checkout's\norder-form-scoped ClientProfile.\n\"\"\"\ntype CustomerProfile\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization. Not a Relay Node ID: the profile is\n session-scoped shopper state, derived from the session and never addressable\n by a global id (no id argument, no CustomerProfile entry in Query.node).\n \"\"\"\n id: ID!\n\n \"\"\"Given name. Null when unset.\"\"\"\n firstName: String\n\n \"\"\"Family name. Null when unset.\"\"\"\n lastName: String\n\n \"\"\"\n The shopper's login identifier. Read-only — excluded from the update input by construction.\n \"\"\"\n email: String\n\n \"\"\"Primary contact phone. Null when unset.\"\"\"\n homePhone: String\n\n \"\"\"Mobile contact phone. Null when unset.\"\"\"\n mobilePhone: String\n\n \"\"\"National tax ID. Null when unset.\"\"\"\n document: String\n\n \"\"\"\n The tax ID's type, so the control can adapt to the shopper's region. Null when unset.\n \"\"\"\n documentType: String\n\n \"\"\"Date of birth. Null when unset.\"\"\"\n birthDate: String\n\n \"\"\"\n Free-form gender value; the store configures the options it offers. Null when unset.\n \"\"\"\n gender: String\n}\n\n\"\"\"A typed, expected failure of a profile write.\"\"\"\ntype CustomerProfileError {\n \"\"\"Machine-readable code for the write failure.\"\"\"\n code: CustomerProfileErrorCode!\n\n \"\"\"A safe message. Never echoes a submitted profile value.\"\"\"\n message: String!\n}\n\n\"\"\"The set of expected, typed profile-write failure codes.\"\"\"\nenum CustomerProfileErrorCode {\n \"\"\"\n The account's profile schema refused one or more submitted values. It does not\n attribute the refusal to a cause — a required field left empty and a malformed\n value are not distinguishable until the upstream rejection body is\n characterised, at which point a narrower code joins this one.\n \"\"\"\n INVALID_VALUE\n}\n\n\"\"\"\nEvery field is optional: provide only what the shopper edited. An empty string\nis an explicit erase; an omitted field is left untouched. A `null` is neither —\nit counts as not provided, so nulling an untouched field cannot wipe it.\n\"\"\"\ninput CustomerProfileUpdateInput {\n \"\"\"Given name to write. Omit to leave unchanged; empty string to erase.\"\"\"\n firstName: String\n\n \"\"\"Family name to write. Omit to leave unchanged; empty string to erase.\"\"\"\n lastName: String\n\n \"\"\"\n Primary contact phone to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n homePhone: String\n\n \"\"\"\n Mobile contact phone to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n mobilePhone: String\n\n \"\"\"\n National tax ID to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n document: String\n\n \"\"\"Tax ID type to write. Omit to leave unchanged; empty string to erase.\"\"\"\n documentType: String\n\n \"\"\"\n Date of birth to write. Omit to leave unchanged; empty string to erase.\n \"\"\"\n birthDate: String\n\n \"\"\"Gender value to write. Omit to leave unchanged; empty string to erase.\"\"\"\n gender: String\n}\n\n\"\"\"\nThe result of a profile write, carrying the merged profile and any typed\nfailures.\n\"\"\"\ntype CustomerProfileUpdatePayload {\n \"\"\"\n The profile after the write, so a reactive fragment re-delivers without a refetch.\n \"\"\"\n customerProfile: CustomerProfile!\n\n \"\"\"Typed, expected write failures. Empty on success.\"\"\"\n userErrors: [CustomerProfileError!]!\n}\n\n\"\"\"\nAn address the shopper saved to their account. Read from the shopper's own\nprofile, never through a cart. Every field it shares with checkout's Address is\nspelled the same way.\n\"\"\"\ntype CustomerAddress implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Global id. Resolves through Query.node only inside the signed-in shopper's own\n addresses; any other id resolves to null.\n \"\"\"\n id: ID!\n\n \"\"\"\n ISO 3166-1 alpha-3 country code, as stored. Null when the stored address has\n none, as an address another system wrote can; it is listed so the shopper can\n still see and remove it.\n \"\"\"\n country: String\n\n \"\"\"Who receives deliveries at this address. Null when unset.\"\"\"\n recipientName: String\n\n \"\"\"Street name. Null when unset.\"\"\"\n street: String\n\n \"\"\"Street number. Null when unset.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.). Null when unset.\"\"\"\n complement: String\n\n \"\"\"Neighborhood or district. Null when unset.\"\"\"\n neighborhood: String\n\n \"\"\"City. Null when unset.\"\"\"\n city: String\n\n \"\"\"State or province code. Null when unset.\"\"\"\n state: String\n\n \"\"\"Postal code, as stored. Null when unset.\"\"\"\n postalCode: String\n\n \"\"\"A landmark that helps find the address. Null when unset.\"\"\"\n reference: String\n}\n\n\"\"\"\nThe signed-in shopper's saved addresses, held in one object so a client can cache\nand subscribe to the list. It takes no argument and reads only the shopper's own\nlist. Not resolvable through Query.node.\n\"\"\"\ntype CustomerAddressBook\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization, the same for every request of the\n shopper. Not a Relay Node ID.\n \"\"\"\n id: ID!\n\n \"\"\"\n Every saved address, the same list `customerAddresses` returns. Empty when the\n shopper has none.\n \"\"\"\n addresses: [CustomerAddress!]!\n}\n\n\"\"\"\nA new saved address. `country` is required; every other field is optional to the\nschema, and the country's rules say which ones it needs. A field that is omitted,\n`null`, or an empty string is not written.\n\"\"\"\ninput CustomerAddressCreateInput {\n \"\"\"\n ISO 3166-1 alpha-3 country code. The store must ship to it. Trimmed and upper-cased.\n \"\"\"\n country: String!\n\n \"\"\"Who receives deliveries at this address.\"\"\"\n recipientName: String\n\n \"\"\"Street name.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Additional address detail (apartment, suite, etc.).\"\"\"\n complement: String\n\n \"\"\"Neighborhood or district.\"\"\"\n neighborhood: String\n\n \"\"\"City.\"\"\"\n city: String\n\n \"\"\"State or province code.\"\"\"\n state: String\n\n \"\"\"Postal code. Stored in the country's masked form once it is valid.\"\"\"\n postalCode: String\n\n \"\"\"A landmark that helps find the address.\"\"\"\n reference: String\n}\n\n\"\"\"\nChanges to a saved address. Omit a field, or send `null`, to keep it; send an empty\nstring to erase it. The country cannot change.\n\"\"\"\ninput CustomerAddressUpdateInput {\n \"\"\"\n Who receives deliveries at this address. Omit to leave unchanged; empty string to erase.\n \"\"\"\n recipientName: String\n\n \"\"\"Street name. Omit to leave unchanged; empty string to erase.\"\"\"\n street: String\n\n \"\"\"Street number. Omit to leave unchanged; empty string to erase.\"\"\"\n number: String\n\n \"\"\"\n Additional address detail (apartment, suite, etc.). Omit to leave unchanged; empty string to erase.\n \"\"\"\n complement: String\n\n \"\"\"\n Neighborhood or district. Omit to leave unchanged; empty string to erase.\n \"\"\"\n neighborhood: String\n\n \"\"\"City. Omit to leave unchanged; empty string to erase.\"\"\"\n city: String\n\n \"\"\"\n State or province code. Omit to leave unchanged; empty string to erase.\n \"\"\"\n state: String\n\n \"\"\"\n Postal code. Omit to leave unchanged; empty string to erase. Stored in the country's masked form once it is valid.\n \"\"\"\n postalCode: String\n\n \"\"\"\n A landmark that helps find the address. Omit to leave unchanged; empty string to erase.\n \"\"\"\n reference: String\n}\n\n\"\"\"\nA typed, expected failure of an address write, or of the lookup that precedes it.\n\"\"\"\ntype CustomerAddressError {\n \"\"\"Machine-readable code for the failure.\"\"\"\n code: CustomerAddressErrorCode!\n\n \"\"\"\n A safe, fixed message. Never echoes a submitted value, an id, or a key.\n \"\"\"\n message: String!\n\n \"\"\"\n The field the failure is about. Null when it is about the address as a whole.\n \"\"\"\n field: CustomerAddressField\n}\n\n\"\"\"The set of expected, typed address-write failure codes.\"\"\"\nenum CustomerAddressErrorCode {\n \"\"\"\n The id is malformed, names another entity type, or is not one of the shopper's saved\n addresses. These cases are indistinguishable.\n \"\"\"\n NOT_FOUND\n\n \"\"\"The country's rules require this field and it is empty.\"\"\"\n MISSING_REQUIRED_FIELD\n\n \"\"\"\n The value is not accepted: a bad format, a value outside the country's options, a value\n that is too long, or a country that is not three letters. With no field, the profile\n service refused the address and does not say why.\n \"\"\"\n INVALID_VALUE\n\n \"\"\"The store does not ship to the country.\"\"\"\n UNSUPPORTED_COUNTRY\n}\n\n\"\"\"The address field a failure is about.\"\"\"\nenum CustomerAddressField {\n \"\"\"The `country` field.\"\"\"\n COUNTRY\n\n \"\"\"The `recipientName` field.\"\"\"\n RECIPIENT_NAME\n\n \"\"\"The `street` field.\"\"\"\n STREET\n\n \"\"\"The `number` field.\"\"\"\n NUMBER\n\n \"\"\"The `complement` field.\"\"\"\n COMPLEMENT\n\n \"\"\"The `neighborhood` field.\"\"\"\n NEIGHBORHOOD\n\n \"\"\"The `city` field.\"\"\"\n CITY\n\n \"\"\"The `state` field.\"\"\"\n STATE\n\n \"\"\"The `postalCode` field.\"\"\"\n POSTAL_CODE\n\n \"\"\"The `reference` field.\"\"\"\n REFERENCE\n}\n\n\"\"\"The result of creating a saved address.\"\"\"\ntype CustomerAddressCreatePayload {\n \"\"\"The address as written. Null when `userErrors` is not empty.\"\"\"\n customerAddress: CustomerAddress\n\n \"\"\"Typed, expected failures, one per refused field. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"The result of updating a saved address.\"\"\"\ntype CustomerAddressUpdatePayload {\n \"\"\"\n The address as written, or as stored when the input provided no field. Null when\n `userErrors` is not empty.\n \"\"\"\n customerAddress: CustomerAddress\n\n \"\"\"Typed, expected failures, one per refused field. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"The result of deleting a saved address.\"\"\"\ntype CustomerAddressDeletePayload {\n \"\"\"\n The id of the deleted address, to evict it from a client cache. Null when `userErrors`\n is not empty.\n \"\"\"\n deletedCustomerAddressId: ID\n\n \"\"\"Typed, expected failures. Empty on success.\"\"\"\n userErrors: [CustomerAddressError!]!\n}\n\n\"\"\"\nThe countries the store ships to, read from the platform's freight\nconfiguration. Store-level and identical for every shopper.\n\"\"\"\ntype ShippingCountries\n @cacheControl(maxAge: 3600, scope: PUBLIC)\n{\n \"\"\"\n ISO 3166-1 alpha-3 codes, upper-case, without duplicates, in the order the\n platform lists them. Never empty: when the freight configuration declares no\n country, this holds the sales channel's country and `source` says so.\n \"\"\"\n countries: [String!]!\n\n \"\"\"\n Where `countries` came from. A consumer that judges an address against the\n list must not do so when this is `SALES_CHANNEL_FALLBACK`.\n \"\"\"\n source: ShippingCountriesSource!\n}\n\n\"\"\"The origin of a shipping-country list.\"\"\"\nenum ShippingCountriesSource {\n \"\"\"The store's freight configuration declares these countries.\"\"\"\n PLATFORM\n\n \"\"\"\n The freight configuration declares none, so the list is the sales channel's\n country alone. It is a guess, not a declared delivery area.\n \"\"\"\n SALES_CHANNEL_FALLBACK\n}\n\n\"\"\"A placed order owned by the signed-in shopper.\"\"\"\ntype CustomerOrder implements Node\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Global Node id. Refetch it with `node` or `customerOrder`.\"\"\"\n id: ID!\n\n \"\"\"\n Shopper-facing order number. The same value the list carries as its `id`.\n \"\"\"\n orderNumber: String!\n\n \"\"\"Raw OMS status code.\"\"\"\n status: String!\n\n \"\"\"Whether OMS currently permits whole-order cancellation.\"\"\"\n allowCancellation: Boolean!\n\n \"\"\"Timestamp when the order was placed.\"\"\"\n placedAt: DateTime\n\n \"\"\"Grand total recorded on the order.\"\"\"\n total: Money!\n\n \"\"\"Itemized totals recorded on the order.\"\"\"\n totals: [CustomerOrderTotal!]!\n\n \"\"\"Product lines recorded on the order.\"\"\"\n items: [CustomerOrderItem!]!\n\n \"\"\"Product lines grouped by their selected delivery option.\"\"\"\n deliveryOptions: [CustomerOrderDeliveryOption!]!\n\n \"\"\"Payments recorded on active and historical transactions.\"\"\"\n payments: [CustomerOrderPayment!]!\n\n \"\"\"Whether every package has a recorded delivery confirmation.\"\"\"\n isAllDelivered: Boolean\n\n \"\"\"Earliest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMin: DateTime\n\n \"\"\"Latest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMax: DateTime\n\n \"\"\"Timestamp when the order was invoiced.\"\"\"\n invoiceDate: DateTime\n\n \"\"\"\n Order delivery channel. The order-level value when OMS supplies it, otherwise\n the channel every logistics entry agrees on. Null when those entries differ.\n \"\"\"\n selectedDeliveryChannel: String\n\n \"\"\"\n Completion resolved once for this order, with the inputs the single-order payload carries. The list also passes courierStatusFinished, which this payload does not.\n \"\"\"\n completion: CustomerOrderCompletion!\n\n \"\"\"The progress stage this order is in.\"\"\"\n progress: CustomerOrderProgress!\n}\n\n\"\"\"\nOne of the four progress stages a shopper sees. Approval is not a stage.\n\"\"\"\nenum CustomerOrderProgressStage {\n \"\"\"The order was placed and payment has not started.\"\"\"\n PLACED\n\n \"\"\"Payment is pending, awaiting authorization, or denied.\"\"\"\n PAYMENT\n\n \"\"\"Payment was approved and the order is being prepared.\"\"\"\n PROCESSING\n\n \"\"\"The order was invoiced and is on its way or ready for pickup.\"\"\"\n SHIPPING\n}\n\n\"\"\"Progress stage resolved once for one order.\"\"\"\ntype CustomerOrderProgress {\n \"\"\"The stage the order is in. A cancelled order stays on PAYMENT.\"\"\"\n stage: CustomerOrderProgressStage!\n\n \"\"\"True when payment was denied or the order was cancelled.\"\"\"\n paymentFailed: Boolean!\n\n \"\"\"True when the order is cancelled or a cancellation was requested.\"\"\"\n cancelled: Boolean!\n}\n\n\"\"\"One total line recorded on a placed order.\"\"\"\ntype CustomerOrderTotal {\n \"\"\"Stable total category code.\"\"\"\n id: String!\n\n \"\"\"Upstream total name.\"\"\"\n name: String!\n\n \"\"\"Monetary value of this total line.\"\"\"\n value: Money!\n}\n\n\"\"\"One product line recorded on a placed order.\"\"\"\ntype CustomerOrderItem {\n \"\"\"Stable line identifier within the order.\"\"\"\n id: ID!\n\n \"\"\"Product name recorded at purchase time.\"\"\"\n name: String!\n\n \"\"\"Purchased quantity.\"\"\"\n quantity: Int!\n\n \"\"\"Product image recorded at purchase time.\"\"\"\n image: Image\n\n \"\"\"Base unit price recorded on the line.\"\"\"\n price: Money\n\n \"\"\"Unit list price recorded on the line.\"\"\"\n listPrice: Money\n\n \"\"\"Effective unit selling price recorded on the line.\"\"\"\n sellingPrice: Money\n\n \"\"\"\n Line total from the recorded selling price and quantity. Null when that price is absent.\n \"\"\"\n total: Money\n\n \"\"\"\n Tax recorded on the line. Null when OMS omitted it. A recorded zero is kept.\n \"\"\"\n tax: Money\n\n \"\"\"Custom values recorded on the line.\"\"\"\n customFields: [CustomerOrderItemCustomField!]!\n}\n\n\"\"\"A custom value recorded on an order line.\"\"\"\ntype CustomerOrderItemCustomField {\n \"\"\"Custom field name.\"\"\"\n name: String!\n\n \"\"\"Custom field value as recorded on the order.\"\"\"\n value: String!\n}\n\n\"\"\"Products that share one selected delivery option.\"\"\"\ntype CustomerOrderDeliveryOption {\n \"\"\"Selected service-level agreement name.\"\"\"\n selectedSla: String\n\n \"\"\"Address identifier recorded by OMS.\"\"\"\n addressId: String\n\n \"\"\"Delivery or pickup channel.\"\"\"\n deliveryChannel: String\n\n \"\"\"Estimated delivery timestamp for this option.\"\"\"\n shippingEstimateDate: DateTime\n\n \"\"\"Historical address recorded on the order.\"\"\"\n address: CustomerOrderAddress\n\n \"\"\"Product lines assigned to this option.\"\"\"\n items: [CustomerOrderItem!]!\n}\n\n\"\"\"Historical delivery address recorded on an order.\"\"\"\ntype CustomerOrderAddress {\n \"\"\"Recipient name.\"\"\"\n receiverName: String\n\n \"\"\"Postal code.\"\"\"\n postalCode: String\n\n \"\"\"City.\"\"\"\n city: String\n\n \"\"\"State or region.\"\"\"\n state: String\n\n \"\"\"ISO country code.\"\"\"\n country: String\n\n \"\"\"Street.\"\"\"\n street: String\n\n \"\"\"Street number.\"\"\"\n number: String\n\n \"\"\"Neighborhood.\"\"\"\n neighborhood: String\n\n \"\"\"Address complement.\"\"\"\n complement: String\n\n \"\"\"Address reference.\"\"\"\n reference: String\n}\n\n\"\"\"One payment recorded on a placed order.\"\"\"\ntype CustomerOrderPayment {\n \"\"\"Shopper-facing payment method name.\"\"\"\n methodName: String\n\n \"\"\"\n Last four digits recorded on the payment. Null when OMS omitted them or sent a blank.\n \"\"\"\n lastDigits: String\n\n \"\"\"Amount charged through this payment.\"\"\"\n amount: Money!\n\n \"\"\"Number of installments.\"\"\"\n installments: Int\n\n \"\"\"Gift-card redemption code when this payment used one.\"\"\"\n redemptionCode: String\n\n \"\"\"Bank-invoice number already recorded on the payment.\"\"\"\n bankInvoiceNumber: String\n\n \"\"\"Existing bank-invoice print URL.\"\"\"\n bankInvoicePrintUrl: URI\n}\n\n\"\"\"Which slice of the shopper's orders to read.\"\"\"\nenum CustomerOrdersView {\n \"\"\"Every order in the narrowed route result.\"\"\"\n ALL\n\n \"\"\"Orders the completion rule places in ongoing.\"\"\"\n ONGOING\n\n \"\"\"Orders the completion rule places in completed.\"\"\"\n COMPLETED\n\n \"\"\"Orders the completion rule places in cancelled.\"\"\"\n CANCELLED\n}\n\n\"\"\"The view resolved for one list order.\"\"\"\nenum CustomerOrderCompletionView {\n \"\"\"The order is still open.\"\"\"\n ONGOING\n\n \"\"\"The order has reached the shopper, or the shipment window has passed.\"\"\"\n COMPLETED\n\n \"\"\"The cancellation has finished.\"\"\"\n CANCELLED\n}\n\n\"\"\"Label id for the catalogue. The catalogue owns the sentence.\"\"\"\nenum CustomerOrderCompletionLabel {\n \"\"\"A finished cancellation.\"\"\"\n CANCELLED\n\n \"\"\"A cancellation that was requested and has not finished.\"\"\"\n CANCELLATION_REQUESTED\n\n \"\"\"An order that is not yet shipped.\"\"\"\n IN_PROGRESS\n\n \"\"\"Delivery was confirmed.\"\"\"\n DELIVERED\n\n \"\"\"Shipped, or completed from the estimate or the invoice period.\"\"\"\n SHIPPED\n\n \"\"\"Ready for the shopper to collect.\"\"\"\n READY_FOR_PICKUP\n\n \"\"\"Pickup collection was confirmed.\"\"\"\n COLLECTED\n}\n\n\"\"\"View and label resolved once for one list order.\"\"\"\ntype CustomerOrderCompletion {\n \"\"\"The view this order belongs to.\"\"\"\n view: CustomerOrderCompletionView!\n\n \"\"\"The catalogue label id.\"\"\"\n label: CustomerOrderCompletionLabel!\n}\n\n\"\"\"One order on the shopper's list. The detail document is CustomerOrder.\"\"\"\ntype CustomerOrderListItem {\n \"\"\"Shopper-facing order number. Pass this value to customerOrder.\"\"\"\n id: ID!\n\n \"\"\"Raw OMS status code. Empty when the list entry omits it.\"\"\"\n status: String!\n\n \"\"\"When the order was placed.\"\"\"\n placedAt: DateTime\n\n \"\"\"\n Grand total. Null when the list entry omits the value or the currency code.\n \"\"\"\n total: Money\n\n \"\"\"Sum of line quantities. Null when the list entry omits it.\"\"\"\n itemCount: Int\n\n \"\"\"Completion resolved once for this order.\"\"\"\n completion: CustomerOrderCompletion!\n\n \"\"\"Whether every package has a recorded delivery confirmation.\"\"\"\n isAllDelivered: Boolean\n\n \"\"\"Earliest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMin: DateTime\n\n \"\"\"Latest estimated delivery timestamp.\"\"\"\n shippingEstimatedDateMax: DateTime\n\n \"\"\"Timestamp when the order was invoiced.\"\"\"\n invoiceDate: DateTime\n\n \"\"\"Delivery channel when the list entry carries it.\"\"\"\n selectedDeliveryChannel: String\n}\n\n\"\"\"An edge in the shopper's order list.\"\"\"\ntype CustomerOrderListItemEdge {\n \"\"\"Resume cursor for the order after this one.\"\"\"\n cursor: Cursor!\n\n \"\"\"The list order.\"\"\"\n node: CustomerOrderListItem!\n}\n\n\"\"\"One page of the signed-in shopper's orders.\"\"\"\ntype CustomerOrdersConnection {\n \"\"\"Orders on this page.\"\"\"\n edges: [CustomerOrderListItemEdge!]!\n\n \"\"\"Cursors for the page.\"\"\"\n pageInfo: PageInfo!\n\n \"\"\"Route total for ALL. Classified count so far for a filtered view.\"\"\"\n totalCount: Int!\n\n \"\"\"True only when a filtered walk stopped at 20 upstream pages.\"\"\"\n totalIncomplete: Boolean!\n}\n\n\"\"\"Criteria applied before the page is returned.\"\"\"\ninput CustomerOrdersFilterInput {\n \"\"\"View to return. Defaults to every order.\"\"\"\n view: CustomerOrdersView = ALL\n\n \"\"\"Free-text term sent to the order route.\"\"\"\n text: String\n\n \"\"\"Inclusive start of the placed-date range, as an instant.\"\"\"\n placedFrom: DateTime\n\n \"\"\"Inclusive end of the placed-date range, as an instant.\"\"\"\n placedTo: DateTime\n}\n\n\"\"\"What the shopper submits with a whole-order cancellation.\"\"\"\ninput CustomerOrderCancelInput {\n \"\"\"Optional reason the merchant keeps. Trimmed; at most 500 characters.\"\"\"\n reason: String\n}\n\n\"\"\"The set of expected, typed cancellation failure codes.\"\"\"\nenum CustomerOrderCancelErrorCode {\n \"\"\"\n Checkout refused the cancellation. The order is past the point where the shopper\n can cancel it, or a cancellation was already requested.\n \"\"\"\n ORDER_NOT_CANCELLABLE\n\n \"\"\"\n No order the signed-in shopper can see has this id. A missing id and someone\n else's id are not distinguished.\n \"\"\"\n NOT_FOUND\n}\n\n\"\"\"A typed, expected failure of a cancellation.\"\"\"\ntype CustomerOrderCancelError {\n \"\"\"Machine-readable code for the failure.\"\"\"\n code: CustomerOrderCancelErrorCode!\n\n \"\"\"A fixed message. Never echoes the upstream response.\"\"\"\n message: String!\n}\n\n\"\"\"The result of a cancellation request.\"\"\"\ntype CustomerOrderCancelPayload {\n \"\"\"\n The order re-read after checkout accepted the request. Null on a user error, and\n null when the re-read failed after an accepted request.\n \"\"\"\n customerOrder: CustomerOrder\n\n \"\"\"Typed, expected failures. Empty on success.\"\"\"\n userErrors: [CustomerOrderCancelError!]!\n}\n\n\"\"\"\nThe signed-in shopper's saved cards, read from their persistent checkout\nprofile. Never cart-scoped.\n\"\"\"\ntype CustomerSavedCards\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n Stable identity for cache normalization. Not a Relay Node ID: derived from the\n session, with no id argument and no Query.node entry.\n \"\"\"\n id: ID!\n\n \"\"\"\n Every card the shopper saved, in the platform's order, including expired and\n unusable ones. Empty when none is saved.\n \"\"\"\n cards: [CustomerSavedCard!]!\n}\n\n\"\"\"\nOne of the shopper's saved cards, as the account sees it. Distinct from the\ncart-scoped SavedCard. Never carries a card number beyond its last four digits,\na BIN, or a security code.\n\"\"\"\ntype CustomerSavedCard\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Opaque, stable cache key. Not a Relay Node ID.\"\"\"\n id: ID!\n\n \"\"\"The card network the card belongs to.\"\"\"\n network: CardNetwork!\n\n \"\"\"\n The card number's last four digits. Empty when the platform's record has none.\n \"\"\"\n lastDigits: String!\n\n \"\"\"When the card expires. Null when the platform's record has no date.\"\"\"\n expiry: CardExpiry\n\n \"\"\"\n Whether the card can still be used, derived once here so the UI never re-derives it.\n \"\"\"\n status: CustomerSavedCardStatus!\n}\n\n\"\"\"A card network, such as Visa or Mastercard.\"\"\"\ntype CardNetwork {\n \"\"\"\n The platform's payment-system id for the network. Empty when the record has none.\n \"\"\"\n id: String!\n\n \"\"\"\n Display name of the network (e.g. \"Visa\"). Falls back to the id when the record has no name.\n \"\"\"\n name: String!\n}\n\n\"\"\"A card's expiry month and year.\"\"\"\ntype CardExpiry {\n \"\"\"Expiry month, from 1 to 12.\"\"\"\n month: Int!\n\n \"\"\"Four-digit expiry year.\"\"\"\n year: Int!\n}\n\n\"\"\"Whether a saved card can still be used.\"\"\"\nenum CustomerSavedCardStatus {\n \"\"\"The card has not expired and the platform reports nothing against it.\"\"\"\n USABLE\n\n \"\"\"\n The card's expiry date has passed. Wins over any other platform report.\n \"\"\"\n EXPIRED\n\n \"\"\"The card has not expired, but the platform reports it cannot be used.\"\"\"\n UNUSABLE\n}\n\n\"\"\"\nA card network the store accepts on the request's sales channel, with the\nrules card entry validates a card by. Read from the store's payment systems,\nnever from a cart.\n\"\"\"\ntype CardNetworkRule\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"\n The network. Its id is the platform's payment-system id, the same id a saved\n card's network carries.\n \"\"\"\n network: CardNetwork!\n\n \"\"\"\n Pattern a full card number of this network matches. Null when the store sets none.\n \"\"\"\n numberRegex: String\n\n \"\"\"\n Display mask for the card number, with 9 standing for a digit. Null when the store sets none.\n \"\"\"\n numberMask: String\n\n \"\"\"Pattern the security code matches. Null when the store sets none.\"\"\"\n securityCodeRegex: String\n\n \"\"\"Display mask for the security code. Null when the store sets none.\"\"\"\n securityCodeMask: String\n\n \"\"\"Whether the card asks for a security code.\"\"\"\n securityCodeRequired: Boolean!\n\n \"\"\"Whether the card asks for an expiry date.\"\"\"\n expirationRequired: Boolean!\n\n \"\"\"Whether the card asks for the holder's name.\"\"\"\n holderNameRequired: Boolean!\n\n \"\"\"Whether a cardholder document is required for this network.\"\"\"\n requiresDocument: Boolean!\n\n \"\"\"\n Whether a cardholder document field is shown for this network. Distinct from requiresDocument.\n \"\"\"\n displayDocument: Boolean!\n}\n\n\"\"\"\nOne of the signed-in shopper's saved addresses a new card can be billed to.\n\"\"\"\ntype CardBillingAddress\n @cacheControl(maxAge: 0, scope: PRIVATE)\n{\n \"\"\"Opaque, stable cache key. Not a Relay Node ID.\"\"\"\n id: ID!\n\n \"\"\"\n Name of the person the address belongs to. Null when the platform's record has none.\n \"\"\"\n receiverName: String\n\n \"\"\"Street name. Null when the platform's record has none.\"\"\"\n street: String\n\n \"\"\"Street number. Null when the platform's record has none.\"\"\"\n number: String\n\n \"\"\"\n Complement, such as an apartment. Null when the platform's record has none.\n \"\"\"\n complement: String\n\n \"\"\"Neighborhood. Null when the platform's record has none.\"\"\"\n neighborhood: String\n\n \"\"\"City. Null when the platform's record has none.\"\"\"\n city: String\n\n \"\"\"State or province. Null when the platform's record has none.\"\"\"\n state: String\n\n \"\"\"Postal code. Null when the platform's record has none.\"\"\"\n postalCode: String\n\n \"\"\"\n Country of the address, as the platform stores it (ISO 3166-1 alpha-3).\n \"\"\"\n country: String!\n}\n\n\"\"\"Payload returned by customerSavedCardRemove.\"\"\"\ntype CustomerSavedCardRemovePayload {\n \"\"\"\n The shopper's saved cards after the removal. Null when userErrors is non-empty.\n \"\"\"\n customerSavedCards: CustomerSavedCards\n\n \"\"\"Domain errors that stopped the removal. Empty on success.\"\"\"\n userErrors: [CustomerSavedCardRemoveError!]!\n}\n\n\"\"\"A domain error returned by customerSavedCardRemove.\"\"\"\ntype CustomerSavedCardRemoveError {\n \"\"\"Machine-readable error code.\"\"\"\n code: CustomerSavedCardRemoveErrorCode!\n\n \"\"\"Human-readable error message.\"\"\"\n message: String!\n}\n\n\"\"\"Why a saved card was not removed.\"\"\"\nenum CustomerSavedCardRemoveErrorCode {\n \"\"\"The id names no saved card of the signed-in shopper.\"\"\"\n CARD_NOT_FOUND\n\n \"\"\"\n The platform refused the removal, or the card is still listed after it.\n \"\"\"\n REMOVAL_REFUSED\n}\n\nenum link__Purpose {\n \"\"\"\n `SECURITY` features provide metadata necessary to securely resolve fields.\n \"\"\"\n SECURITY\n\n \"\"\"\n `EXECUTION` features provide metadata necessary for operation execution.\n \"\"\"\n EXECUTION\n}\n\nscalar link__Import\n\nscalar federation__FieldSet\n\nscalar federation__Scope\n\nscalar federation__Policy\n\nscalar federation__ContextFieldValue\n\nscalar _Any\n\ntype _Service {\n sdl: String\n}\n\nunion _Entity = Product\n";
18306
18306
  //#endregion
18307
18307
  //#region src/cli/core-sdl.ts
18308
18308
  /**