{
  "__schema": {
    "description": null,
    "queryType": {
      "name": "Query",
      "kind": "OBJECT"
    },
    "mutationType": {
      "name": "Mutation",
      "kind": "OBJECT"
    },
    "subscriptionType": null,
    "types": [
      {
        "kind": "OBJECT",
        "name": "Query",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "_empty",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customers",
            "description": "Page through registered customers (excluding guest / temporary\nrows). Used by the admin's customer list, by export jobs, and by\nCRM integrations. For a single customer by id, use customer; by\nemail, use customerByEmail.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of customers to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Customer",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customer",
            "description": "Fetch a single customer by id. Returns null when the id doesn't\nresolve. Includes the activity-stats sidecar and the customer's\naddresses in the same response.",
            "args": [
              {
                "name": "id",
                "description": "Customer id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Customer",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerByEmail",
            "description": "Fetch a customer by email. Email lookup is restricted to registered\n(non-temporary) customers; the resolver excludes temporary_customer\nrows, so guest checkouts sharing an email with a registered account\nwon't be returned.",
            "args": [
              {
                "name": "emailAddress",
                "description": "Email address to look up. Case-insensitive in practice — emails are normalized to lowercase at registration.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Customer",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerInfo",
            "description": "Fetch the activity-stats side car for one customer: login counters,\nlast-login timestamps, failed-login tally, account creation /\nmodification dates, and marketing-source attribution.\n\nUsed by the admin's customer detail page to render 'Last login' and\n'Failed attempts' badges, by security alerting on unusually high\nfailed-login counts, and by lifecycle marketing flows. For the\ncustomer's profile, addresses, and group memberships see the\ncustomer query.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer to fetch the activity-stats side car for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "CustomerInfo",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "products",
            "description": "Page through the catalog's products. Returns the headline fields\nonly (id, name from model, image, price) — there's no language\nselector on this query, so descriptions / material aren't included.\nUsed for catalog feeds, sitemaps, and admin / ERP exports that\nneed a product enumeration without per-language hydration.\n\nFor the full product detail (with descriptions, in a specific\nlanguage) use product. For category-scoped product fetches join\nvia productsToCategories.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of products to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Product",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "product",
            "description": "Fetch a single product by id, with its localized description\nrows. Pass languageId to scope the description / shortDescription\n/ material to one language; omit it to receive the row with the\nlowest language_id (the resolver orders ASC and takes the first).\n\nUsed to render the storefront's product detail page header and\nthe admin product editor's overview tab. For configurable options\nsee productAttributes; for variant-level stock and pricing see\nproductStock; for the variant-aware image gallery see\nproductExtraImages; for PDFs / CAD / videos see productsMedia.",
            "args": [
              {
                "name": "id",
                "description": "Product id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language to scope description rows to. Omit to get the row with the lowest language_id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Product",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productExtraImages",
            "description": "List the extra (non-main) images attached to one product, in display\norder, with localized captions.\n\nUse this on product detail pages alongside the main Product.image, and\nfor variant-aware galleries (filter the result by optionId == selected\nvariant's option-value id, plus optionId == 0 for variant-agnostic\nimages). For other media types — PDFs, datasheets, videos, CAD —\nuse productsMedia instead.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch extra images for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language id for the localized caption (1=EN, 5=SV, 6=FI, 9=ES, 14=IT — tenants may extend; resolve dynamically via the languages query).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductExtraImage",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsMedia",
            "description": "List the media attachments for one product (PDFs, CAD files, lighting\nprofiles, etc.), in display order, with localized descriptions.\n\nUsed to render the storefront's \"Documents & downloads\" block on\nproduct detail pages, and by the admin product editor's media tab.\nPass includeCategory=true (the default) to resolve each row's\nProductMediaCategory in the same round-trip; set false when you\nonly need the file list and want to skip the category JOIN.\n\nFor images that go in the main product gallery (with variant-\nspecific filtering), use productExtraImages instead.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch media for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language id for the localized name + description (1=EN, 5=SV, 6=FI, 9=ES, 14=IT — tenants may extend; resolve dynamically via the languages query).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "includeCategory",
                "description": "Whether to resolve each media row's category in the same response. Defaults to true.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "true",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductMedia",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countries",
            "description": "List the countries the tenant supports. Used everywhere an address is\ncaptured: customer registration, checkout, address book, admin order\nbuilder. The storefront also picks the shopper's default currency\nfrom Country.defaultCurrencyId on first visit, and renders printed\naddresses with the AddressFormat referenced by Country.addressFormatId.\n\nFor the address-rendering templates themselves see addressFormats;\nfor the currency definitions see currencies.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of countries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Country",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "configurationGroups",
            "description": "List every configuration group, in display order. Returns just the\ngroup metadata — for a flat list of every setting (or per-group)\nuse configurations; for groups eagerly hydrated with their settings\nin one round-trip, use configurationGroupsWithSettings.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ConfigurationGroup",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "configurations",
            "description": "Page through configuration settings. Pass groupId to scope to one\nsection of the admin UI (and the resolved group field will be\nhydrated in the same response); omit it to enumerate every setting\nacross the platform.\n\nUsed by the admin's configuration editor, by tooling that audits\nplatform settings, and by deploy / migration scripts that diff\nsettings across tenants. For a tree-shaped fetch (groups +\nnested configurations) see configurationGroupsWithSettings.",
            "args": [
              {
                "name": "groupId",
                "description": "Restrict to settings inside one ConfigurationGroup. Omit to span all groups.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of settings to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Configuration",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "configurationGroupsWithSettings",
            "description": "List every configuration group with its settings hydrated in one\nresponse. The resolver runs a single LEFT JOIN across\nconfiguration_group + configuration, ordered by group sort order,\nand folds the rows into a tree shape — groups with their nested\nconfigurations[] field populated.\n\nUse this when the admin UI needs the full settings tree for a\nrendering pass (e.g. when the configuration editor first loads).\nFor a flat list of just the groups, or settings filtered by group,\nuse configurationGroups / configurations — those are lighter when\nyou don't need every setting in every group.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ConfigurationGroup",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adminNotifications",
            "description": "List admin-facing error notifications in insertion order. Used by the\nadmin dashboard's notification inbox to render the operator alert\nqueue, by the email-dispatch worker that emails un-emailed entries,\nand by oncall runbooks that need to inspect what's been raised\nrecently.\n\nNo filter args today — paginate with limit / offset to walk the full\nqueue. For per-action audit entries (logins, exports, password\nchanges) see actionRecorderEntries instead; this surface is for\nerror-class operator alerts, not action audits.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of notifications to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "AdminNotification",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adminTrackingCreate",
            "description": "List product-creation / lifecycle audit entries, newest first. Pass\nproductId to scope to one product's history (the admin product\neditor's 'history' tab uses this), userId to scope to one admin's\nactivity (auditing what one operator has touched), or omit both to\nwalk the full feed.\n\nUsed by the admin product editor's history view, by accountability\nreports surfacing 'who created what' across the catalog, and by ERP\nreconciliation flows. For per-price audit see productPriceHistory;\nfor the broader cross-module audit log see actionRecorderEntries.",
            "args": [
              {
                "name": "productId",
                "description": "Restrict to one product's history.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "userId",
                "description": "Restrict to one admin's activity.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "AdminTrackingCreate",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "administrators",
            "description": "List admin user accounts for the tenant. Used by the admin\nuser-management page (visible to superadmins), by access reviews\nthat audit who has the right to do what, and by the SSO bridge to\nmap an external identity to a local admin record.\n\nNo filter args today — paginate with limit / offset to walk the full\nlist. For the audit trail of what each admin has done, see\nactionRecorderEntries.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of administrators to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Administrator",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currencies",
            "description": "List the currencies enabled for the tenant. Used by the storefront's\ncurrency switcher to render the available options, by the price\nformatter to look up the active currency's symbols and rate, and by\nthe admin panel's currency settings tab.\n\nFor the country-level default-currency mapping (which currency a\nshopper from a given country sees by default) check\nCountry.defaultCurrencyId on the countries query — this surface\nenumerates the currencies themselves.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of currencies to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Currency",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orders",
            "description": "Page through orders, newest first. Pass customerId to scope to one\ncustomer's order history (used by the customer account 'My orders'\npage and admin customer detail). Used by the admin order list, by\nfulfilment dashboards, by ERP / accounting exports, and by reports\nthat walk the full order book.\n\nFor one order's full detail (line items, totals, status history,\npayment notifications) use order with the appropriate sub-fields.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of orders to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "customerId",
                "description": "Filter to one customer's orders.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Order",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "order",
            "description": "Fetch a single order by id, with the full record hydrated. Returns\nnull when the id doesn't resolve. Sub-fields (items, totals,\ndiscountCoupons, vivawalletPayments, etc.) lazy-load on demand,\nso a minimal selection still does a fast single-row read.",
            "args": [
              {
                "name": "id",
                "description": "Order id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Order",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categories",
            "description": "Page through categories across the full tree. Returns each category\nwith all of its CategoryDescription rows attached, so a single fetch\ncan render any language. Used by sitemap builders, by exports / ERP\nsync, and by the admin's category browser.\n\nFor a single category by id, use category instead — it lets you scope\nto one language to skip extraneous CategoryDescription rows.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of categories to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Category",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "category",
            "description": "Fetch a single category by id. Pass languageId to receive only that\nlanguage's CategoryDescription row in the descriptions array (the\nstorefront uses this on category page render); omit it to receive\nevery language for the category (the admin category editor uses\nthis).",
            "args": [
              {
                "name": "id",
                "description": "Category id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language to scope CategoryDescription rows to. Omit for all languages.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Category",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderStatuses",
            "description": "Return every order status defined for the connected tenant in the\nrequested language. Use this to render status filters and badges\nin the admin panel, and to translate Order.status /\nOrderStatusHistory.statusId numeric ids to display labels.\n\nTenants extend the canonical id set with custom workflow stages and\npayment-provider intermediate states; resolve dynamically rather\nthan hardcoding. For per-order transition history use\norderStatusHistory; to record a new status transition use\naddOrdersStatusHistory.",
            "args": [
              {
                "name": "languageId",
                "description": "Language id to fetch labels in. Resolve via the languages query rather than hardcoding — tenants may extend the platform default set (1=EN, 5=SV, 6=FI, 9=ES, 14=IT).",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrderStatus",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderStatusHistory",
            "description": "Paginated status-transition timeline for one order, returned\nnewest-first. Use this to render the \"status history\" widget on an\nadmin order detail view, or to investigate when an order entered\na particular state.\n\nPass statusId to filter to one specific status (e.g. only the\nShipped transitions). For the broader change-log including\nnon-status edits see ordersHistory; to record a new transition\nsee the addOrdersStatusHistory mutation.",
            "args": [
              {
                "name": "orderId",
                "description": "Order to fetch the timeline for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "statusId",
                "description": "Filter to transitions to this single status id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum rows to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Number of rows to skip for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrderStatusHistory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ordersHistory",
            "description": "Paginated audit log of changes for one order, returned newest-first.\nUse this for the \"history\" tab on an order detail view, for\ncompliance audits, or to reconstruct who changed what and when on\nan order that's now in dispute.\n\nFilter by userId to see only one administrator's edits, or by date\nrange (startDate / endDate, ISO YYYY-MM-DD) to scope to one\ninvestigation window. For status-only transitions there's a more\nfocused view via orderStatusHistory.",
            "args": [
              {
                "name": "orderId",
                "description": "Order to fetch the change log for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "userId",
                "description": "Filter to changes made by this administrator user id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "startDate",
                "description": "ISO date (YYYY-MM-DD) — return only entries on or after this date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endDate",
                "description": "ISO date (YYYY-MM-DD) — return only entries on or before this date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum rows to return (default 10).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Number of rows to skip for pagination (default 0).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderHistoryEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languages",
            "description": "List the languages enabled for the tenant. Used by the storefront's\nlanguage switcher, by the admin's language picker, and by any\nintegration that needs the tenant's full set of canonical\nlanguage ids before resolving per-language description rows on\nother types.\n\nReturns the platform's shared core ids plus any tenant-defined\nextensions. The image / directory fields come back nested under\nmetadata to keep the i18n-bundle plumbing separate from the\nuser-facing identity (id / code / name).",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of languages to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Language",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "availabilities",
            "description": "List availability labels, optionally filtered by language. Pass\nlanguageId to get only the labels for one storefront language; omit\nit to receive every (id, languageId) pair the tenant has defined.",
            "args": [
              {
                "name": "languageId",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Availability",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouses",
            "description": "Page through the warehouses the tenant has configured. Used by the\nstorefront's 'Find a store' / store-locator picker, by the admin's\nwarehouse list, by the order-creation flow when an operator picks\nwhere to ship from, and by ERP / WMS reconciliation reports.\n\nFor per-warehouse on-hand quantities, follow Warehouse.stock or\nuse the warehouseStock query directly. For the variant-level\nstock totals (across all warehouses), see productStock.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of warehouses to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Warehouse",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseStock",
            "description": "List per-warehouse on-hand quantities. All filters are optional:\npass productId to get a product's split across all warehouses, pass\nwarehouseId to list every product's quantity at one warehouse, or pass\nboth to get the single (warehouse, product) row.\n\nUsed by the storefront's 'check stock at your local store' UI, by the\nadmin's warehouse inventory reports, and by fulfilment routing logic.\nFor variant-level totals across warehouses see productStock; for the\nfull warehouse master list (locations, codes, defaults) see the\nwarehouses query.",
            "args": [
              {
                "name": "warehouseId",
                "description": "Restrict to one warehouse. Omit to span all warehouses.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "productId",
                "description": "Restrict to one product. Omit to span all products.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "WarehouseStock",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "manufacturers",
            "description": "Page through the brands in the catalog. Returns each manufacturer\nwith all its ManufacturerInfo rows attached, so a single fetch can\nrender any language. Used by the storefront's brand index, by\nsitemap builders, and by ERP exports.\n\nFor one brand by id (with the option to scope description rows to\none language), use manufacturer.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of brands to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Manufacturer",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "manufacturer",
            "description": "Fetch a single brand by id. Pass languageId to receive only that\nlanguage's ManufacturerInfo row in the infos array (the storefront\nuses this on brand-page render); omit it to receive every language\n(the admin brand editor uses this).",
            "args": [
              {
                "name": "id",
                "description": "Brand id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language to scope ManufacturerInfo rows to. Omit for all languages.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Manufacturer",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quote",
            "description": "Fetch a single quote by id, with line items hydrated. Returns null\nwhen the id doesn't resolve. Used by the admin quote editor's\ndetail view, by the customer-facing 'My quote' page, and by the\nquote-to-order conversion flow when an operator accepts a quote.",
            "args": [
              {
                "name": "id",
                "description": "Quote id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "Quote",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quotesByCustomer",
            "description": "List quotes for one customer, optionally scoped to one statusId.\nUsed by the customer account 'My quotes' page (typically scoped to\n'Open' + 'Proposal sent') and by the admin's per-customer quote\nlist.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer id to fetch quotes for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "statusId",
                "description": "Filter to quotes with this status id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of quotes to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "Quote",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quotesBySession",
            "description": "List quotes for one anonymous session — quotes captured before the\ncustomer logged in or registered. Used to migrate anonymous quotes\nonto a fresh customer account at sign-up time.",
            "args": [
              {
                "name": "sessionId",
                "description": "Session id to fetch quotes for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "statusId",
                "description": "Filter to quotes with this status id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of quotes to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "Quote",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteStatuses",
            "description": "Return the quote-status definitions in the requested language.\nUsed to render status filters and badges in the admin quote\nlist, and to translate Quote.statusId / QuoteStatusEntry.statusId\nnumeric ids to display labels.\n\nTenants may extend the canonical id set with custom workflow\nstages; resolve dynamically rather than hardcoding.",
            "args": [
              {
                "name": "languageId",
                "description": "Language to fetch labels in. Required.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "QuoteStatus",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteStatusHistory",
            "description": "Return the status-transition timeline for one quote. Mirrors\norderStatusHistory but for quotes. Used by the admin quote\ndetail's history tab; to record a new transition (and optionally\nnotify the customer) use addQuoteStatusHistory.",
            "args": [
              {
                "name": "quoteId",
                "description": "Quote to fetch the timeline for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "QuoteStatusEntry",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteFiles",
            "description": "List the attachments belonging to one quote, in id order. Used\nby the admin quote editor's 'Files' tab, by the customer-facing\nquote view that shows the proposal PDF alongside any uploaded\nbriefs, and by the quote-to-order conversion flow when the\nseller wants to forward attachments through to the resulting\norder.",
            "args": [
              {
                "name": "quoteId",
                "description": "Quote to fetch attachments for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "QuoteFile",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteGroups",
            "description": "List the quote groups defined for the tenant in the requested\nlanguage. Used to render the group dropdown on the storefront's\nquote-request form, and the same selector in the admin quote\neditor when an operator creates a quote on a customer's behalf.\n\nResolves only to rows matching the languageId — the resolver\ndoesn't fall back to other languages, so ensure the language\nhas been seeded with the full group set or pass a known\nlanguage id.",
            "args": [
              {
                "name": "languageId",
                "description": "Language to fetch group labels in. Required.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "QuoteGroup",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productAttributes",
            "description": "List the configurable options for one product, with each option's\nselectable values, in the requested language.\n\nUse this to render the variant selector on product detail pages, to\npopulate option pickers in the admin order builder, and to validate\nincoming OrderItemVariant choices on createOrder. For per-product\ncatalog attributes (size charts, technical specs, EAV-style fields),\nsee the products query — those live on the eav_attribute system,\ndistinct from this product-options system.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch options for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language id for localized name + description (1=EN, 5=SV, 6=FI, 9=ES, 14=IT — tenants may extend; resolve dynamically via the languages query).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductOption",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productStock",
            "description": "List the stock rows for one product. Pass variant to scope to a single\nSKU (matching ProductStock.variant); omit it to receive every variant\nof the product.\n\nUse this for product detail pages that need per-variant availability,\nfor the admin product editor's stock tab, and for ERP reconciliation\nflows. For per-warehouse split see warehouseStock; for the price-change\naudit trail see productPriceHistory.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch stock rows for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "variant",
                "description": "Variant identifier to filter to a single SKU. Omit for all variants of the product.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductStock",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productPriceHistory",
            "description": "List historical price changes for a product, newest first. Pass stockId\nto scope to one variant, omit it to receive every variant's history plus\nthe product-level changes (stockId = 0). Filter by startDate / endDate\nto bracket a time window, by userName to audit one admin's pricing\nedits, and use limit / offset to page through long histories.\n\nUsed by the admin pricing tab's history view, by the reporting dashboard\nthat surfaces frequent price changers, and by ERP reconciliation flows\nthat need to verify an external price update landed. For the current\nlive price use ProductStock.price (per-variant) or the price field on\nProduct (product-level).",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch the price history for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "stockId",
                "description": "Variant (products_stock) id to scope the history to a single SKU. Pass 0 for product-level changes only. Omit for everything.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "startDate",
                "description": "Lower bound of the date filter (inclusive). ISO-8601 date or datetime.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endDate",
                "description": "Upper bound of the date filter (inclusive). ISO-8601 date or datetime.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "userName",
                "description": "Filter to changes made by this admin username.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of history rows to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductPriceHistory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsToCategories",
            "description": "List product-to-category link rows. All filters are optional and\ncomposable: pass productId to get every category one product belongs to,\npass categoryId to get every product in one category, or pass both to\ncheck for the existence of a single link. Use limit / offset to page\nthrough large categories (the storefront's category listing pages do).\n\nFor full Product or Category records (with their fields, prices,\ndescriptions), follow the resolved product / category fields, or query\nproducts / categories directly — productsToCategories is a navigation /\nmembership surface, not a full product or category fetch.",
            "args": [
              {
                "name": "productId",
                "description": "Restrict to links for this product. Omit to span all products.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "categoryId",
                "description": "Restrict to links for this category. Omit to span all categories.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of links to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductCategoryLink",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersBasket",
            "description": "List the saved-basket lines for one customer, newest line first.\nPass cartId to scope to one named cart (lets a single customer hold\nmultiple parallel baskets — saved-for-later vs. active checkout vs.\na B2B quote draft).\n\nUsed by the storefront to rehydrate the cart on login, by the\nabandoned-basket email job, by the admin order-builder when an\noperator wants to create an order on behalf of a logged-in\ncustomer, and by B2B portal flows that quote off saved baskets.\nFor finalized order lines see ordersProducts; for shared-basket\nflows see sharedBasket.",
            "args": [
              {
                "name": "customersId",
                "description": "Customer to fetch the saved basket for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "cartId",
                "description": "Cart key, when the customer holds multiple parallel baskets. Omit to receive every basket the customer has.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomersBasketItem",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountCoupons",
            "description": "Page through every coupon definition in the tenant. Each coupon is\nreturned with all its applicability arrays (categories / products /\ncustomers / orders / manufacturers / shippingMethods / zones) and\nthe redemption counters (maxUse vs numberAvailable).\n\nUsed by the admin's coupon list / editor, by the storefront\nself-service 'enter code' flow that pre-validates a code on the\nfly, and by reconciliation reports. For per-order applied-coupons\nsee discountCouponsToOrders / Order.discountCoupons; for\nper-customer attach / revoke see the customer-coupon mutations.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of coupons to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "DiscountCoupon",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountCoupon",
            "description": "Fetch one coupon by id, with applicability arrays and counters\nfully hydrated. Returns null when the id doesn't resolve. Used by\nthe storefront's 'enter code' flow to validate a single code and\nlook up its discount value before applying it to the basket.",
            "args": [
              {
                "name": "id",
                "description": "Coupon id to fetch.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "DiscountCoupon",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountCouponsToOrders",
            "description": "Page through coupon-to-order links. Filters compose with AND: pass\norderId to fetch every coupon redeemed against one order\n(typically reached via Order.discountCoupons instead), or\ncouponCode to walk the redemption history of one coupon (also\nreachable via DiscountCoupon.orders).\n\nUsed by coupon-performance reports (top-redeemed coupons,\nredemption-by-week dashboards), by refund flows that need to\naudit which coupons applied to a returned order, and by ERP /\naccounting exports.",
            "args": [
              {
                "name": "orderId",
                "description": "Restrict to one order's redemption links.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "couponCode",
                "description": "Restrict to one coupon's redemption history.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of link rows to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "DiscountCouponOrderLink",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderItems",
            "description": "Return every line on a single order, including each line's variants.\nUse this when rendering an order detail view where you need the line\nbreakdown separately from the order header.\n\nThe same data is exposed through Order.items, which is preferable\nwhen you're already fetching the order and want to avoid a round\ntrip. To modify lines on an existing order, see the\naddOrdersProduct / updateOrdersProduct / removeOrdersProduct\nmutations, which write to the same underlying orders_products row.",
            "args": [
              {
                "name": "orderId",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderItem",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderTotals",
            "description": "Return the totals breakdown for one order — the rows that render\nas the \"Subtotal / Tax / Shipping / Discount / Grand total\" block\non an invoice or order summary.\n\nPass class to scope to one row category (e.g. just 'Tax' to render\nthe tax breakdown). Omit it to receive every row sorted by\nsortOrder so the result can be rendered top-to-bottom directly.\n\nOrder.totals exposes the same data with the same arguments and is\npreferable when you're already fetching the order header.",
            "args": [
              {
                "name": "orderId",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "class",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderTotal",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "services",
            "description": "List service pages in the requested language. Pass categoryId to\nscope to one CMS section (e.g. the 'Help' branch); pass\ndisplayFooter = true to restrict to footer-visible pages\nonly.\n\nUsed by the storefront's CMS routing layer to render individual\ninformation pages, by the footer layout to enumerate footer\nlinks, and by sitemap builders. For the navigation tree of\ncategories see serviceCategories; for product-catalog content\nsee products / categories.",
            "args": [
              {
                "name": "languageId",
                "description": "Language to fetch description rows in. Required.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "categoryId",
                "description": "Restrict to pages under one ServiceCategory id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "displayFooter",
                "description": "When true, restrict to pages with displayFooter = 1 (footer-visible only).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Service",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "serviceCategories",
            "description": "List service categories in the requested language, optionally\nscoped to one branch of the tree (parentId) or to footer-visible\ncategories only (displayFooter). Returns the categories with\ntheir children nested in-place, so a single fetch can render the\nfull storefront CMS navigation tree.\n\nUsed by the storefront's CMS-page navigation, by the footer\nlayout, and by the admin's service-category editor. For the\nindividual service pages living under each category, see the\nservices query.",
            "args": [
              {
                "name": "languageId",
                "description": "Language to fetch description rows in. Required.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "parentId",
                "description": "Restrict to children of one parent category id. Pass 0 to scope to top-level categories; omit to span all.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "displayFooter",
                "description": "When true, restrict to categories with displayFooter = 1 (footer-visible only).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ServiceCategory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reviews",
            "description": "Page through reviews. Filters compose with AND: pass productId to\nscope to one product (powering the product-page review widget),\nstatusId to filter by moderation state (e.g. 'approved' for\nstorefront, 'pending' for the admin moderation queue), languageId\nto scope ReviewDetail rows to one language.\n\nUsed by the storefront's product-page review listing, by the admin\nmoderation tools, and by review-syndication exports. For aggregate\ncounts and average ratings (without the full review bodies) see\nreviewSummaries.",
            "args": [
              {
                "name": "productId",
                "description": "Restrict to reviews for one product.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "statusId",
                "description": "Restrict to reviews with this moderation status id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Scope ReviewDetail rows to one language id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of reviews to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Review",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reviewSummaries",
            "description": "Aggregate review counts and ratings across one or many products.\nPass productId to fetch the summary for a single product (powering\nthe rating badge on a product page); omit it to walk every product's\naggregate (used by sitemap / feed builders that emit aggregate\nrating microdata).",
            "args": [
              {
                "name": "productId",
                "description": "Restrict to one product's summary.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of summaries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ReviewSummary",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "banners",
            "description": "List every banner the tenant has defined, in id order. Use limit /\noffset to page through. For zone-scoped fetches (e.g. only the banners\nin the homepage hero zone) use bannersByGroup instead — it's the same\nsurface filtered by Banner.group.\n\nFor per-day click / impression series, use the Banner.historyByDate\nfield on each banner, or the bannerHistory query directly.",
            "args": [
              {
                "name": "limit",
                "description": "Maximum number of banners to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Banner",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bannersByGroup",
            "description": "List the banners belonging to one storefront zone. The group code is\nfree-form and tenant-defined — common examples are 'home', 'sidebar',\n'category-N'. Used by the storefront's banner renderer to populate one\nzone at a time.",
            "args": [
              {
                "name": "group",
                "description": "Group code identifying the zone. Tenant-defined, see Banner.group for examples.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of banners to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Banner",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "faqCategories",
            "description": "List FAQ categories with their nested questions. Pass languageId to\nscope description rows to one language (skipping non-matching\nFaqCategoryDescription / FaqQuestionDescription rows in the\nresponse). visibleOnly = true filters out hidden categories AND\nquestions; includeHiddenQuestions overrides the visibility filter\nfor questions only (categories still respect visibleOnly).\nsortByOrder = true sorts categories and questions by their\nsortOrder fields.\n\nUsed to render the storefront's help-center landing page, the\naccordion-style FAQ sections on product / category pages, and to\nseed the AI assistant's grounding corpus. For a single question\nby id or slug, use faqQuestion.",
            "args": [
              {
                "name": "languageId",
                "description": "Language to scope description rows to. Omit for all languages.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "visibleOnly",
                "description": "When true, drop hidden categories and (unless includeHiddenQuestions overrides) hidden questions.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "includeHiddenQuestions",
                "description": "When true, include hidden questions inside visible categories — overrides the question-side filter applied by visibleOnly.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "sortByOrder",
                "description": "When true, sort categories and questions by their sortOrder fields. When false, fall back to id ordering.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "FaqCategory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "faqQuestion",
            "description": "Fetch a single FAQ question by id or by slug. Pass id to look up\nthe question directly; pass slug to look it up by the per-language\nFaqQuestionDescription.url field (the routable form when\nenableUrl = 1). Use languageId to scope returned descriptions to\none language; visibleOnly = true returns null when the question\nis hidden.",
            "args": [
              {
                "name": "id",
                "description": "Question id to fetch.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "slug",
                "description": "Slug to look up. Resolves against FaqQuestionDescription.url; pair with languageId for unambiguous matching.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "languageId",
                "description": "Language to scope the slug match and the returned descriptions.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "visibleOnly",
                "description": "When true, return null for questions whose visibility = 0.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "FaqQuestion",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerGroups",
            "description": "List customer groups available to the requesting context, with each\ngroup's dynamicDiscounts and priceList eagerly hydrated. The\nresolver also reads the X-Customer-Type header and filters to\ngroups whose customerType is 'all' or matches the header — so a\nB2C front-end and a B2B portal hitting the same endpoint see\ndifferent group sets without explicit filter args.\n\nPass type to scope to a specific groupsType (e.g. 'dynamic' to fetch\nonly the matrix groups), and activeOnly = true to drop groups\noutside their dateStart / dateEnd window. Used by the storefront's\npricing engine, by the admin's group editor, and by ERP exports.\nFor per-rule cross-group fetch see customerGroupPriceList.",
            "args": [
              {
                "name": "type",
                "description": "Restrict to groups of this groupsType (e.g. 'fixed', 'dynamic', 'matrix', 'list').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "activeOnly",
                "description": "When true, only return groups currently within their dateStart / dateEnd window (and only active dynamic-discount + price-list rows). Defaults to false.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomerGroup",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersHistory",
            "description": "Page through the change log for one customer, newest first. Filters\ncompose with AND: sourceTable scopes to one logical table (e.g.\n'address_book' to see only address edits), userId scopes to one\nadmin's edits to the customer.\n\nUsed by the admin's customer detail history tab, by GDPR /\ndata-subject-access requests that need a complete edit trail, and\nby abuse / fraud investigation. For the cross-module action audit\nsee actionRecorderEntries; for product-record edits see\nadminTrackingCreate.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer to fetch history for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "userId",
                "description": "Filter to changes made by one admin id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "sourceTable",
                "description": "Filter to changes on one source table (e.g. 'customers', 'address_book', 'customers_info').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "CustomerHistoryEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersApi",
            "description": "List ERP-mirrored customer records, with optional filters. Used by\nthe admin's ERP-status panel to inspect what the platform has\ncached from the source ERP, by B2B portals that need contract-side\nfields (credit limit, payment term, sales rep) at order placement,\nand by reconciliation reports comparing the ERP cache with the\nplatform-side Customer record.\n\nFilter args use the Finnish ERP field names: asiakaskoodi (customer\ncode), email, alennusryhma (discount group). For the platform-side\ncustomer record (logins, addresses, group membership), join on\nCustomer.apiId = CustomersApiCustomer.asiakaskoodi via the customer\nquery.",
            "args": [
              {
                "name": "asiakaskoodi",
                "description": "Filter to one ERP customer code (Finnish 'asiakaskoodi').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "email",
                "description": "Filter to one email address (case-sensitive — matches the ERP-side normalization).",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "alennusryhma",
                "description": "Filter to one ERP discount-group code (Finnish 'alennusryhma').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of records to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "CustomersApiCustomer",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerGroupPriceList",
            "description": "Page through group-based price-list rules across all customer groups,\nwith optional filters. This is the cross-group surface — equivalent\nin shape to CustomerGroup.priceList but reachable without first\nloading a parent group, useful when the caller has a productId in\nhand and wants every group's override for it, or wants to validate\nprice rules around a specific date.\n\nPass validOn to bracket only rules active on a specific date (the\nresolver compares against valid_from / valid_to inclusive). Filters\ncompose with AND. Used by admin pricing reports, by ERP / PIM sync\nflows that mirror group price overrides outward, and by the customer\npricing audit. For per-group hydration via the group object, use\ncustomerGroups and consume the priceList field on each group.",
            "args": [
              {
                "name": "customerGroupId",
                "description": "Restrict to one customer group's rules.",
                "type": {
                  "kind": "SCALAR",
                  "name": "ID",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "productId",
                "description": "Restrict to rules for one product.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "validOn",
                "description": "Date the rule must be active on (compared inclusive against valid_from / valid_to). ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of rules to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomerGroupPriceRule",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "browseHistory",
            "description": "Page through browse-history entries, newest first. Filters compose\nwith AND: pass customerId to follow one logged-in customer's journey,\nsessionKey to reconstruct one anonymous (or pre-login) session, or\nuse the date-range pair for timeboxed analytics queries.\n\nUsed by the 'Recently viewed' surface, by funnel-analytics dashboards,\nand by abuse / scraping investigations needing the IP + user-agent\ntrail. Note that anonymous and logged-in views can share a sessionKey\n— joining the two halves of a journey across the login boundary.",
            "args": [
              {
                "name": "customerId",
                "description": "Restrict to one logged-in customer's history.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "sessionKey",
                "description": "Restrict to one storefront session's history.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "startDate",
                "description": "Inclusive lower bound on the page-view timestamp. ISO-8601 datetime.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endDate",
                "description": "Inclusive upper bound on the page-view timestamp. ISO-8601 datetime.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "BrowseHistory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingAddresses",
            "description": "List the billing-only addresses belonging to one customer, in\ninsertion order. Used by the storefront's checkout when a B2B\ncustomer has multiple invoice recipients to pick from, by the customer\naccount's 'Invoice addresses' page, and by admin order-creation when\nrouting an invoice to a non-shipping recipient.\n\nFor shipping addresses (with optional alternate billing in the same\nrow) see addressBookEntries. For the address-rendering templates\nthat turn these fields into a printed block, see addressFormats.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer to fetch billing addresses for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of addresses to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "BillingAddress",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiProcessQueue",
            "description": "Page through the outbound-API job queue. All filters are optional\nand AND-composable: scope by api / endpoint / jobId for targeted\ninvestigations, and by status to split the queue into 'queued'\n(no error) vs 'failed' (last attempt errored).\n\nUsed by the admin queue dashboard to surface stuck jobs, by oncall\nrunbooks investigating ERP-sync incidents, and by maintenance jobs\nthat retry or expire failed entries.",
            "args": [
              {
                "name": "status",
                "description": "Filter to one status. Example values: 'queued', 'failed'.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "api",
                "description": "Filter to jobs targeting one external API (e.g. 'netvisor').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endpoint",
                "description": "Filter to jobs hitting one endpoint path.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "jobId",
                "description": "Filter to one worker-side job id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of jobs to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ApiProcessJob",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressBookEntries",
            "description": "List the address-book entries belonging to one customer. Each row is\na shipping address with optional alternate-billing fields filled in\nwhen the customer wants invoices routed to a different recipient.\n\nUsed by the storefront's address picker at checkout, by the customer\naccount 'My addresses' page, and by admin order-creation to load a\ncustomer's saved addresses. For a customer's standalone billing-only\nbook see billingAddresses; for snapshots of billing/delivery on a\nfinalized order see the order ecosystem instead.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer to fetch addresses for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "AddressBook",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "domains",
            "description": "List active storefront-domain configurations (status = 1). Pass\nlocale to scope to one language code (matches Domain.code, e.g.\n'fi' or 'en'); omit it to enumerate every domain the tenant has\nenabled.\n\nUsed by the storefront's bootstrap to pick the active domain's\npixel ids and hreflang at render time, by the language switcher\nto enumerate alternate-language domains, and by the per-domain\nAI chat-widget bootstrap to load the right assistant +\nvector-store. For language metadata not specific to a domain,\nsee the languages query.",
            "args": [
              {
                "name": "locale",
                "description": "Restrict to one language code (matches Domain.code, e.g. 'fi', 'sv', 'en').",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of domains to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Domain",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryAddresses",
            "description": "List the modern delivery-address entries for one customer. The\nresponse can side-load the legacy AddressBook bridge for entries\nthat were migrated from the old schema — pass includeLegacy=true\nwhen the calling code still needs to reach the legacy billing\nfields on the original row.\n\nUsed by the storefront's checkout shipping picker on tenants\nrunning the modern address split, by the customer-account\n'Delivery addresses' page, and by admin order-creation flows.\nFor the legacy single-table address book see addressBookEntries;\nfor the standalone billing book see billingAddresses.",
            "args": [
              {
                "name": "customerId",
                "description": "Customer to fetch delivery addresses for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of addresses to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "includeLegacy",
                "description": "When true, side-load the legacy AddressBook row referenced by each entry's legacyAddressBookId. When false (default), legacyAddress is left null even if a bridge id exists.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "DeliveryAddress",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bannerHistory",
            "description": "Standalone query for one banner's per-day history — equivalent to\nBanner.historyByDate but reachable without first loading the parent\nBanner. Used by the admin's stats dashboard when the calling code\nalready knows the banner id and wants the chart in a single\nround-trip.\n\nReturns day-bucketed aggregates ordered newest first. For the banner\nmetadata (title, url, group, image) and lifetime totals, query the\nbanners surface alongside.",
            "args": [
              {
                "name": "bannerId",
                "description": "Banner to fetch the per-day history for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "startDate",
                "description": "Inclusive lower bound on the banner-history date. ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endDate",
                "description": "Inclusive upper bound on the banner-history date. ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of day-buckets to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination across day-buckets.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "BannerHistoryEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bankPayments",
            "description": "List bank-transfer settlements, newest first. Filters compose with AND:\npass ordersId to fetch one order's settlements (typically reached via\nOrder.bankPayments instead), and use the date-range pairs to scope\nto a posting-date or value-date window for reconciliation reports.\n\nUsed by the admin's invoice / accounts-receivable tab, by ERP /\naccounting export jobs, and by 'where's my money?' reports comparing\nexpected and received payments. For card / mobile-wallet payments\nuse ordersNets / ordersVivawallet instead.",
            "args": [
              {
                "name": "ordersId",
                "description": "Restrict to settlements for one order id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "invoiceDateFrom",
                "description": "Lower bound for invoicePaymentDate (inclusive). ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "invoiceDateTo",
                "description": "Upper bound for invoicePaymentDate (inclusive). ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "valueDateFrom",
                "description": "Lower bound for invoicePaymentValueDate (inclusive). ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "valueDateTo",
                "description": "Upper bound for invoicePaymentValueDate (inclusive). ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of settlements to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "BankPayment",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ordersVivawallet",
            "description": "Look up Vivawallet payment records, by order, by transaction UUID,\nor by Vivawallet's orderCode. Use this for reconciliation against\nVivawallet's merchant reports, for chargeback investigations\n(filter by transactionUuid), or to render the payment-trail block\non an admin order detail.\n\nFor all order-attached payments at once, prefer Order.vivawalletPayments\nwhen you're already fetching the order. For Nets-provider\nnotifications see ordersNets / OrderNetsNotification (separate\ntable with a different shape).",
            "args": [
              {
                "name": "orderId",
                "description": "Filter to records for this single order.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "transactionUuid",
                "description": "Filter to a specific Vivawallet transaction UUID (chargeback / refund lookup).",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "orderCode",
                "description": "Filter to Vivawallet's orderCode for the payment session.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum rows to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Number of rows to skip for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderVivawalletPayment",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressFormats",
            "description": "List address-format templates, optionally filtered by id. Pass ids to\nlook up specific formats (e.g. the ones referenced by the visible\ncountries); omit ids to enumerate every format the tenant has defined.\n\nUsed by the address renderer when generating shipping labels, invoice\naddresses, and admin display strings — paired with each Country's\naddressFormatId to pick the right template per destination. For the\nraw address data see addressBookEntries / billingAddresses; this\nsurface only carries the templates.",
            "args": [
              {
                "name": "ids",
                "description": "Restrict to specific format ids. Omit to return every format.",
                "type": {
                  "kind": "LIST",
                  "name": null,
                  "ofType": {
                    "kind": "NON_NULL",
                    "name": null,
                    "ofType": {
                      "kind": "SCALAR",
                      "name": "ID",
                      "ofType": null
                    }
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of formats to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "AddressFormat",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "actionRecorderEntries",
            "description": "Page through the audit log, newest first. All filters are optional and\nAND-composable: pass module to scope to one event source, userId to\nfollow one principal, and success to bracket only the failures (handy\nfor brute-force detection on login modules).\n\nUsed by the admin's security dashboard, by compliance export jobs, and\nby oncall when investigating an incident. The entries are append-only —\nthere's no way to amend or delete a row through this surface.",
            "args": [
              {
                "name": "module",
                "description": "Restrict to entries from one module (see ActionRecorderEntry.module for example values).",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "userId",
                "description": "Restrict to entries about one user id.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "success",
                "description": "Restrict to successful (true) or failed (false) entries. Omit to include all outcomes (including null-status informational rows).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return on this page. Defaults to 25 in the resolver.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ActionRecorderPage",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersPrices",
            "description": null,
            "args": [
              {
                "name": "customerId",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "productId",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "validOn",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "CustomerPrice",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerPrice",
            "description": null,
            "args": [
              {
                "name": "customerId",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "productId",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "validOn",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "CustomerPrice",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productVolumeAddonPrices",
            "description": "List the per-product step-pricing tiers for one product, ordered by\nminimum quantity. Used by the storefront's quantity input to show the\nnext price break, by the basket to apply the active tier, and by the\nquoting flow to compute line totals at the right unit price.\n\nFor percentage-based discounts gated on customer group / type, see\nproductVolumeDiscounts. For the price-change audit trail, see\nproductPriceHistory.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch step-pricing tiers for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductVolumeAddonPriceTier",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productVolumeDiscounts",
            "description": "List the group-based volume-discount tiers for one product, in threshold\norder. Used to render wholesale price ladders on B2B product pages, to\napply contract pricing at checkout, and to expose tier eligibility in the\nadmin pricing tab.\n\nFor per-product step pricing (replace-the-unit-price ladders), see\nproductVolumeAddonPrices. For the price-change audit trail, see\nproductPriceHistory.",
            "args": [
              {
                "name": "productId",
                "description": "Product to fetch volume-discount tiers for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductVolumeDiscountTier",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersBraintreeTokens",
            "description": "List the saved Braintree cards for one customer. Used by the\nstorefront's checkout to render the saved-cards picker, by the\ncustomer-account 'Payment methods' page to show / remove cards,\nand by the admin to audit which cards a customer has on file.\n\nThe token returned here is intended for server-side charging —\npass it to Braintree's transaction.sale call. The masked number\nand card type are cached locally for display purposes only.",
            "args": [
              {
                "name": "customersId",
                "description": "Customer to fetch saved cards for.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "Int",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "cardType",
                "description": "Restrict to one card brand (e.g. 'Visa'). Omit for all brands.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of saved cards to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "CustomersBraintreeToken",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersBlacklist",
            "description": "List blacklist entries, newest first. All filters are optional and\nAND-composable: pass customerId to fetch one customer's full\nhistory, status to scope to active blocks vs. lifted ones, or\nomit both to walk the tenant's full blacklist for a moderation\nreview.\n\nUsed by the admin's customer detail view to render the block\nbadge + history, by checkout middleware that reads the latest\nstatus to decide whether to short-circuit the order, and by\nfraud-investigation reports. For per-method bans see\nCustomer.blockPayments / blockShipments; for product-allowlist\nflows see customersProductsInclusions.",
            "args": [
              {
                "name": "customerId",
                "description": "Restrict to one customer's blacklist history.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "status",
                "description": "Restrict to entries with this status code (e.g. 1 = active block).",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of entries to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "CustomerBlacklistEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "String",
        "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "Int",
        "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "ID",
        "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "Boolean",
        "description": "The `Boolean` scalar type represents `true` or `false`.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Mutation",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "_empty",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createCustomer",
            "description": "Create a registered customer account with a password. Email address\nmust be unique across registered customers in the tenant — the\nresolver throws when the email collides with an existing registered\naccount. Password is bcrypt-hashed before storage. Returns the\ncreated Customer including its assigned id.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateCustomerInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Customer",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createGuestCustomer",
            "description": "Create a guest customer for one-time checkout, without a password.\nThe resolver sets temporary_customer to the current Unix timestamp\nso admin tooling can later sweep stale guest rows. Guest customers\nmay share email addresses with each other and with registered\ncustomers. Returns the created Customer including its assigned id.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateGuestCustomerInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Customer",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createOrder",
            "description": "Create an order with line items, addresses, and chosen payment +\nshipping methods. The resolver validates paymentCode against the\ntenant's MODULE_PAYMENT_INSTALLED configuration and shippingCode\nagainst MODULE_SHIPPING_INSTALLED — both are required and free-form\nor removed-module values are rejected loud (with the error message\nlisting what's available).\n\nStatus defaults to 1 (Received) unless explicitly set. The\ncustomer-side party snapshot is captured on the order so later\nedits to the customer's profile or saved addresses don't\nretroactively change the order. To record subsequent status\ntransitions with tracking metadata use updateOrderStatus; to add /\nedit / remove line items after creation use addOrdersProduct /\nupdateOrdersProduct / removeOrdersProduct.",
            "args": [
              {
                "name": "input",
                "description": "The order to create — placing customer, delivery / billing parties, payment + shipping methods, and line items.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateOrderInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Order",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateOrderStatus",
            "description": "Update an existing order's current status and, in the same transaction,\noptionally write carrier tracking metadata. Use this when an ERP, WMS,\ncarrier integration, or operator action advances fulfilment after the\norder already exists. The mutation validates the order and tenant-local\nstatus id, updates orders.orders_status and last_modified, writes\ntrackingCode / trackingLink only when those fields are provided, appends\nan orders_status_history row, and records changed header fields in\norders_history for audit visibility.",
            "args": [
              {
                "name": "input",
                "description": "Order status and optional tracking update to apply.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "UpdateOrderStatusInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Order",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addOrdersStatusHistory",
            "description": "Record a new status-history entry on an order. Use this low-level\nmutation when a caller needs to append to orders_status_history\ndirectly. For the normal fulfilment workflow that updates the\ncurrent order status and optional tracking fields in one operation,\nprefer updateOrderStatus.\n\nTwo side-effect flags:\n- notifyCustomer: when true, stores customer_notified = 1 on the\n  history row. The caller must send any actual email separately.\n- updateOrderStatus: when true, also writes the new statusId to\n  orders.orders_status so it becomes the order's current status.\n  The default is false, so omitted calls are history-only.\n\nThe inserted row is surfaced through the orderStatusHistory read\nquery. Use updateOrderStatus when the caller also needs header-field\naudit entries in ordersHistory.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "OrdersStatusHistoryInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrdersStatusHistoryEntry",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createQuote",
            "description": "Create a quote (B2B request-for-pricing) with one or more line\nitems. Captures the requester (customer id or anonymous session\nid), the requested shipping method, the preferred warehouse, and\nthe line set. The resolver writes the quote header and its\nQuoteProduct lines in a single transaction.\n\nUsed by the storefront's quote-request form, by the admin's\n'Create quote on customer's behalf' flow, and by integrations\nthat ingest quote requests from external systems. To attach files\n(briefs, drawings) afterwards see addQuoteFile; to record status\ntransitions see addQuoteStatusHistory.",
            "args": [
              {
                "name": "input",
                "description": "The quote to create — header fields plus line items.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateQuoteInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Quote",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addQuoteStatusHistory",
            "description": "Record a new status transition on a quote. Persists the row to\nquotes_status_history and, when updateNotifications is set, also\nflips the parent quote's reminder / follow-up flags so the\nauto-reminder system picks up the new state. Returns the\npersisted timeline entry, including the assigned id and\ntimestamp.\n\nUse this for the admin quote editor's status-change dropdown,\nfor automated workflow steps that move quotes through approval,\nand for the quote-to-order conversion flow that closes the\nquote out by moving it to 'Ordered'. To read the timeline see\nquoteStatusHistory.",
            "args": [
              {
                "name": "input",
                "description": "The status transition to record.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "AddQuoteStatusHistoryInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "updateNotifications",
                "description": "Optional reminder / follow-up flag updates applied to the parent Quote in the same call.",
                "type": {
                  "kind": "INPUT_OBJECT",
                  "name": "QuoteNotificationFlagsInput",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "QuoteStatusEntry",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addQuoteFile",
            "description": "Record a new attachment on a quote. The file is expected to\nalready be uploaded to the tenant's quote-files directory; this\nmutation persists the filename in quote_files so it shows up in\nthe quote's attachment list. Returns the persisted QuoteFile\nincluding its assigned id.",
            "args": [
              {
                "name": "quoteId",
                "description": "Quote id to attach the file to.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "file",
                "description": "Filename of the already-uploaded attachment.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "String",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "QuoteFile",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createOrUpdateSharedBasket",
            "description": "Upsert a line in a shared basket. Used to add a product to a\ncollaborative basket (sales rep building a draft for a customer,\nteam-mates co-editing a wholesale list) or to overwrite an\nexisting line's full contents in one call. For narrow updates\non quantity only, see updateSharedBasketQuantity.",
            "args": [
              {
                "name": "input",
                "description": "Line content to upsert.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateSharedBasketInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "SharedBasketItem",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateSharedBasketQuantity",
            "description": "Change the quantity on an existing shared-basket line. The\nstorefront's quantity stepper calls this on every increment /\ndecrement, so it's the hot-path mutation for shared-basket\nedits. Throws when the line is past expiresAt unless\nrequireActive=false.",
            "args": [
              {
                "name": "input",
                "description": "Quantity update for one (sharedCartId, itemId) line.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "UpdateSharedBasketQuantityInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "SharedBasketItem",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "expireSharedBasketItem",
            "description": "Expire a shared-basket line — rewrite the expiresAt timestamp\nso subsequent requireActive=true reads start refusing. Used by\nadmin 'Force expire' actions and by the periodic stale-basket\nsweeper.",
            "args": [
              {
                "name": "input",
                "description": "Expiry update for one (sharedCartId, itemId) line.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "ExpireSharedBasketInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "SharedBasketItem",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "attachDiscountCouponToCustomer",
            "description": "Issue a coupon to a specific customer. Verifies the coupon and the\ncustomer both exist, then writes a discount_coupons_to_customers\nrow (idempotent — repeated calls don't create duplicates). Used by\nadmin tools that hand out named-account / VIP coupons, by loyalty\nrule engines that earn coupons for specific customers, and by\nonboarding flows that issue welcome coupons.\n\nOnce attached, the coupon's customers[] list (visible via the\ndiscountCoupon query) includes this customer, and the customer\nbecomes eligible to redeem the coupon at checkout.",
            "args": [
              {
                "name": "input",
                "description": "The (couponCode, customerId) pair to attach.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "DiscountCouponCustomerLinkInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "DiscountCouponCustomerLink",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "removeDiscountCouponFromCustomer",
            "description": "Detach a coupon from a customer. Returns true on success, false\nwhen no link row matched. Used to revoke a previously-issued\nprivate coupon, e.g. when the recipient no longer qualifies for\nthe offer or the coupon was attached in error.",
            "args": [
              {
                "name": "input",
                "description": "The (couponCode, customerId) pair to detach.",
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "DiscountCouponCustomerLinkInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addOrdersProductsVariant",
            "description": "Attach a new variant selection to an existing order line. Use this\nafter addOrdersProduct (or on an existing line) to record a\nsize/colour/personalisation choice that affects the line's total\nvia pricePrefix. Returns the inserted OrdersProductsVariant.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "AddOrdersProductsVariantInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrdersProductsVariant",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateOrdersProductsVariant",
            "description": "Partially update an existing variant selection. Only the fields in\nthe input payload are written. Useful for correcting an option name\nor price delta after the order was placed without removing and\nre-adding the variant. Returns the updated OrdersProductsVariant.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "UpdateOrdersProductsVariantInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrdersProductsVariant",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "removeOrdersProductsVariant",
            "description": "Delete a variant selection from an order line. Returns true on\nsuccess, false when no row matched. Hard delete — does not change\nthe parent line's price; recompute the line price separately if\nneeded.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addOrdersProduct",
            "description": "Add a new line to an existing order. Use this from the admin panel\nor an ERP integration to extend an order after it has been placed —\ne.g. to add an upsold accessory, an apology gift, or a manual\ncorrection line. Returns the inserted OrdersProduct including its\nassigned id.\n\nTo attach configurable-option selections to the new line, follow\nup with addOrdersProductsVariant once you have the returned id.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "AddOrdersProductInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrdersProduct",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateOrdersProduct",
            "description": "Partially update an existing order line. Only the fields included\nin the input payload are written; omitted fields are left as-is.\nReturns the updated OrdersProduct.\n\nFor variant selections on the line, use updateOrdersProductsVariant\ninstead — they live on a separate table.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "UpdateOrdersProductInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "OrdersProduct",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "removeOrdersProduct",
            "description": "Delete an order line. Returns true on success, false when no row\nmatched the given id. Variants attached to the line are deleted by\ncascade. This is a hard delete — for refunds prefer adding a\n'refund' line via addOrdersProduct, which preserves the audit\ntrail.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "upsertOrdersNetsNotification",
            "description": "Idempotently record a Nets payment notification. Inserts a new\norders_nets row on first call; on a duplicate ordersPaytrailId it\nupdates the row with the latest webhook payload (newer\nnotificationId, transactionId, stamp, reference, amount, error).\n\nUse this from the Nets webhook handler so retries and out-of-order\ndeliveries from Nets's side don't create duplicate rows. Returns\nthe persisted OrderNetsNotification, or null on a no-op.\n\nFor Vivawallet, see ordersVivawallet (separate table with a\ndifferent shape).",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "OrdersNetsNotificationInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "OrderNetsNotification",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "grantCustomerProductAccess",
            "description": "Add a product to a customer's private allowlist. When this is the\ncustomer's first inclusion row, the catalog flips to private mode for\nthem — they immediately stop seeing all non-listed products. Used when\nonboarding a B2B account onto a contract assortment.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CustomerProductInclusionInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomerProductInclusion",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "revokeCustomerProductAccess",
            "description": "Remove one product from a customer's private allowlist. When this leaves\nthe customer with zero inclusion rows, the catalog flips back to public\nmode for them and they regain visibility into the standard catalog.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CustomerProductInclusionInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createProductCustomOption",
            "description": "Attach a ProductOption to a product as a custom (per-product) override,\nwith its own required-flag, display position, and input type. Used by the\nadmin product editor when a tenant wants this option to render differently\non this specific product than its global default.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "CreateProductCustomOptionInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "ProductCustomOption",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateProductCustomOption",
            "description": "Update an existing per-product option override — typically to change the\nrequired flag, reorder, or switch the input rendering between radio /\nselect / checkbox / etc.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "UpdateProductCustomOptionInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "ProductCustomOption",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "removeProductCustomOption",
            "description": "Detach a custom option from a product. The underlying ProductOption is\nuntouched; only this product's override is removed.",
            "args": [
              {
                "name": "id",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "SCALAR",
                    "name": "ID",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createFavorite",
            "description": "Add a product to a customer's wishlist. Inserts a new row in\ncustomers_favorites; the same (customer, product) pair can appear\nonly once per the table's uniqueness constraint, so attempting to\nre-add an existing favorite errors at the DB layer.\n\nUsed by the storefront's 'heart' / 'save for later' button on\nproduct cards and product detail pages.",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "AddCustomerFavoriteInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "OBJECT",
              "name": "CustomerFavorite",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deleteFavorite",
            "description": "Remove favorites matching the input filter. The filter must\ninclude at least one of id / customersId / productsId — the\nresolver throws when none are provided. Returns true when at\nleast one row was deleted, false when nothing matched.\n\nUsed by the storefront's 'unsave' button (id or\ncustomersId+productsId), by 'clear wishlist' actions\n(customersId only), and by admin tooling that retires a product\nand wants to clean up everyone's favorites of it (productsId\nonly).",
            "args": [
              {
                "name": "input",
                "description": null,
                "type": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "RemoveCustomerFavoriteInput",
                    "ofType": null
                  }
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateCustomerInput",
        "description": "Input for createCustomer — registers a new customer with a password.\nFields not marked required can be omitted; the storefront / admin\ncapture the rest at checkout or via the address book later.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "gender",
            "description": "Salutation / gender code (e.g. 'm', 'f'). Optional.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "First name.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Last name.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailAddress",
            "description": "Email address. Must be unique across registered (non-temporary) customers in the tenant.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "password",
            "description": "Plaintext password — the resolver bcrypts it before storing. Capped at 128 characters.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "telephone",
            "description": "Telephone number.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "newsletter",
            "description": "Newsletter opt-in flag. true subscribes the customer to the newsletter list.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name. Set for B2B accounts.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address line for the initial address-book entry.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": "VAT / business id. Captured for B2B accounts.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code for the initial address-book entry.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City for the initial address-book entry.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region for the initial address-book entry.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id (resolves against the countries query).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryCode",
            "description": "Two- or three-letter country code, alternative to countryId. The resolver maps it through countries; if countryId is also provided they must match.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": "Zone id within the country.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form delivery instructions captured at registration.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateGuestCustomerInput",
        "description": "Input for createGuestCustomer — provisions a guest account for one-time\ncheckout. No password is required (the platform generates a random one\ninternally so the row can still satisfy the auth schema). Guest emails\nare not unique across the tenant — multiple guest checkouts can share\nthe same email, and a guest email can also coexist with a registered\ncustomer using the same address.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "gender",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailAddress",
            "description": "Email address. Not enforced unique for guests.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "telephone",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "newsletter",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id (resolves against the countries query).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryCode",
            "description": "Two- or three-letter country code, alternative to countryId. The resolver maps it through countries; if countryId is also provided they must match.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": null,
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Address",
        "description": "An address-book entry for a customer, returned through Customer.addresses.\nHolds the shipping fields in the entry_* columns with optional alternate\nbilling fields in the billing_* columns of the same row — same shape as\nthe standalone addressBookEntries query, just hydrated as part of the\ncustomer record. For the dedicated query see addressBookEntries; for\nbilling-only address books see billingAddresses.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the address-book entry (address_book_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "gender",
            "description": "Salutation / gender code on the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name on the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "Recipient first name on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Recipient last name on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": "VAT id on the shipping side. Captured for B2B shipping documents.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postcode on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region on the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id on the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": "Zone id on the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Delivery instructions captured at address creation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingStreetAddress",
            "description": "Alternate billing-side street address. Null means billing uses the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingFirstname",
            "description": "Alternate billing first name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingLastname",
            "description": "Alternate billing last name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingPostcode",
            "description": "Alternate billing postcode.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCity",
            "description": "Alternate billing city.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCountryId",
            "description": "Alternate billing country id (string-typed on this surface, vs. shipping's int).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCompany",
            "description": "Alternate billing company name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingVatid",
            "description": "Alternate billing VAT id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingZoneId",
            "description": "Alternate billing zone id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingState",
            "description": "Alternate billing state / region.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingOperatorId",
            "description": "E-invoice operator id (Finnish Verkkolasku operator). Used for routing electronic invoices through an operator.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingInvoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI). Paired with billingOperatorId for e-invoice delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReference",
            "description": "Free-form reference / PO number printed on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReferenceRequired",
            "description": "Whether the storefront enforces a non-empty reference at checkout for this address.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Customer",
        "description": "A customer of the tenant — registered shopper, B2B account, or guest\none-time-checkout record. The same row holds individual and B2B\ncustomers (distinguished via the type field), and guest checkouts\nreuse the table with temporaryCustomer set so the storefront can\nlater upgrade them to registered accounts.\n\nCarries identity (email, name, telephone), behaviour flags\n(newsletter, freeShipping threshold, payment / shipping blocks),\npointers to the customer's saved addresses (addresses field, default\nids), the activity-stats sidecar (info field), and ERP-facing ids\n(apiId, apiBillingId). For login / failure counters see CustomerInfo;\nfor per-customer pricing see customerPrice / customersPrices; for\ngroup-based pricing see customerGroups.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the customer.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "gender",
            "description": "Salutation / gender code (e.g. 'm', 'f'). Free-form, tenant-defined.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "First name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Last name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailAddress",
            "description": "Login email. Unique across registered customers in the tenant; guest customers (temporaryCustomer = true) may share email addresses with each other and with registered accounts.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "defaultAddressId",
            "description": "Pointer to the customer's default address-book entry — the address the storefront pre-selects at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "defaultDeliveryAddressId",
            "description": "Pointer to the address-book entry used as the default delivery destination. May differ from defaultAddressId when the customer ships to a different address than they bill to.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "telephone",
            "description": "Telephone number.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "newsletter",
            "description": "Newsletter subscription state. true = opted in.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "freeShipping",
            "description": "Free-shipping order-value threshold. Orders over this value (in the tenant's default currency) ship free; 0 = no per-customer override (the global rule applies). Per-customer free shipping; not a percentage discount.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "admin",
            "description": "Whether this customer record is also an admin user. Stored as int — 0 = regular customer, non-zero = admin (mostly legacy / ERP-staff records).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": "Customer category. Example values:\n- 0: temporary / anonymized customer (system-managed; placeholder for guest checkouts and soft-deleted records)\n- 1: registered individual customer (default for normal end-user accounts)\n- 2: business / B2B customer (typically has VAT id and company populated)",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "group",
            "description": "Customer-group memberships. Stored as a JSON-encoded array of group_id\nstrings (e.g. '[\"1\",\"5\"]'). Empty array means the customer is in no\ngroups. Group definitions live in the customer_groups table — resolve\nhuman-readable descriptions, discount type, and customer-type / B2B\ngating via the customerGroups query. The customerPrice resolver\nconsults this list when choosing the lowest applicable group price\nfor a product.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "approved",
            "description": "true once the customer has confirmed their email and the account is enabled for purchasing. Used for double-opt-in and B2B account moderation flows.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "undeliveredOrders",
            "description": "Counter of orders that failed delivery (returned to sender, undeliverable address, etc.). Useful as a fraud / address-quality signal.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "blockPayments",
            "description": "Comma-separated list of payment-module ids the customer is barred from using at checkout (e.g. 'invoice,banktransfer'). Empty / null means no restrictions. Set by admins on accounts with payment risk.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "blockShipments",
            "description": "Comma-separated list of shipping-module ids the customer is barred from using at checkout. Empty / null means no restrictions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "temporaryCustomer",
            "description": "true when this row is a guest-checkout / placeholder record rather than a registered account. The underlying column stores a Unix timestamp of when the guest record was created (so admin tooling can sweep stale guests); this field is the truthy/falsy projection of that timestamp.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailSent",
            "description": "Whether the welcome / confirmation email has been dispatched to the customer.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiId",
            "description": "External (ERP / PIM) identifier for the customer record, captured when the customer is mirrored from a third-party system.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiBillingId",
            "description": "External identifier for the customer's billing entity in the ERP. Distinct from apiId — large customers can have one billing record covering multiple shipping accounts.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "grantWhatsapp",
            "description": "Whether the customer has consented to receive WhatsApp notifications (order updates, abandoned-cart reminders).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingOperatorId",
            "description": "E-invoice operator id captured on the customer record itself (a customer-level default that propagates onto billing addresses).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingInvoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI) captured on the customer record itself.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReference",
            "description": "Customer-level invoice reference / PO number default.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReferenceRequired",
            "description": "Whether the customer's invoices require a non-empty reference at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "info",
            "description": "Activity-stats sidecar (last login, login counters, account creation date, etc.). Backed by the customers_info table — see CustomerInfo for field-level docs.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "CustomerInfo",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addresses",
            "description": "Address-book entries for this customer, hydrated alongside the customer record. For an independent paginated view see addressBookEntries.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Address",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "Float",
        "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerInfo",
        "description": "Per-customer login and lifecycle counters tracked outside the main\ncustomers row. The customers_info table holds slow-changing meta about\na customer account — when they last logged in, how many times, how\nmany failed attempts, when the account was created and last edited,\nplus optional marketing-source attribution and notification preferences.\n\nUsed by the admin's customer detail view to surface 'Last login' and\n'Account age' badges, by security tooling that watches failed-login\ncounters, and by any onboarding / re-engagement automation that needs\nto know how stale an account is. For a customer's full profile +\naddresses see the customer query; this surface is the activity-stats\nside car.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "dateOfLastLogon",
            "description": "Timestamp of the customer's most recent successful login. Null for accounts that have never logged in (e.g. admin-created records).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "numberOfLogons",
            "description": "Total successful logins by this customer over the lifetime of the account.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "numberOfFailedLogins",
            "description": "Total failed-login attempts since the last successful login. Used by anti-brute-force tooling — typically reset on successful auth.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateOfLastLoginFail",
            "description": "Timestamp of the most recent failed-login attempt for this account. Null when no failed attempts have been recorded.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAccountCreated",
            "description": "Timestamp the account was created.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAccountLastModified",
            "description": "Timestamp the account was last edited (profile update, password change, address change).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sourceId",
            "description": "Marketing-source attribution id captured at registration — referrer / campaign id when the tenant runs source tracking. Null when the tenant doesn't track sources or the source was unknown.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "globalProductNotifications",
            "description": "Whether the customer has opted in to global product notifications (back-in-stock alerts, restock notices, etc.). Stored as int (1=on, 0=off).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Product",
        "description": "A product available for sale in the catalog. This type is intentionally\nthin — it carries the headline fields used to render product cards and\nthe basic detail header (id, name, model, image, price, descriptions,\nmaterial). Richer product surfaces hang off other queries:\n\n- Configurable options + values: productAttributes\n- Variant-level stock + per-variant pricing: productStock\n- Per-warehouse stock split: warehouseStock\n- Price history: productPriceHistory\n- Group-based price overrides: customerGroupPriceList\n- Per-customer pricing: customerPrice\n- Volume / step pricing: productVolumeAddonPrices, productVolumeDiscounts\n- Image gallery (variant-aware): productExtraImages\n- PDFs / CAD / lighting profiles / non-image media: productsMedia\n- Category memberships: productsToCategories\n- Per-product custom-option overrides: productsCustomOptions\n\nThe Product.description and shortDescription fields come from a\nper-language products_description row picked by the languageId\nargument on the product query. The products listing query returns\nrows in the tenant's primary language only.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the product (products_id). Used as the productId in every related product surface listed above.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Display name shown to shoppers — falls back to the product model when the localized name is empty.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "model",
            "description": "Manufacturer / vendor SKU or model identifier. Stable across languages and used as the join key into ERP / PIM systems.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the main product image, served from the tenant's product-image directory. For the variant-aware image gallery use productExtraImages; for non-image media use productsMedia.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Catalog base price in the tenant's default currency, exclusive of VAT. Per-customer / per-group / volume-tier prices may override this at checkout — see customerPrice / customerGroupPriceList / productVolumeAddonPrices.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Long-form HTML description rendered on the product detail page. Comes from products_description for the requested languageId.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shortDescription",
            "description": "Plain-text short-description used in product cards, listings, and meta descriptions. Comes from products_description for the requested languageId.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "material",
            "description": "Material / composition string (e.g. 'cotton 80%, polyester 20%'). Comes from products_description for the requested languageId; null when the tenant doesn't capture material per product.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductExtraImage",
        "description": "An additional image attached to a product, beyond the main image stored\non the Product type. Used to render the gallery / carousel on product\ndetail pages: alternate angles, in-use shots, packaging, lifestyle\nphotography.\n\nOptionally variant-specific via optionId — e.g. a colour variant can\nhave its own gallery, so the storefront swaps images when the shopper\npicks a different colour. For non-image attachments (PDFs, CAD files,\nvideos) see productsMedia, which is a broader media-attachment surface\nwith an explicit type and category.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the extra-image entry (products_extra_image_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Free-form code captured at upload time, used by tenants for sorting / matching against ERP image references. Null when the tenant doesn't use codes.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Filename or relative URL of the image, served from the tenant's product-image directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sort",
            "description": "Display sort order within the product's gallery. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionId",
            "description": "Variant option-value id this image is tied to (matches a row in products_options_values). When set, the storefront shows this image only when the shopper has that variant selected. 0 = applies to all variants.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Localized caption / alt text for the image.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductMediaCategory",
        "description": "A grouping label for product media files — for example 'manuals',\n'datasheets', 'IES', 'PDF'. Tenants define their own categories;\nthere's no global enum. Categories show up as section headers when\nthe storefront renders the product attachments block.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the category.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Tenant-defined free-form code (e.g. 'manuals', 'IES', 'responsibility'). Used internally for grouping and ERP matching.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order of the category itself within the product's media block.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized human-readable category name shown to shoppers.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductMedia",
        "description": "A media attachment on a product — PDF datasheets, CAD files, lighting\nprofiles, additional documents, video links, anything beyond the main\nimage and gallery. Each file has a type indicating its format and an\noptional category for storefront grouping.\n\nFor image-specific gallery shots tied to product detail pages or\nvariants, prefer productExtraImages — it has variant-awareness via\noptionId. ProductMedia is the broader catch-all surface used by the\nstorefront's \"Documents & downloads\" section and by the Akeneo /\nPIM sync pipelines (see ProductMediaSyncer.php).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the media entry (products_media_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product this media belongs to.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "ID",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categoryId",
            "description": "Id of the parent ProductMediaCategory, or null for uncategorised media.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "file",
            "description": "Filename of the attachment, served from the tenant's product-media directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order within the parent category.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": "File-type label. Production has both CamelCase and lowercase variants\n(historical drift). Example values seen across tenants:\n- 'PDF' / 'pdf' — datasheets, manuals\n- 'JPG' / 'JPEG' / 'jpeg' / 'PNG' / 'GIF' / 'WEBP' / 'AVIF' / 'SVG' — images\n- 'IES' — lighting profiles (photometric data)\n- 'DOC' / 'DOCX' / 'XLS' / 'XLSX' / 'TXT' — office documents\n- 'DWG' / 'DXF' / 'DWF' — CAD files\n- 'LESS' — stylesheet partial\n\nThe full whitelist (with file-extension prefixes) lives in\nProductMediaSyncer.php in aicc-mvc.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "size",
            "description": "Human-readable size label (e.g. '2.4 MB'). Pre-formatted at upload time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Localized description / caption shown alongside the file in the storefront.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "category",
            "description": "Resolved parent category, included when includeCategory=true on the query.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "ProductMediaCategory",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Country",
        "description": "A country supported by the tenant for shipping or billing addresses.\nCountries are the top-level reference data behind every address picker\non the storefront and admin: registration forms, checkout shipping /\nbilling destinations, the customer's address book, and the admin order\nbuilder all read from this surface.\n\nEach country carries the format-template id used to render its\naddresses (Country.addressFormatId resolves against addressFormats),\nthe default currency a shopper from that country sees on first visit,\nand optional duty fields used for cross-border tax / customs calculation.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the country.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized country name shown in country dropdowns (e.g. 'Finland', 'United States').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "iso2",
            "description": "Two-letter ISO 3166-1 alpha-2 country code (e.g. 'FI', 'US'). Used for storefront locale resolution and most external integrations.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "iso3",
            "description": "Three-letter ISO 3166-1 alpha-3 country code (e.g. 'FIN', 'USA'). Used by some shipping carriers and tax services.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dutyRate",
            "description": "Default customs-duty rate applied to imports into this country, as a percentage. Used by the cross-border price calculator; informational on countries the tenant doesn't ship to.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dutyLimit",
            "description": "De minimis threshold — order value below which no duty applies, in the tenant's default currency. Null when not configured.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressFormatId",
            "description": "Id of the AddressFormat used to render addresses in this country (street order, postcode placement, state line, etc.). Resolves against the addressFormats query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "defaultCurrencyId",
            "description": "Id of the default Currency a shopper from this country sees on first visit, before they explicitly switch. Resolves against the currencies query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ConfigurationGroup",
        "description": "A logical grouping of configuration settings shown as a section in the\nadmin's configuration UI (e.g. 'Email Options', 'Tax Options', 'Stock\nSettings', 'Module — Payment'). Groups exist purely to organize the\nadmin-side rendering of the underlying key/value Configuration rows —\nthe storefront and backend code read individual settings by key, not\nby group.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the group (configuration_group_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Display title shown as the section header in the admin configuration UI (e.g. 'Email Options').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Helper text shown below the section title in the admin UI.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display order of the group within the admin configuration UI. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "configurations",
            "description": "Settings that belong to this group, populated when the parent group is fetched via configurationGroupsWithSettings. The configurations field is empty when the group is reached through configurationGroups (which doesn't eagerly hydrate its children).",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "Configuration",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Configuration",
        "description": "One configuration setting — a key/value pair that controls platform\nbehaviour. Each row has a stable string key (e.g. 'STORE_NAME',\n'MODULE_PAYMENT_NETS_INSTALLED') that the storefront and backend code\nread at runtime, plus a free-form value, an admin-side display title,\nand a helper description.\n\nuseFunction and setFunction are PHP function names invoked by the admin\nUI to render the value (e.g. format a checkbox vs a free text input)\nand to validate / transform input on save. Settings that don't need\ncustom rendering leave both null.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the setting (configuration_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Display title shown next to the input in the admin configuration UI.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "key",
            "description": "Stable lookup key the storefront and backend read at runtime (e.g. 'STORE_NAME', 'MAX_DISPLAY_BESTSELLERS', 'MODULE_PAYMENT_NETS_INSTALLED').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "value",
            "description": "Current value, stored as a free-form string. The storefront / backend casts it to the expected type at read time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Helper text shown below the input in the admin configuration UI.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "groupId",
            "description": "Id of the parent ConfigurationGroup (configuration_group_id).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display order of the setting within its group. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastModified",
            "description": "Timestamp of the most recent edit. Useful for change-tracking dashboards.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the setting was first inserted.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "useFunction",
            "description": "PHP function name the admin UI calls to render the input control (e.g. for checkbox vs textarea vs select). Null when the setting uses the default text input.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "setFunction",
            "description": "PHP function name the admin UI calls to validate / transform input on save. Null when no transformation is needed.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "group",
            "description": "Resolved parent group, populated when the configurations query is filtered by groupId.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "ConfigurationGroup",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "AdminNotification",
        "description": "An admin-facing error notification. The platform writes a row whenever a\nbackground job, integration sync, or critical pipeline raises an error\nworth surfacing to operators (failed ERP sync, payment-gateway timeout,\ncron job exception, etc.). The admin dashboard renders the un-cleared\nrows in an inbox so on-duty operators can investigate and dismiss them\nonce handled.\n\nemailErrorSent records whether the platform also dispatched the\nnotification email; errorCleared records whether an operator has\nacknowledged it. The two flags can move independently — an entry may\nbe emailed but never cleared, cleared without emailing, etc.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the notification (notification_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "errorText",
            "description": "Free-form error description written by the producing module. Typically a one-line summary plus the exception message.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createdAt",
            "description": "Timestamp the notification was raised.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailErrorSent",
            "description": "Whether the platform has dispatched the notification email to operators.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "errorCleared",
            "description": "Whether an operator has acknowledged / dismissed the notification.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "AdminTrackingCreate",
        "description": "An audit row recording that an admin created (or otherwise mutated) a\nproduct. The platform writes one entry per admin-driven product change\nso the admin product editor's history view, the 'created by …' badge on\na product's detail page, and any compliance reporting can attribute the\nchange to a real user.\n\nDistinct from productPriceHistory — this surface tracks the lifecycle\nevents of a product entity (creation, edits, etc.), while\nproductPriceHistory tracks just price changes with their old/new values.\nDistinct from actionRecorderEntries — this surface is product-specific\nand write-tracked at the model layer, while actionRecorder is a\ngeneral-purpose audit log.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the tracking entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product the entry is about.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userId",
            "description": "Id of the admin who performed the action. Null for system-generated entries (e.g. ERP sync writes).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Username of the admin, captured at write time so the row stays readable if the admin is later deleted.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "action",
            "description": "Action performed on the product. Examples seen in production:\n- 'create' — product was created\n- 'update' — product was edited\n- 'delete' — product was deleted\nTenants may extend; treat as free-form code rather than a fixed enum.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the action was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Administrator",
        "description": "An admin user — someone with login access to aicc-admin. Holds the\naccount's identity (username, email), authentication settings (2FA),\nand the RBAC scope that decides which admin pages and modules they can\nopen and whether they're allowed to write or only to read.\n\nsuperadmin trumps the per-module grantAccess list — superadmins see\nevery module regardless. writePermission is checked at the module level\nto gate save / delete actions independently of read access. For\nper-action audit trails of what an admin actually did with these\npermissions, see actionRecorderEntries.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the administrator.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Login username.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "email",
            "description": "Email used for password resets and operator notifications.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "twoFactor",
            "description": "Whether 2FA (TOTP) is enabled. When true and the secret column is set, login requires a 6-digit code from an authenticator app on top of username + password.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "superadmin",
            "description": "Whether the admin is a super-administrator. Superadmins bypass the grantAccess RBAC list and can also manage other admin accounts.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "writePermission",
            "description": "Whether the admin can perform write operations (create / update / delete). When false, the account is read-only across whichever modules they can open.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "grantAccess",
            "description": "RBAC list of admin modules the user can access. Stored as a\nsemicolon-delimited string of module ids. Example value:\n'module_orders;module_customers;module_products' grants access to the\norders, customers, and products admin pages.\n\nIgnored for superadmins (they see every module). The module id list\nis defined by aicc-admin and varies by tenant.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Currency",
        "description": "A currency the storefront supports for display and order placement.\nTenants enable currencies they want shoppers to be able to switch\nbetween (e.g. EUR + SEK + USD), and one currency is configured as the\nprimary in the platform settings — that's the currency used for stock\nprices, order totals stored in DB, and accounting reports.\n\nAll non-primary currencies carry an exchange-rate value that's refreshed\nby a backend job; the storefront multiplies primary-currency prices by\nthis rate at render time when the shopper picks a non-primary currency.\nDisplay formatting (currency symbol, where it sits relative to the\nnumber) lives in symbolLeft / symbolRight.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Display name of the currency (e.g. 'Euro', 'US Dollar'). Used in the storefront's currency switcher.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "ISO 4217 three-letter currency code (e.g. 'EUR', 'USD', 'GBP').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "symbolLeft",
            "description": "Symbol rendered before the amount when formatting prices (e.g. '$' for USD). Empty when the currency uses a right-side symbol.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "symbolRight",
            "description": "Symbol rendered after the amount when formatting prices (e.g. ' €' for EUR in some locales). Empty when the currency uses a left-side symbol.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "value",
            "description": "Exchange rate against the tenant's primary currency. Multiply a primary-currency amount by this value to convert it into this currency at the rate captured at lastUpdated.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastUpdated",
            "description": "Timestamp of the last exchange-rate refresh. The platform's FX-rate sync job updates this when it pulls fresh rates.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderParty",
        "description": "A party on an order — the customer, delivery recipient, or billing\nentity. Captured as a snapshot at the moment of purchase: later edits\nto the customer's saved AddressBook / BillingAddress entries do not\nretroactively change finalised orders. Each Order has three of these\n(customer / deliveryAddress / billingAddress) so the same base shape\ncarries the placing-customer info, where to ship, and where to\ninvoice.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "name",
            "description": "Recipient name (formatted firstname + lastname or the company contact name) at order time.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name on the party. Set for B2B parties; null on personal-shopper deliveries.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatId",
            "description": "VAT / business id on the party. Captured for B2B documents.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address line at order time.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City at order time.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code at order time.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region at order time. Used in countries that need it (US, AU, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "country",
            "description": "Country name (resolved from the country id at order time and snapshotted as a string).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "telephone",
            "description": "Telephone number at order time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailAddress",
            "description": "Email address at order time. May differ from the placing customer's current email if they update their account later.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressFormatId",
            "description": "AddressFormat id at order time — drives the rendering template used for shipping labels and invoice addresses (resolves against the addressFormats query).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "invoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI). Set for parties using e-invoice routing; null for paper / email invoicing.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "operatorId",
            "description": "E-invoice operator id (Finnish Verkkolasku operator). Paired with invoiceAddress for e-invoice delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reference",
            "description": "Free-form invoice reference / PO number captured at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Order",
        "description": "A purchase placed by a customer — the central record in the order\npipeline. Captures everything snapshotted at checkout time: who placed\nthe order (customer / customerId / customerName / customerEmail), where\nit ships and bills (deliveryAddress / billingAddress), the chosen\npayment and shipping methods (paymentMethod / paymentCode /\nshippingMethod / shippingCode + their module-specific fields), the\ncurrent status, the discount applied at the order level, and the\nfulfilment metadata that gets populated as the order moves through\npick-and-pack and dispatch (deliveryQuantity / weight / dimensions,\nshippingLocation*, trackingCode / trackingLink).\n\nTo create an order use createOrder; to update the current status and\nfulfilment tracking fields use updateOrderStatus; to add / edit / remove\nline items use the addOrdersProduct / updateOrdersProduct /\nremoveOrdersProduct mutations. Line items hang off Order.items\n(mirroring the orderItems query); totals breakdown off Order.totals\n(mirroring orderTotals); coupons applied at checkout off\nOrder.discountCoupons; and provider-specific payment notifications\noff Order.bankPayments / vivawalletPayments / netsNotifications\ndepending on the payment module used.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the order (orders_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Id of the placing customer. Null for orders placed by a customer record that's since been deleted.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerName",
            "description": "Display name of the placing customer at order time (typically firstname + lastname). Snapshotted so the order stays readable if the customer record is later renamed.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerEmail",
            "description": "Email of the placing customer at order time. Snapshotted so transactional emails can still be re-sent even if the customer's account email later changes.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customer",
            "description": "Customer-side party snapshot (the placing party). Same shape as deliveryAddress / billingAddress for symmetric rendering.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "OrderParty",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryAddress",
            "description": "Delivery (ship-to) party snapshot at order time. Drives the shipping label.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "OrderParty",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingAddress",
            "description": "Billing (invoice) party snapshot at order time. Drives the invoice header.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "OrderParty",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Numeric status id. Example values across tenants (defaults; tenants extend):\n- 1: Received\n- 2: Packing\n- 3: Shipped\n- 9: Under investigation\n- 10: To be picked up\n- 11: Packed\n- 15: Awaiting payment\n- 16: Cancelled\n- 17: Returned\n- 21: Uncollected\n- 23: Backorder\n\nTenants may extend this set with custom statuses (e.g. payment-provider\nintermediate states, test orders). Always resolve dynamically via the\norderStatuses query rather than hardcoding ids.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "datePurchased",
            "description": "ISO timestamp of when the order was placed.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastModified",
            "description": "ISO timestamp of the most recent edit to the order. Touched by status transitions, line edits, and totals recomputation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currency",
            "description": "ISO 4217 currency code the order was placed in.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currencyValue",
            "description": "Exchange rate (vs the tenant's primary currency) captured at order time. Used to convert the order's foreign-currency totals back into the primary currency for accounting reports.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentMethod",
            "description": "Display label of the chosen payment method as shown to the shopper at checkout (e.g. 'Verkkopankki', 'Postiennakko - 4.90 EUR'). Localized — varies per tenant and language.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentCode",
            "description": "Code identifying the payment module behind the order. Range seen in production includes module names ('NetsBank', 'Cod', 'NetsCreditcard'), Finnish identifiers ('Lasku', 'Nouto'), snake_case keys ('paylane_paypal'), and historical codes from modules since removed ('WalleyInvoice', 'PaylaneCard', 'BraintreeCard'). For new orders it must match the tenant's MODULE_PAYMENT_INSTALLED list; older orders may carry codes that are no longer in the active list. Use this for routing, reconciliation, and reports.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingMethod",
            "description": "Display label of the chosen shipping method as shown to the shopper at checkout (e.g. 'Posti - Noutopiste'). Localized; may include a price suffix.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingCode",
            "description": "Code identifying the shipping module behind the order. Range seen in production includes module-pair forms ('flat_flat', 'matkahuolto_matkahuolto'), bare module names ('Smartpost', 'Flat'), and historical codes. For new orders it must match the tenant's MODULE_SHIPPING_INSTALLED list.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingCost",
            "description": "Shipping cost charged on the order, in the order's currency. May be 0 when the order qualified for free shipping (via Customer.freeShipping threshold, a coupon, or a customer-group rule).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryQuantity",
            "description": "Number of physical packages the order ships in (defaults to 1).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryWeight",
            "description": "Total package weight in kilograms (decimal, 4-digit precision).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryLength",
            "description": "Package length in centimetres.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryWidth",
            "description": "Package width in centimetres.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryHeight",
            "description": "Package height in centimetres.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryComments",
            "description": "Free-form delivery notes captured at checkout (e.g. 'leave at front door', 'call before arrival').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingLocationId",
            "description": "Pickup-point identifier when the chosen shipping method is a parcel locker / pickup-point service. Empty/0 for home delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingLocationName",
            "description": "Display name of the chosen pickup point (e.g. 'R-kioski Kamppi').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingLocationStreetAddress",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingLocationPostcode",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingLocationCity",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentApiId",
            "description": "Internal id passed to the chosen payment module's API for reconciliation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentProvider",
            "description": "Payment provider key. Coarser grouping than paymentCode (e.g. 'nets', 'vivawallet').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentField",
            "description": "Free-form payment field captured at checkout (module-specific extra payload).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentInput",
            "description": "Module-specific payment input payload as captured at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentTermId",
            "description": "Payment-term identifier when the order uses an invoice with terms (e.g. '14 NETTO').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingApiId",
            "description": "Internal id passed to the chosen shipping module's API for label generation and tracking.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingApiTermId",
            "description": "Term identifier within the shipping module (e.g. selected service tier).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingCostCentreId",
            "description": "Cost-centre id used for accounting allocation of shipping costs.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingContractId",
            "description": "Carrier-contract identifier used to negotiate shipping rates.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingContractCourier",
            "description": "Carrier name on the contract (Posti, DHL, Schenker, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseCode",
            "description": "Warehouse code identifying which warehouse the order ships from when the tenant runs multi-warehouse fulfilment. Resolves against the warehouses query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountType",
            "description": "How discountAmount is applied at the order level. Same enum as on\ncoupons and customer groups: 'fixed', 'percent', or 'shipping'.\nDefaults to 'fixed'.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountAmount",
            "description": "Order-level discount value, interpreted according to discountType.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "trackingCode",
            "description": "Carrier tracking code. Populated once the order has been shipped.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "trackingLink",
            "description": "Full tracking URL the customer can click to follow the parcel. May embed the tracking code in the path.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerNotifiedFlag",
            "description": "True (1) once the order-confirmation email has been queued/sent to the customer; 0 means not sent.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "trollyLocker",
            "description": "Trolley-locker workflow flag (warehouse pick-and-pack staging). 0 = not picked, non-zero = picked / staged. DECIMAL(2,1) in the DB.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "transactionId",
            "description": "Payment-provider transaction id (the id the bank/PSP returned). Used for reconciliation against statements.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ipAddress",
            "description": "IP address the order was placed from (used for fraud / risk scoring).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ipIsp",
            "description": "ISP or geo-org of the placing IP (when resolved).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pdfFiles",
            "description": "Newline-separated list of attached PDF filenames (invoice, packing slip, return label, etc.) stored in the tenant's order-document directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "returnReason",
            "description": "Customer-supplied reason text when the order was returned. Null when the order was not returned.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "referralId",
            "description": "Marketing / referral attribution token captured at checkout (UTM tag, click id, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ordersApiId",
            "description": "External ERP / marketplace order id, when this order originated from or was synced to an external system.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiSent",
            "description": "Outbound-API send status: 0 = not yet exported to the ERP, 1 = exported successfully, larger values are tenant-specific intermediate states.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailSent",
            "description": "Order-creation push-status flag: 1 = order-confirmation email has been emitted; 0 = not yet.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiMessage",
            "description": "Last error / status message from the ERP push (null on success).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiMessageDate",
            "description": "ISO timestamp of the apiMessage.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiOrderStatusMessage",
            "description": "Last error / status message from the ERP order-status push.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiOrderStatusMessageDate",
            "description": "ISO timestamp of the apiOrderStatusMessage.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ordersPackingRulesJson",
            "description": "Resolved packing rules (JSON-encoded) applied when the order was picked. Null when no per-order packing rules were attached.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountCoupons",
            "description": "Coupons that were applied to this order at checkout. Empty when no coupon was used. Resolves via the discount_coupons_to_orders join table.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "DiscountCoupon",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "items",
            "description": "All purchased lines on this order, including their selected variants. Equivalent to the orderItems query but resolves in the same round-trip when you're already fetching the Order.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderItem",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "totals",
            "description": "Totals breakdown for this order, optionally filtered to one class. Equivalent to the orderTotals query but resolves in the same round-trip.",
            "args": [
              {
                "name": "class",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderTotal",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bankPayments",
            "description": "Bank-transfer settlements applied to this order. Empty when the order was paid by another method (card, wallet) or hasn't been paid yet.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "BankPayment",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vivawalletPayments",
            "description": "Vivawallet payment records linked to this order. Empty for orders paid via other providers (Nets, Cod, invoice).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderVivawalletPayment",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "OrderPartyInput",
        "description": "Input for one party (customer / delivery / billing) when creating an\norder. Either passed in full to capture a fresh address snapshot, or\nomitted in favour of the deliveryAddressId / billingAddressId\npointers on CreateOrderInput which load the saved AddressBook\nentry.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "name",
            "description": "Recipient name (firstname + lastname or company contact).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name. Set for B2B parties.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatId",
            "description": "VAT / business id.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address line.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id (resolves against the countries query).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryCode",
            "description": "Two-letter country code, alternative to countryId. The resolver normalises this to a country id.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "telephone",
            "description": "Telephone number.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailAddress",
            "description": "Email address.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressFormatId",
            "description": "AddressFormat id used for rendering. Resolves against addressFormats.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "invoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "operatorId",
            "description": "E-invoice operator id (Finnish Verkkolasku operator).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reference",
            "description": "Free-form invoice reference / PO number.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateOrderItemVariantInput",
        "description": "One configurable-option choice on a CreateOrderItemInput line.\nMultiple variants stack on the same line, each contributing a price\ndelta interpreted via pricePrefix. Mirrors the OrderItemVariant read\nshape.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "optionId",
            "description": "Product-option id this choice is for (matches a row in the catalog options table).",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionName",
            "description": "Display label of the option as shown to the shopper (e.g. 'Size').",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionValue",
            "description": "Selected value as shown to the shopper (e.g. 'XL').",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Price delta this choice contributes, interpreted via pricePrefix. Defaults to 0.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": "0",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "How the price delta is applied: '+' (additive, default) or '' (replacement).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"+\"",
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateOrderItemInput",
        "description": "One line on a createOrder call. Most fields mirror the OrderItem\nread shape; the resolver writes the captured snapshot into\norders_products at the moment of order creation, so later catalog\nedits don't change the line.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "productId",
            "description": "Product id from the catalog. Null for free-form / fee / refund lines.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sku",
            "description": "Optional SKU captured at order time.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productModel",
            "description": "Product model number captured at order time.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productEan",
            "description": "EAN / barcode captured at order time.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productName",
            "description": "Display name to write on the receipt and admin order detail.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Unit price actually charged, in the order's currency.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "originalPrice",
            "description": "Catalog price at the time of order, before any per-customer / coupon adjustments. Useful for computing realised discount per line.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tax",
            "description": "Tax rate applied to this line as a percentage (e.g. 24.0 = 24% VAT).",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity ordered.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockVariants",
            "description": "Comma- or JSON-encoded snapshot of the variant stock-id selection.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lineType",
            "description": "Line type ('item' | 'refund' | tenant-defined). Defaults to 'item'.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"item\"",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form line comment (gift message, configuration notes).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"\"",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Module-specific custom-options payload (JSON-encoded).",
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variants",
            "description": "Configurable-option choices selected on this line.",
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "INPUT_OBJECT",
                  "name": "CreateOrderItemVariantInput",
                  "ofType": null
                }
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateOrderInput",
        "description": "Input for createOrder. Use deliveryAddressId / billingAddressId to\nreference the customer's saved AddressBook entries (resolved at\ncall time and snapshotted onto the order), or pass deliveryAddress /\nbillingAddress as inline OrderPartyInput when the order is for an\nad-hoc address that shouldn't land in the customer's saved book.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "customerId",
            "description": "Placing customer id. Required.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryAddressId",
            "description": "Saved AddressBook id to use as the delivery address. Mutually exclusive with deliveryAddress.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingAddressId",
            "description": "Saved AddressBook id to use as the billing address. Mutually exclusive with billingAddress.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customer",
            "description": "Customer-side party snapshot. Optional — falls back to the customer record.",
            "type": {
              "kind": "INPUT_OBJECT",
              "name": "OrderPartyInput",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryAddress",
            "description": "Inline delivery party. Mutually exclusive with deliveryAddressId.",
            "type": {
              "kind": "INPUT_OBJECT",
              "name": "OrderPartyInput",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingAddress",
            "description": "Inline billing party. Mutually exclusive with billingAddressId.",
            "type": {
              "kind": "INPUT_OBJECT",
              "name": "OrderPartyInput",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Initial status id. Defaults to 1 (Received).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": "1",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusComment",
            "description": "Operator comment recorded on the initial status-history entry.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currency",
            "description": "ISO 4217 currency code. Defaults to 'EUR'.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"EUR\"",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currencyValue",
            "description": "Exchange rate against the tenant's primary currency. Defaults to 1 (when currency matches the primary).",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": "1",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentMethod",
            "description": "Display label for the chosen payment method as shown to the shopper\nat checkout (e.g. 'Verkkopankki', 'Pay by paypal'). Required and\nnon-empty.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentCode",
            "description": "Code identifying the chosen payment module. Required. Must match one\nof the entries in the tenant's MODULE_PAYMENT_INSTALLED configuration\nvalue (a ';'-separated list of currently-installed payment modules\nsuch as 'Cod', 'NetsBank', 'VivawalletCreditcard'). Free-form values\nand codes from removed/renamed modules are rejected — the createOrder\nmutation fails loud and the error message lists the modules currently\navailable for the connected tenant.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentApiId",
            "description": "Internal id passed to the chosen payment module's API for reconciliation.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentField",
            "description": "Free-form payment field captured at checkout (module-specific extra payload).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentInput",
            "description": "Module-specific payment input payload as captured at checkout (JSON-encoded).",
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingMethod",
            "description": "Display label for the chosen shipping method as shown to the shopper\nat checkout (e.g. 'Posti - Noutopiste'). Required.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingApiId",
            "description": "Internal id passed to the chosen shipping module's API for label generation and tracking.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingCode",
            "description": "Code identifying the chosen shipping module. Required. Must match\none of the entries in the tenant's MODULE_SHIPPING_INSTALLED\nconfiguration value (a ';'-separated list such as 'Flat',\n'Matkahuolto', 'Smartpost'). Free-form values are rejected.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingCost",
            "description": "Shipping cost to charge on the order, in the order's currency. Defaults to 0.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": "0",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseCode",
            "description": "Warehouse code identifying which warehouse the order ships from when the tenant runs multi-warehouse fulfilment. Resolves against the warehouses query.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "items",
            "description": "Line items to create on the order.",
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "INPUT_OBJECT",
                  "name": "CreateOrderItemInput",
                  "ofType": null
                }
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "UpdateOrderStatusInput",
        "description": "Input for updateOrderStatus, the public order fulfilment update\nmutation. orderId identifies the order to modify and statusId is the\ntenant-local order status id to write to orders.orders_status. Resolve\nvalid status ids dynamically with orderStatuses; tenants can extend the\nstatus table. trackingCode and trackingLink are optional fulfilment\nfields: omit a field to leave it unchanged, or pass an empty string to\nclear it. comments records the status-history note for this transition.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Order to update.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "New current order status id. Must exist in orderStatuses for the connected tenant.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "trackingCode",
            "description": "Carrier tracking code to store on the order. Omit to leave unchanged; pass an empty string to clear.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "trackingLink",
            "description": "Carrier tracking URL to store on the order. Omit to leave unchanged; pass an empty string to clear.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Status-history comment recorded with this update.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CategoryDescription",
        "description": "Localized text and SEO metadata for one Category, in one language.\nA Category has one CategoryDescription per (category, languageId) pair\n— the storefront picks the row matching the shopper's active language\nat render time. Carries the visible name, the slug-style URL fragment,\nthe long descriptions shown above and below the product listing, the\nhero-banner copy, and the SEO meta-tags emitted into the page head.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized category name shown in navigation, breadcrumbs, and the page header.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Slug-style URL fragment used in the canonical category URL (e.g. 'living-room-lamps').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "path",
            "description": "Full URL path the category resolves to (e.g. 'lighting/living-room-lamps'), composed by the storefront router.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pathOld",
            "description": "Previous URL path before the most recent rename. Used to emit redirects from the old URL to the new one.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Long-form description rendered below the product listing on the category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptionTop",
            "description": "Optional intro copy rendered above the product listing on the category page (typically a one-paragraph teaser / SEO blurb).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaTitle",
            "description": "Localized <title> tag for the category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaDescription",
            "description": "Localized <meta name='description'> for the category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "featureTitle",
            "description": "Localized title used in featured-category surfaces (homepage tiles, navigation highlights, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "typeTitle",
            "description": "Localized title used in the category-type / facet listing (e.g. when the same category is rendered as a filter chip).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bannerText",
            "description": "Localized hero-banner copy on the category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bannerButton",
            "description": "Localized hero-banner CTA button label (e.g. 'Shop now').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bannerUrl",
            "description": "Hero-banner CTA destination URL when the shopper clicks the button.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "redirectStatus",
            "description": "Redirect-on flag for path migrations (1 = the old slug should redirect to the new one; 0 = no redirect). Read by the router when the shopper hits pathOld.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Category",
        "description": "A node in the product category tree. Categories nest via parentId (a\nvalue of 0 indicates a top-level category) and stack into the\nstorefront's main navigation, breadcrumbs, and faceted browsing.\n\nCarries the visual assets (image, banner) and the structural fields\n(parentId, sortOrder, position) directly; localized titles, URLs, and\nSEO copy are returned through the descriptions field — one entry per\n(category, languageId) pair so the storefront can pick the shopper's\nlanguage at render time.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the category.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal code for the category, stable across languages — used by ERP / PIM mappings.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the category thumbnail image, served from the tenant's category-image directory. Used in navigation tiles and category-card surfaces.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "banner",
            "description": "Filename of the category hero banner image, served from the tenant's category-image directory. Rendered above the product listing on the category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "parentId",
            "description": "Id of the parent category, or 0 for top-level categories.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order within the parent category. Lower values render first in navigation and listing.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "position",
            "description": "Position field used as a secondary ordering / placement hint (e.g. for featured-category slots). Tenant interpretation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptions",
            "description": "Localized name / URL / description / SEO rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CategoryDescription",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderStatus",
        "description": "A status label for orders, defined per tenant and per language.\nReturned in one row per (id, languageId) pair so storefronts and\nadmin panels can render the status in the operator's chosen language.\n\nTenants typically share a common core set of ids (1=Received, 2=Packing,\n3=Shipped, etc. — see Order.status for the cross-tenant default list)\nand add custom statuses on top for payment-provider intermediate states\nor workflow-specific stages. Always resolve Order.status via this\nquery rather than hardcoding ids.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Stable numeric status id, used in Order.status and OrderStatusHistory.statusId.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageId",
            "description": "Language the localized name is in (1=English, 5=Swedish, 6=Finnish, 9=Spanish, 14=Italian; tenants may extend).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal code for the status (e.g. 'received', 'shipped', 'awaiting_payment'). Null for legacy entries that pre-date the code column.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized display label shown to operators and (for some tenants) to customers in transactional emails.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiFlag",
            "description": "If non-zero, this status triggers ERP / order-management API push when set on an order. 0 = local-only status.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiId",
            "description": "External-system identifier when the status is mirrored in an ERP (Lemonsoft / Netvisor / Tehden status code).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "colorCode",
            "description": "Hex color (without leading #) used to tint the status badge in admin UI. Null = default neutral color.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderStatusHistory",
        "description": "A status-transition entry on an order's timeline — one row per status\nchange captured as the order progresses (Received → Packing → Shipped\n→ Delivered, plus any backwards transitions for cancellations or\nreturns). Each row records the new status id, an optional staff\ncomment, and whether the customer was notified.\n\nRead-only on this type. To record a new transition and update the\norder's current status use updateOrderStatus. To append only a raw\nhistory row, use addOrdersStatusHistory, which writes to the same\nunderlying table.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the status-transition entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this status transition belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric status id moved to. Resolve to a localized name via the orderStatuses query.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusName",
            "description": "Localized status name as it was at the time of the transition (denormalised for stability when status names are later renamed).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "ISO timestamp of when the transition was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerNotified",
            "description": "Stored notification marker for this transition. Example values:\n- 0: not notified or not marked by the caller\n- 1: marked notified by the caller",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form staff comment attached to the transition (e.g. 'Awaiting carrier pickup', 'Refunded — damaged on arrival').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrdersStatusHistoryEntry",
        "description": "Write-side representation of a status-transition entry, returned by\nthe addOrdersStatusHistory mutation. Maps to the same underlying\norders_status_history row that OrderStatusHistory reads from, with a\ntrimmed shape (no statusName lookup — the read query enriches it).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the inserted transition.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order the transition belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric status id moved to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "ISO timestamp of when the transition was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerNotified",
            "description": "Stored notification marker for this transition (0 = not notified, 1 = marked notified).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Staff comment attached to the transition.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "OrdersStatusHistoryInput",
        "description": "Input shape for addOrdersStatusHistory. orderId + statusId are required; optional flags control the stored customer_notified marker and whether the order header is updated.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Order to record the transition on.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "New status id (must exist in orderStatuses for the connected tenant).",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form staff comment to attach to the transition.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "notifyCustomer",
            "description": "If true, records customer_notified = 1 on the history row. This mutation does not send email. Default: false.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "updateOrderStatus",
            "description": "If true, also update the order header's current status (orders.orders_status) to this statusId. If false, the transition is recorded for audit but the order's current status is unchanged. Default: false.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderHistoryEntry",
        "description": "An audit-log entry recording a single change to an order or one of\nits child rows (line items, totals, status history, notifications).\nCaptured automatically by the admin panel and selected automation\nflows whenever order data is modified after the order is placed —\ntypically a staff edit, a refund, or a re-trigger.\n\nUse this for compliance audits, order-detail change logs, and the\n\"history\" view on the admin order page. The log is append-only at\nthe application layer; combined with orderStatusHistory (status\ntransitions only), it provides the complete order-modification\ntrail.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the audit entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order whose row was changed.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "entityType",
            "description": "Source table the change happened in. Example values seen in\nproduction:\n- 'orders': field on the order header\n- 'orders_products': field on a line item\n- 'orders_total': totals breakdown adjustment\n- 'orders_status_history': status-history modification\n- 'orders_notifications': notification record\n- 'orders_products_variants': variant selection on a line\n- 'invoice_book', 'orders_actions': tenant-specific extensions",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "entityId",
            "description": "Row id within the entity table when the change targets a specific row (line id, totals row id, etc.). Null for header-level changes on orders itself.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "columnName",
            "description": "Database column name that changed (e.g. 'orders_status', 'products_quantity', 'shipping_method').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "oldValue",
            "description": "Previous value as stored in the column, serialized to string. Null when the row was newly created or the field was previously null.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "newValue",
            "description": "New value as stored in the column, serialized to string. Null when the field was cleared.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "actionType",
            "description": "Kind of change. Example values seen in production:\n- 'update' (most common): a column on an existing row was modified\n- 'rebuild': bulk recomputation (e.g. totals re-derived from lines)\n- 'delete': row was deleted\n- 'insert': row was created\n- 'notify': a notification was emitted to the customer\n- 'action': tenant-specific custom action",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userId",
            "description": "Administrator user id who made the change. Null for automated / system-triggered changes.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Administrator user name (denormalised at write time for stability).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "page",
            "description": "Admin panel route the change was made from (helps trace whether it came from a list page, detail page, or bulk action).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createdAt",
            "description": "ISO timestamp of when the change was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "LanguageMetadata",
        "description": "Storefront-side i18n metadata for one language. The image and\ndirectory fields come from the legacy oscommerce-derived language\nbundle layout — image holds the flag-icon filename rendered in the\nlanguage switcher, while directory names the bundle folder containing\nthe language's PHP translation files (e.g. 'finnish', 'english').",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "image",
            "description": "Filename of the flag icon used in the language switcher, served from the tenant's flag-icon directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "directory",
            "description": "Name of the language-bundle directory (oscommerce-style i18n folder, e.g. 'finnish', 'english'). Used by the legacy admin to load the localized PHP translations.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Language",
        "description": "A language enabled for the tenant. Drives the languages dropdown on\nthe storefront / admin, every per-language description row across\nthe schema (CategoryDescription, FaqQuestionDescription, OrderStatus,\netc.), and the localized labels emitted in transactional emails and\nreceipts. The platform's core canonical ids — 1=English, 5=Swedish,\n6=Finnish, 9=Spanish, 14=Italian — are shared across tenants;\ntenants may add more by inserting rows here and creating matching\n*_description rows for each localized table.\n\nEvery typedef in the schema that references a languageId resolves\nit against this table. Always resolve dynamically rather than\nhardcoding — the canonical id list isn't enforced at the DB level\nand tenants can extend it.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the language (language_id). Used as the languageId in every per-language description row across the schema.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "ISO 639-1 short code (e.g. 'fi', 'sv', 'en'). The code shoppers see in the URL when language is encoded in the path.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Display name of the language in the language's own form (e.g. 'Suomi' for Finnish).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metadata",
            "description": "Storefront i18n metadata: flag icon filename and language-bundle directory.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "LanguageMetadata",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Availability",
        "description": "A stock-availability label shown on product detail and listing pages\n(e.g. \"In Stock\", \"Out of Stock\", custom delivery-window phrases).\n\nEach tenant defines its own set of labels. Ids 1 and 2 are conventionally\nreserved for \"In Stock\" and \"Out of Stock\"; ids 3+ are tenant-defined\ndelivery-window variants (\"usually ships in 1–3 days\", \"special order\", etc.).\n\nReturned in one row per (id, languageId) pair so storefronts can pick the\nshopper's language at render time.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Stable numeric id of the availability label across all languages.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageId",
            "description": "Language identifier matching the languages query. Example values:\n- 1: English\n- 5: Swedish\n- 6: Finnish\n- 9: Spanish\n- 14: Italian\n\nTenants may add or remove languages — resolve dynamically via the\nlanguages query rather than hardcoding ids.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized label shown to shoppers in the chosen language.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "hexCode",
            "description": "Hex color (without leading #) used to tint the label in storefront UI.\nCommon conventions:\n- '005900' (dark green): item is available\n- 'ff0000' (red): item is unavailable or has an extended delivery window\n\nMay be null for legacy labels that pre-date the colored-badge UI.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Warehouse",
        "description": "A physical (or 3PL / virtual) warehouse the tenant ships from. Drives\nmulti-warehouse fulfilment routing (which warehouse picks an order),\nper-warehouse stock split (WarehouseStock holds the per-warehouse\non-hand quantities), and the storefront's 'check stock at your local\nstore' surface.\n\nA tenant on single-warehouse fulfilment will typically have one row\nhere (often code 'MAIN'); multi-warehouse setups use the visible flag\nto control which warehouses appear in shopper-facing surfaces vs.\nback-office-only locations. Each warehouse exposes a paginated stock\nview via Warehouse.stock — same data as the warehouseStock query\nreachable via this side of the join.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the warehouse.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Display name of the warehouse (e.g. 'Helsinki Main', 'Stockholm Hub').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal short code (e.g. 'MAIN', 'WH1', 'SE-HUB'). Used by Order.warehouseCode and as the join key into ERP / WMS systems.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "phone",
            "description": "Contact phone for the warehouse — captured for storefront display on the 'Find a store' surface and for B2B contact flows.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "email",
            "description": "Contact email for the warehouse.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "visible",
            "description": "Whether the warehouse should appear in shopper-facing surfaces (the 'check stock' picker, store-locator). false = back-office-only (e.g. a 3PL hub the storefront shouldn't expose by name).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stock",
            "description": "Per-warehouse stock for one product (or every product when productId is omitted). Resolves the warehouseStock data filtered to this warehouse — same rows the warehouseStock query returns when called with a warehouseId filter.",
            "args": [
              {
                "name": "productId",
                "description": "Restrict the response to one product. Omit to receive every product's quantity at this warehouse.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "WarehouseStock",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "WarehouseStock",
        "description": "Per-warehouse on-hand quantity for one product. When a tenant runs\nmulti-warehouse fulfilment (e.g. a main warehouse plus regional satellites\nor a 3PL), the product's total inventory in ProductStock is split across\nwarehouses here — one row per (warehouse, product) pair, holding only\nthat warehouse's slice.\n\nProductStock holds the variant-level totals across all warehouses;\nWarehouseStock holds the warehouse-level split per product. Sum\nWarehouseStock.quantity for a product across warehouses to reconcile\nagainst ProductStock.quantity. Used by the picking / dispatch flow to\npick the right warehouse, by the storefront's 'in stock at your nearest\nstore' display, and by ERP / WMS reconciliation reports.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the per-warehouse stock entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseId",
            "description": "Warehouse this stock slice lives in.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product this stock slice is for.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "On-hand quantity at this warehouse for this product.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ManufacturerInfo",
        "description": "Localized text and click-tracking metadata for one Manufacturer, in\none language. Carries the long brand body and the intro / preamble\ncopy that render on the brand landing page, plus a counter of how\nmany times the brand's external URL has been clicked from the\nstorefront and the timestamp of the most recent click.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "urlClicked",
            "description": "Counter of clicks on the brand's external URL from the storefront. Used for brand-engagement reporting.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateLastClick",
            "description": "Timestamp of the most recent external-URL click. Null when the brand's URL has never been clicked.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Long-form brand description body (rich text). Rendered below the intro on the brand landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptionTop",
            "description": "Intro / preamble copy rendered above the long description on the brand landing page (typically a one-paragraph teaser / SEO blurb).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Manufacturer",
        "description": "A brand or manufacturer associated with one or more products in the\ncatalog. Drives the storefront's brand index, the brand-filter facet\non category pages, the per-brand landing page, and any brand-scoped\npricing rules (special discounts applied at the brand level).\n\nCarries three image slots for different rendering surfaces (hero,\nbrand-page banner, listing thumbnail), per-brand commerce flags\n(status visibility, homepage feature, country-of-sale scope), and\none ManufacturerInfo row per language for the localized body copy.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the manufacturer (manufacturers_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Brand display name shown in navigation, breadcrumbs, and the brand-page header.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal code or short identifier for the brand. Stable across languages — used by ERP / PIM mappings and for routing rules.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the brand hero image (the large brand logo / hero shown on the brand landing page). Served from the tenant's manufacturer-image directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "brandPageImage",
            "description": "Filename of the brand-page banner image — wider hero / banner slot rendered above the product listing on the brand landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "listingImage",
            "description": "Filename of the listing thumbnail used in search results, brand-grid tiles, and category-side brand chips.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order across the brand index. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Visibility flag. 1 = brand is active and visible on the storefront; 0 = hidden (kept for editing without going live).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the brand record was created.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastModified",
            "description": "Timestamp of the most recent edit to the brand record.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "fitValue",
            "description": "Brand-specific size / fit hint shown on product detail pages (e.g. 'runs small', 'true to size'). Free-form short text.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specialDiscount",
            "description": "Brand-level percentage discount applied across the brand's products at checkout (a tinyint flag / value). 0 means no brand-level discount.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "cmsDescription",
            "description": "Flag indicating the description is sourced from a CMS instead of the inline ManufacturerInfo body. 1 = use CMS, 0 = use inline.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryApprovedProduct",
            "description": "Comma-separated country codes where the brand is approved for sale. Empty / null means no country restriction.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "displayFrontpage",
            "description": "Whether the brand is featured on the storefront homepage. 1 = featured (rendered in the homepage brand carousel / spotlight), 0 = not featured.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "infos",
            "description": "Localized description / click-tracking rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ManufacturerInfo",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "QuoteProduct",
        "description": "A line item on a quote — references a product, an optional variant,\nquantity, and any per-line pricing overrides. Mirrors the shape of an\nOrderItem but for the pre-order quote flow: prices may be tentative\n(discountedPrice override), variant selections may still be in flux,\nand the line carries a productGroup marker for combined-discount\nrules across grouped lines.\n\nCaptured per quote — when a quote is later converted to an order, the\nresolver translates these QuoteProduct rows into OrderItem +\nOrderItemVariant rows on the new order.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the quote line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteId",
            "description": "Quote this line belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product id from the catalog.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variant",
            "description": "Variant identifier — typically a comma-separated list of option-value ids (matches the format used in ProductStock.variant). Empty string when the product has no variants.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity quoted on this line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountedPrice",
            "description": "Per-line negotiated price override. Null means use the product's catalog price.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productGroup",
            "description": "Bundle / pricing-rule grouping marker. 0 means ungrouped (default\nfor most lines). Non-zero values group multiple lines together so\ncombined-discount rules and kit-style packaging can be evaluated\nacross the group as a unit.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form per-line comment from the customer or sales rep (configuration notes, customisation requests).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "JSON-encoded free-text custom-option inputs (the counterpart to product-options choices, e.g. engraving text, monogram initials).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bundleId",
            "description": "Bundle parent id when the line is a child of a configured product bundle. 0 means a standalone line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Quote",
        "description": "A quote — a B2B request-for-pricing record created by a customer or\non their behalf by a sales rep. Quotes progress through their own\nstatus lifecycle (Open → Proposal sent → Accepted → Ordered, or\nCancelled / Expired, see quoteStatuses), can be tied to a customer\naccount or held under an anonymous sessionId, and aggregate one or\nmore QuoteProduct line items.\n\nCarries the negotiation state (statusId, dates, reminder / follow-up\ncadence flags), the order-level discount applied to the quote\n(discountType + discountAmount), preferred shipping (shipmentMethod\n/ shipmentCode / shipmentPrice), preferred warehouse (warehouseId for\nstock pre-allocation), and the cc field for follow-up email\nrecipients.\n\nOnce a customer accepts a quote, the quote-to-order conversion flow\nspawns a new Order with the QuoteProduct lines mapped onto OrderItem\nrows. For attachments see quoteFiles; for the status timeline see\nquoteStatusHistory; for status definitions see quoteStatuses.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the quote.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Id of the requesting customer. Null for anonymous quotes (filled in via sessionId until the requester logs in / registers).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionId",
            "description": "Anonymous browser session identifier when the quote is created without a customer account. Lets the storefront thread the quote across page views before login.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ipAddress",
            "description": "IP address of the requester captured at quote creation. Useful for fraud / abuse forensics.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric status id of the quote. Example values across tenants (defaults; tenants extend):\n- 1: Open (received)\n- 2: Accepted\n- 3: Cancelled\n- 4: Ordered (converted to an order)\n- 5: Proposal sent\n- 50: Pending approval\n\nTenants may extend this set. Always resolve dynamically via the\nquoteStatuses query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the quote was created.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateModified",
            "description": "Timestamp of the most recent edit to the quote.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateReminder",
            "description": "Timestamp the auto-reminder system is scheduled to dispatch a reminder email at. Paired with sendReminder.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateFollowUp",
            "description": "Timestamp the auto-reminder system is scheduled to dispatch a follow-up email at. Paired with sendFollowUp.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sendReminder",
            "description": "Whether the auto-reminder system should send the dateReminder email. Stored as a flag string (e.g. '1' / '0').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sendFollowUp",
            "description": "Whether the auto-reminder system should send the dateFollowUp email. Stored as a flag string (e.g. '1' / '0').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountType",
            "description": "How the discountAmount is interpreted. Same enum as on coupons and\ncustomer groups. Example values:\n- 'fixed' — currency amount off the quote total\n- 'percent' — percentage off\n- 'shipping' — applied as a shipping subsidy / free shipping\n\nDefaults to 'fixed' on new quotes.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountAmount",
            "description": "Discount value to apply at the quote level, interpreted via discountType.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form comment captured at quote creation (customer's brief or sales-rep notes).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "cc",
            "description": "Comma-separated list of CC email addresses to copy on quote-related notifications (proposal email, reminders, follow-ups).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentMethod",
            "description": "Display label for the requested shipping method (e.g. 'Posti - Noutopiste'). Mirrors the shape on Order.shippingMethod.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentCode",
            "description": "Code identifying the requested shipping module. Mirrors Order.shippingCode.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentPrice",
            "description": "Quoted shipping cost in the tenant's default currency.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseId",
            "description": "Preferred warehouse id for stock pre-allocation when the quote is later converted to an order. Resolves against the warehouses query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "items",
            "description": "Line items on the quote.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "QuoteProduct",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "QuoteProductInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "productId",
            "description": "Product id from the catalog.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variant",
            "description": "Variant identifier — comma-separated option-value ids (matches ProductStock.variant). Empty string when the product has no variants.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity to quote. Defaults to 1.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": "1",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountedPrice",
            "description": "Per-line negotiated price override. Null = use the catalog price.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productGroup",
            "description": "Bundle / pricing-rule grouping marker. Defaults to 0 (ungrouped).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": "0",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form per-line comment.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"\"",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "JSON-encoded custom-option inputs.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bundleId",
            "description": "Bundle parent id. Defaults to 0 (standalone line).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": "0",
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateQuoteInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "customerId",
            "description": "Requesting customer id. Optional — leave null for anonymous quotes captured via sessionId.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionId",
            "description": "Anonymous browser session id when no customer is logged in.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ipAddress",
            "description": "Requester IP address (forensics).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Initial status id. Defaults to the tenant's 'Open' status when omitted.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentMethod",
            "description": "Display label for the requested shipping method.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentCode",
            "description": "Code identifying the requested shipping module.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shipmentPrice",
            "description": "Quoted shipping cost.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "warehouseId",
            "description": "Preferred warehouse id for stock pre-allocation.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "items",
            "description": "Line items to create on the quote. Required (at least one).",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "INPUT_OBJECT",
                    "name": "QuoteProductInput",
                    "ofType": null
                  }
                }
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "QuoteStatus",
        "description": "A localized quote-status label. Mirrors the order-status pattern but\nfor B2B quotes — quotes move through their own lifecycle (Open →\nProposal sent → Accepted → Ordered, or Cancelled / Expired) and the\nstorefront / admin renders the current status using the localized\nname returned here.\n\nThe platform's canonical status ids — 1 Open, 2 Accepted, 3 Cancelled,\n4 Ordered, 5 Proposal sent, 50 Pending approval — are shared across\ntenants by default; tenants can extend with custom workflow stages.\nEach status has a stable internal code (e.g. 'open', 'accepted')\nin addition to the localized display name.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Stable numeric status id, used in Quote.statusId and QuoteStatusEntry.statusId.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageId",
            "description": "Language id this row is for.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized display label shown to operators and customers (e.g. 'Open', 'Hyväksytty', 'Avbruten').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Stable internal code for the status, language-independent (e.g. 'open', 'accepted', 'cancelled', 'ordered'). Use this for routing rules and integrations rather than matching on numeric id or localized name.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "QuoteStatusEntry",
        "description": "A status-transition entry on a quote's timeline — one row per status\nchange captured as the quote progresses. Mirrors OrderStatusHistory\nbut for quotes. Read-only on this type; record new transitions via\nthe addQuoteStatusHistory mutation, which writes to the same\nunderlying table.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the timeline entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteId",
            "description": "Quote this transition belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric status id moved to. Resolve to a localized name via the quoteStatuses query.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusName",
            "description": "Localized status name as it was at the time of the transition (denormalised for stability when status names are later renamed).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "ISO timestamp of when the transition was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerNotified",
            "description": "Whether a notification email was sent to the customer for this\ntransition. Example values:\n- 0: not notified (internal state change)\n- 1: notification email sent",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form operator comment attached to the transition (e.g. 'Awaiting customer signature').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "AddQuoteStatusHistoryInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "quoteId",
            "description": "Quote to record the status transition against.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric status id to move the quote to. Resolves against quoteStatuses.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerNotified",
            "description": "Whether to flag the entry as having dispatched a customer notification (0 = not notified, 1 = notified).",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form operator comment attached to the transition (e.g. 'Awaiting customer signature').",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "QuoteNotificationFlagsInput",
        "description": "Optional notification-cadence flags applied alongside a status\ntransition. The reminder / follow-up flags on the parent Quote\ncontrol whether the auto-reminder system will email the customer\nif the quote sits in its current status — recording a transition\nis a natural moment to flip those flags (e.g. enable follow-up\nemails when the quote moves to 'Proposal sent').",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "sendReminder",
            "description": "When set, update Quote.sendReminder. true = enable the reminder cadence; false = disable it.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sendFollowUp",
            "description": "When set, update Quote.sendFollowUp. true = enable the follow-up cadence; false = disable it.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "QuoteFile",
        "description": "An attachment on a quote. Either a customer-supplied document\n(specification, drawing, brief) uploaded when the quote is\nrequested, or a seller-generated PDF (the proposal sent back to\nthe customer) attached as the quote progresses. Stored as a\nfilename pointer — the actual file lives in the tenant's\nquote-files directory.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the attachment.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quoteId",
            "description": "Quote this file is attached to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "file",
            "description": "Filename of the attachment, served from the tenant's quote-files directory.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "QuoteFileInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "quoteId",
            "description": "Quote id to attach the file to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "file",
            "description": "Filename to record. The actual upload happens through the tenant's file-upload endpoint; this mutation just records the name.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "QuoteGroup",
        "description": "A localized quote-group label — the categorisation a customer or\noperator picks when creating a quote (e.g. 'Wholesale', 'B2B\nproject', 'Sample request', 'Construction tender'). Each group has\none row per language, so the storefront's quote form can render the\ngroup dropdown in the shopper's chosen language.\n\nTenants define their own group set; the values are not enforced as\nan enum at the GraphQL layer. Used for routing — quotes in some\ngroups go to specific sales reps or trigger different reminder\ncadences than others.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the quote group.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized group label shown in the quote-group dropdown.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductOption",
        "description": "A configurable option attached to a product — for example \"Size\" with values\nXL/L/M/S, \"Engraving\" with a free-text value, or \"Material\" with a price-\naffecting choice. ProductOption represents the option itself; the\nProductOptionValue list holds the choices the shopper can pick.\n\nOptions drive the variant selector on product detail pages and seed\nOrderItemVariant rows when the shopper checks out. The same configurable-\noption model also feeds quotes (QuoteProduct.variant) and per-line\ncustomisations on saved baskets.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the option (products_options_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized display label of the option (e.g. 'Size', 'Material', 'Engraving').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal code for the option, stable across languages — useful for routing rules and ERP mappings.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Localized helper text shown beneath the option in the product page UI.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sort",
            "description": "Display sort order. Lower values render first in the variant selector.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "values",
            "description": "The selectable values for this option. Empty for free-form options where the shopper types a value at checkout.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ProductOptionValue",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductOptionValue",
        "description": "One selectable value of a ProductOption — for example 'XL' under 'Size',\nor 'Engraving up to 12 chars' under 'Personalisation'. Carries an\noptional price delta that's applied at the line level when the shopper\npicks this value (see also OrderItemVariant.price + pricePrefix for the\npersisted form).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the option value (products_options_values_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized label shown to shoppers (e.g. 'XL', 'Stainless steel').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Internal code for the value, stable across languages.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specification",
            "description": "Free-form spec text shown alongside the value (e.g. dimensions, technical detail).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "weight",
            "description": "Weight delta added to the product's base weight when this value is chosen, in kilograms. Used in shipping calculation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sort",
            "description": "Display sort order within the parent option.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "hex",
            "description": "Hex color (without leading #) for swatch UI. Null when the value isn't a color.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "priceDelta",
            "description": "Price delta this value contributes when chosen, in the tenant's default currency. Interpreted via pricePrefix.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "How priceDelta is applied. Example values:\n- '+' (most common): additive — added to the base product price\n- '' (empty): replacement — overrides the base price entirely\n\nMirrors OrderItemVariant.pricePrefix for the persisted form.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "apiId",
            "description": "External-system identifier for the value when the option is mirrored in an ERP / PIM.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductStock",
        "description": "A stock-keeping row for one variant of a product. Products that come in\nmultiple variants (size, color, configuration) have one ProductStock row\nper variant, each with its own SKU, barcode, price, on-hand quantity,\nand warehouse shelf location.\n\nProductStock holds the totals across all warehouses for a given variant.\nWhen a tenant runs multi-warehouse inventory, the per-warehouse split\nlives in WarehouseStock — sum WarehouseStock.quantity across warehouses\nfor one product to reconcile against ProductStock.quantity. Price\nchanges are audited via productPriceHistory.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the stock entry (products_stock_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product this variant belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variant",
            "description": "Variant identifier — typically a comma-separated list of option-value ids that uniquely identify the variant within the product (e.g. '11_22' = option 11 value 22).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "On-hand quantity for this variant, summed across all warehouses.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Current selling price for this variant in the tenant's default currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "priceOriginal",
            "description": "Reference / list price before any current promotion. Used to compute discount badges in the storefront.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shelf",
            "description": "Warehouse shelf location code captured for pick-and-pack staff (e.g. 'A1-03'). Null when the tenant doesn't track shelves.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductPriceHistory",
        "description": "A snapshot of one price change for a product. Every time a product's price\nis updated — at the product level or for a specific variant — a row is\nwritten here capturing the new price, the timestamp, and the user who made\nthe change. The table is append-only and serves as the audit trail behind\nthe admin's pricing reports and any 'price last changed by …' display.\n\nFor the live current price see ProductStock.price (per-variant) and the\nproduct-level price on Product. For volume / step-discount ladders that\nlayer on top of the live price see productVolumeAddonPrices and\nproductVolumeDiscounts.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the history entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product whose price changed.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockId",
            "description": "Variant (products_stock) whose price changed. 0 means a product-level price change rather than a per-variant change.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "New price recorded by this change, in the tenant's default currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "date",
            "description": "Timestamp of the price change. ISO-8601 string.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Username of the admin who applied the change. Useful for audit / accountability reports.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductCategoryLink",
        "description": "A many-to-many link row tying one product to one category. The catalog\nnavigation, breadcrumbs, and category landing pages all rely on this\npivot table — a product lives in multiple categories at once (a lamp can\nbe in 'Living room', 'Floor lamps', and 'Sale'), and each category lists\nevery product linked to it.\n\nThis is a thin pivot — id-only — but the resolver hydrates the related\nProduct and Category objects when included in the selection set, so the\ncaller can fetch link rows + their endpoints in a single round-trip.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "productId",
            "description": "Product side of the link.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categoryId",
            "description": "Category side of the link.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "product",
            "description": "Resolved product, included when the field is selected.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "Product",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "category",
            "description": "Resolved category, included when the field is selected.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "Category",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomersBasketItem",
        "description": "One line item in a customer's persistent (server-side) basket. Unlike\nthe volatile session basket, customers_basket rows survive logout and\ndevice switch — they're the storefront's 'we saved your cart' surface,\nthe basket the abandoned-basket reminder emails are built on, and the\nstarting point when a logged-in customer adds the same product again.\n\nA line carries the product, the chosen variant + option values\n(variants / productOptions), any free-form custom-option text inputs\n(customOptions), and an explicit price snapshot (specialPrice) when\nthe storefront wants to lock in a promotional price. Bundle support\nis via bundleId + includes for parent / child line linking.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the basket line (customers_basket_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "cartId",
            "description": "Cart key. Lets one customer hold multiple parallel baskets (saved-for-later, B2B quote draft, etc.) keyed by this opaque id.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer id this basket line belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "itemId",
            "description": "Free-form item identifier captured at add-to-cart time. Used by some integrations to match the line back to an external system.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product id added to the basket. Null for bundle child rows that point at the parent via bundleId instead.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variants",
            "description": "Variant identifier for the line — matches the comma-separated option-value-id format used in ProductStock.variant (e.g. '11_22' = option 11 value 22). Null when the product has no variants.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productOptions",
            "description": "Configurable-option choices captured at add-to-cart, encoded the same way OrderItemVariant rows persist them on a finalized order.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form line comment from the shopper (e.g. gift-message, delivery instructions for this line specifically).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Custom-option text inputs captured at add-to-cart (the free-text counterpart to productOptions, e.g. engraving text, monogram initials).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity ordered on this line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specialPrice",
            "description": "Price snapshot to lock the line to, in the tenant's default currency. Null = use the live product price at checkout. Set when the storefront wants to honour a promotional price even if the catalog price changes before checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bundleId",
            "description": "Bundle parent id for child rows. Null = this line is either a standalone product or the bundle parent itself.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "includes",
            "description": "Bundle-children references when this row is a bundle parent (free-form encoding identifying the included products / lines).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the line was added to the basket. Used to age out stale baskets.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailSent",
            "description": "Abandoned-basket reminder counter. Tracks how many reminder emails the line has triggered so far.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "emailLast",
            "description": "Timestamp of the most recent abandoned-basket reminder email sent for the line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variableImage",
            "description": "Variant-specific image filename to render on the basket page (e.g. when the customer picked a colour variant).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "allowSubstitute",
            "description": "Whether the customer is OK with the warehouse shipping a substitute item if this product is out of stock at pick time. Captured for B2B / wholesale flows where missing stock can be swapped for an equivalent.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "SharedBasketItem",
        "description": "One line item in a shared basket — a basket bound to an opaque\nshared_cart_id rather than a specific customer's session. Used for\ncollaborative B2B flows: a sales rep builds a basket on behalf of a\ncustomer and sends them a link, two team-mates from the same\ncustomer organisation co-edit a wholesale draft, or a single shopper\nsyncs their cart across devices via a shared id.\n\nSame shape as CustomersBasketItem but keyed differently: customersId\nis optional (null on anonymous shared baskets), and the row carries\nan explicit expiresAt so the storefront can age out abandoned shared\nbaskets. Each item is uniquely keyed by (sharedCartId, itemId) — the\nitemId lets the parent flow address one line of the shared basket\nwithout knowing the row id.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the shared-basket line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sharedCartId",
            "description": "Opaque shared-cart id linking lines that belong to the same shared basket. Lets multiple parties co-edit one basket without a shared customer id.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer attached to the basket. Null for anonymous shared baskets that haven't been claimed by a logged-in customer yet.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "itemId",
            "description": "Caller-supplied identifier for the line within the shared basket. Lets the parent flow reference a specific line ('apply discount to itemId X') without knowing its database row id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Catalog product id on the line. Null for free-form / placeholder lines.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variants",
            "description": "Variant identifier — comma-separated option-value ids matching the format used in ProductStock.variant. Empty when the product has no variants.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productOptions",
            "description": "Configurable-option choices (matches OrderItemVariant / ProductOption choices, encoded the same way as on customers_basket).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form per-line comment (configuration notes, gift message).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "JSON-encoded free-text custom-option inputs (engraving, monogram).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity ordered on this line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specialPrice",
            "description": "Price snapshot to lock the line to, in the tenant's default currency. Null = use the live product price at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bundleId",
            "description": "Bundle parent id for child rows. Null = standalone line or bundle parent itself.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "includes",
            "description": "Bundle-children references when this row is a bundle parent.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the line was added to the shared basket.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "expiresAt",
            "description": "Timestamp the shared-basket line auto-expires. Past this point the storefront should refuse to load or accept edits unless requireActive=false is passed on the mutation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateSharedBasketInput",
        "description": "Input for createOrUpdateSharedBasket — upsert a line into a shared\nbasket. When a row with the same (sharedCartId, itemId) exists, the\nresolver updates it; otherwise it inserts a new row. requireActive\nguards against edits on already-expired baskets.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "sharedCartId",
            "description": "Opaque shared-cart id.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "itemId",
            "description": "Caller-supplied line identifier within the shared basket.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer to bind the line to. Optional — leave null for anonymous shared baskets.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Catalog product id.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variants",
            "description": "Variant identifier (comma-separated option-value ids).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productOptions",
            "description": "Configurable-option choices.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form per-line comment.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "JSON-encoded custom-option text inputs.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity to set on the line.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specialPrice",
            "description": "Price snapshot to lock the line to.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "bundleId",
            "description": "Bundle parent id for child rows.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "includes",
            "description": "Bundle-children references when this row is a bundle parent.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "expiresAt",
            "description": "Timestamp the line should expire at.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "requireActive",
            "description": "When true (default), the resolver throws if the existing line is past expiresAt. Set false to permit edits on expired baskets (e.g. an admin reviving a stale shared basket).",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "UpdateSharedBasketQuantityInput",
        "description": "Input for updateSharedBasketQuantity — narrowly change the quantity\non an existing line without touching the rest of the row. Used by\nthe storefront's '+' / '-' quantity stepper on the shared-basket\nview.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "sharedCartId",
            "description": "Opaque shared-cart id.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "itemId",
            "description": "Caller-supplied line identifier.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "New quantity for the line.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "requireActive",
            "description": "When true (default), refuse to update if the line is past expiresAt.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "ExpireSharedBasketInput",
        "description": "Input for expireSharedBasketItem — rewrite the line's expiresAt to\nthe current moment (or the supplied timestamp) so subsequent\nrequireActive=true reads / edits start refusing. Used by 'Mark as\nexpired' admin actions and by the auto-expiry sweeper.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "sharedCartId",
            "description": "Opaque shared-cart id.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "itemId",
            "description": "Caller-supplied line identifier.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "expiresAt",
            "description": "Timestamp to set as the new expiresAt. When omitted the resolver uses 'now'.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "DiscountCoupon",
        "description": "A discount coupon definition — the rule that says 'enter code XYZ at\ncheckout to get N off, applicable when …'. Coupons can be unrestricted\n(apply to any basket) or scoped to specific products, categories,\ncustomers, manufacturers, shipping methods, or geo-zones via the\napplicability arrays (categories, products, customers, manufacturers,\nshippingMethods, zones) — each populated from a dedicated\ndiscount_coupons_to_* join table.\n\nThe orders[] array on this type doubles as the redemption history —\nit contains the order ids the coupon has actually been applied to.\nFor per-order lookup of which coupons were applied see\ndiscountCouponsToOrders / Order.discountCoupons; for per-customer\nattach/revoke flows see attachDiscountCouponToCustomer /\nremoveDiscountCouponFromCustomer mutations.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Coupon id (a row in the discount_coupons table). Strings on the wire — most tenants use human-readable codes like 'WELCOME10' rather than numeric ids.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Admin-facing description (e.g. 'Welcome 10% off'). Not shown to shoppers.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "amount",
            "description": "Discount value, interpreted via discountType.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountType",
            "description": "How amount is applied. Example values:\n- 'fixed' — fixed currency amount off the order total\n- 'percent' — percentage off the order total\n- 'shipping' — applied as a shipping subsidy / free shipping",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateStart",
            "description": "Inclusive lower bound on when the coupon is redeemable. Null = no lower bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateEnd",
            "description": "Inclusive upper bound on when the coupon is redeemable. Null = no upper bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "maxUse",
            "description": "Maximum total redemptions across all customers. 0 = unlimited.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "minOrder",
            "description": "Minimum order threshold for the coupon to apply, interpreted via minOrderType.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "minOrderType",
            "description": "How minOrder is interpreted. Example values:\n- 'price' — basket value in the tenant's default currency\n- 'quantity' — total item count in the basket",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "numberAvailable",
            "description": "Remaining redemptions allowed across all customers. Decremented each time the coupon is applied to an order; reaches 0 when the coupon is exhausted (subject to maxUse). 0 / null when unbounded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerType",
            "description": "Customer-eligibility filter. Example values:\n- 'all' — any customer can redeem\n- 'vatid' — only customers with a VAT id (B2B accounts)\n- 'regular' — only customers without a VAT id (consumer accounts)",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountedProducts",
            "description": "Cached count of products the coupon currently applies to (rolled up from the products / categories / manufacturers join tables). Convenience for admin UI; recomputed when applicability changes.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountedProductsOld",
            "description": "Cached count of products the coupon previously applied to before the most recent applicability edit. Used by the admin to show 'previous vs current' diffs when editing a coupon.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "allowedProducts",
            "description": "Free-form whitelist of additional product ids (typically comma-separated) the coupon applies to even if the categories / products join tables don't list them. Null when no extra whitelist is set.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categories",
            "description": "Category ids the coupon is restricted to (from discount_coupons_to_categories). Empty array means 'no category restriction'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "products",
            "description": "Product ids the coupon is restricted to (from discount_coupons_to_products). Empty array means 'no per-product restriction'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customers",
            "description": "Customer ids the coupon is restricted to (from discount_coupons_to_customers) — the per-customer issued-coupon allowlist. Empty array means 'any eligible customer can use it'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orders",
            "description": "Order ids the coupon has been redeemed against (from discount_coupons_to_orders). Doubles as the redemption history.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "manufacturers",
            "description": "Manufacturer ids the coupon is restricted to (from discount_coupons_to_manufacturers). Empty array means 'no manufacturer restriction'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shippingMethods",
            "description": "Shipping-method codes the coupon is restricted to (from discount_coupons_to_shipping). Empty array means 'no shipping-method restriction'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zones",
            "description": "Geo-zone ids the coupon is restricted to (from discount_coupons_to_zones). Empty array means 'no geo restriction'.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "DiscountCouponOrderLink",
        "description": "One redemption-history entry — a row in discount_coupons_to_orders\nrecording that a specific coupon was applied to a specific order at\ncheckout. Same join table that's exposed as DiscountCoupon.orders[]\n(the from-coupon side) and as Order.discountCoupons (the from-order\nside); this surface is the standalone link-row view, useful for\ncross-cutting queries that want the join with both endpoints\nresolvable in one round-trip.\n\nThe link is created at checkout when the customer applies a coupon\nsuccessfully, and is read at order display, refund / return flows,\nand coupon-performance reporting. Removing a coupon from an order\nafter the fact requires deleting this link row plus reversing the\nnumberAvailable counter on the parent DiscountCoupon — there's no\nbuilt-in mutation for that here.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "couponCode",
            "description": "Coupon id that was applied (matches DiscountCoupon.id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order id the coupon was applied to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "coupon",
            "description": "Resolved coupon, fetched on demand when the field is selected. Returns the full DiscountCoupon with its applicability arrays.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "DiscountCoupon",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "order",
            "description": "Resolved order, fetched on demand when the field is selected. Returns a slim Order shape (customer, status, totals, payment / shipping method).",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "Order",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "DiscountCouponCustomerLink",
        "description": "A per-customer issuance link — one row in discount_coupons_to_customers\nbinding one coupon to one customer. When a coupon's customers list is\nnon-empty, only the listed customers can redeem it (private / VIP /\nnamed-account coupons). Empty list = anyone eligible by the coupon's\nother rules can redeem.\n\nSame join surface that's exposed as DiscountCoupon.customers[] (the\nread view from the coupon side). Use the mutations here to attach a\ncoupon to a customer (idempotent via ON DUPLICATE KEY) or detach it.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "couponCode",
            "description": "Coupon code (matches DiscountCoupon.id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer the coupon is issued to (matches Customer.id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "DiscountCouponCustomerLinkInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "couponCode",
            "description": "Coupon code to attach / detach.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer id to attach the coupon to or detach it from.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderItemVariant",
        "description": "A configurable-product option selected on one order line — for example a\nsize/colour pair on a t-shirt, or a personalisation field on a gift. Variants\nstack: a single OrderItem can carry many OrderItemVariants, each contributing\nan additive or replacement price delta to the line total via pricePrefix.\nCaptured as a snapshot at order time, so later changes to the underlying\nproduct option definition do not retroactively rewrite already-placed orders.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the variant selection.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderProductId",
            "description": "Order line (OrderItem) this variant selection belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionId",
            "description": "Product option id (matches a row in the catalog options table).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionName",
            "description": "Display label of the option as shown to the shopper at checkout (e.g. 'Size', 'Engraving').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionValue",
            "description": "Selected value as shown to the shopper (e.g. 'XL', 'Happy Birthday Anna').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Price delta this variant contributes to the line, interpreted via pricePrefix.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "How the price delta is applied to the line:\n- '+' (most common): additive — added to the base product price\n- '' (empty): replacement — overrides the base price entirely\n\nTenants may define additional prefixes; treat unrecognised values as\nadditive by default.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderItem",
        "description": "A purchased line on an order — the snapshot of one product (or shipping /\nfee / comment line) as it appeared in the cart at the moment of checkout.\nIncludes the per-line price, tax, configurable variant selections, and\nwarehouse pick-and-pack state that gets populated as the order moves\nthrough fulfilment.\n\nRead-only on this type. To modify lines on an existing order use the\naddOrdersProduct / updateOrdersProduct / removeOrdersProduct mutations,\nwhich write to the same underlying orders_products row but expose a\nwrite-shaped contract via the OrdersProduct type.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the order line (orders_products_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this line belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product id from the catalog. Null for lines that don't reference a catalog product (free-form refund / fee lines).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productModel",
            "description": "Product SKU / model identifier captured at order time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productEan",
            "description": "EAN / barcode captured at order time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productName",
            "description": "Display name shown on the receipt and admin order detail.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity ordered.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantityReturned",
            "description": "Quantity already returned (for refunds / partial returns). 0 on a fresh order.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Unit price actually charged, in the order's currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "originalPrice",
            "description": "Catalog price at the time of order (before any per-customer or coupon adjustments). Useful for computing realised discount per line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tax",
            "description": "Tax rate applied to this line as a percentage (e.g. 24.0 = 24% VAT).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockVariants",
            "description": "Comma- or JSON-encoded snapshot of the variant stock-id selection (e.g. for size/colour SKUs).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lineType",
            "description": "Line type. Example values seen in production:\n- 'item' (default): regular product line\n- 'refund': return-credit line subtracted from the order total\n\nTenants may extend with custom types ('shipping', 'fee', 'comment').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form comment captured at checkout (gift message, configuration notes, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Module-specific custom-options payload (JSON-encoded). Set when the product has configurable options the shopper filled out at checkout.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productCategories",
            "description": "Snapshot of the product's category memberships at order time (comma-separated category ids).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productWeight",
            "description": "Per-line product weight in kilograms (used for shipping calculation when line-level weights matter).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productLocation",
            "description": "Per-line warehouse location code captured at order time (e.g. shelf identifier).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variableImage",
            "description": "Filename of a per-line custom image uploaded by the shopper (for personalised / printed products). Null when the line carries no custom image.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "allowSubstitute",
            "description": "True (1) if the customer accepted product substitution for this line: warehouse may ship a similar product when the requested variant is unavailable. 0 = strict matching.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "confirmFlag",
            "description": "True (1) if a confirmation step was applied to this line during pick-and-pack (warehouse confirmed the SKU + quantity). 0 = unconfirmed.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "confirmProductsQuantity",
            "description": "Confirmed quantity captured during pick-and-pack. May differ from the ordered quantity when shortages or substitutions occurred.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "autoComment",
            "description": "True (1) if the line was added by an automatic process (auto-bundle expansion, accessory rule, etc.) rather than by the shopper. 0 = manually added.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "variants",
            "description": "Configurable variants selected on this line. Empty array for products without options or when the order line is a fee / refund / comment row.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "OrderItemVariant",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrdersProductsVariant",
        "description": "A configurable-product option selected on an order line, returned by\nthe addOrdersProductsVariant / updateOrdersProductsVariant mutations.\nStored on a separate table (orders_products_variants) from the line\nitself so a single line can carry many variant selections.\n\nRead-side: this same data is exposed through OrderItem.variants on\nthe read query path. Use the mutations here when you need to add,\nmodify, or remove option selections on an already-placed order from\nthe admin panel or an integration.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the variant selection.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order the variant belongs to (denormalised for filtering).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderProductId",
            "description": "Order line (OrderItem / OrdersProduct) this variant selection belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionId",
            "description": "Product option id (matches a row in the catalog options table).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionName",
            "description": "Display label of the option as shown to the shopper at checkout (e.g. 'Size', 'Engraving').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionValue",
            "description": "Selected value as shown to the shopper (e.g. 'XL', 'Happy Birthday Anna').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Price delta this variant contributes to the line, interpreted via pricePrefix.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "How the price delta is applied. Example values:\n- '+' (most common): additive — added to the base product price\n- '' (empty): replacement — overrides the base price entirely",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "AddOrdersProductsVariantInput",
        "description": "Input shape for attaching a new variant selection to an existing order line.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Order this line belongs to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderProductId",
            "description": "Order line to attach the variant to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionId",
            "description": "Product option id from the catalog.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionName",
            "description": "Display label of the option.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionValue",
            "description": "Selected value.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Price delta this variant contributes.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "How price is applied — defaults to '+' (additive) when omitted.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "UpdateOrdersProductsVariantInput",
        "description": "Input shape for partially updating an existing variant selection. All fields are optional — only provided fields are written. Used for admin post-order corrections (e.g. fixing a typo in the captured option name, or adjusting a price delta after the fact).",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Move the variant to a different order (rare; used in split / merge flows).",
            "type": {
              "kind": "SCALAR",
              "name": "ID",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderProductId",
            "description": "Move the variant to a different order line.",
            "type": {
              "kind": "SCALAR",
              "name": "ID",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionId",
            "description": "Update the catalog option id reference.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionName",
            "description": "Update the option display label captured at order time.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "optionValue",
            "description": "Update the selected value captured at order time.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Update the price delta this variant contributes.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pricePrefix",
            "description": "Update how the price delta is applied ('+' additive or '' replacement).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrdersProduct",
        "description": "Write-shaped representation of an order line, returned by the\naddOrdersProduct / updateOrdersProduct mutations. Maps to the same\nunderlying orders_products row that OrderItem reads from, but excludes\nthe nested variants list (manage variants separately via the\naddOrdersProductsVariant / updateOrdersProductsVariant /\nremoveOrdersProductsVariant mutations).\n\nUse OrderItem for read flows; use OrdersProduct + the matching\nmutations when modifying lines on an already-placed order from the\nadmin panel or an integration.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the line (orders_products_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this line belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Catalog product id this line references. Null for free-form lines.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productModel",
            "description": "Product SKU / model identifier captured at order time. Snapshotted from products.products_model so the order stays stable when the catalog is later edited.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productEan",
            "description": "EAN / barcode captured at order time.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productName",
            "description": "Display name shown on the receipt and admin order detail. Snapshotted at order time.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Unit price actually charged, in the order's currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "originalPrice",
            "description": "Catalog price at the time of order, before per-customer or coupon adjustments.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tax",
            "description": "Tax rate applied to this line as a percentage (e.g. 24.0 = 24% VAT).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity ordered on this line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantityReturned",
            "description": "Quantity already returned. 0 on a fresh line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockVariants",
            "description": "Comma- or JSON-encoded snapshot of the variant stock-id selection.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lineType",
            "description": "Line type. Example values: 'item' (default), 'refund'.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form comment captured at checkout (gift message, configuration notes).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Module-specific custom-options payload (JSON-encoded) for configurable products.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "AddOrdersProductInput",
        "description": "Input shape for adding a new line to an existing order via addOrdersProduct.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Order to attach the new line to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Catalog product id, when the line corresponds to a real product. Null for free-form lines.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productModel",
            "description": "Product SKU / model identifier to capture on the line.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productEan",
            "description": "EAN / barcode to capture on the line.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productName",
            "description": "Display name shown on the receipt. Required.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Unit price to charge.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "originalPrice",
            "description": "Catalog price for discount-tracking. Falls back to price when omitted.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tax",
            "description": "Tax rate as percentage. Falls back to 0 when omitted.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Quantity to add on the new line.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockVariants",
            "description": "Comma- or JSON-encoded snapshot of the variant stock-id selection.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lineType",
            "description": "Line type — defaults to 'item'. Pass 'refund' for a return-credit line.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Free-form comment to attach to the line (gift message, configuration notes).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Module-specific custom-options payload (JSON-encoded) when the product carries configurable options.",
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "UpdateOrdersProductInput",
        "description": "Input shape for partially updating an existing order line via updateOrdersProduct. All fields are optional — only the provided fields are written. Used for admin post-order corrections (price adjustment, quantity fix, attach a custom comment).",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "orderId",
            "description": "Move the line to a different order id (rare; used for split / merge operations).",
            "type": {
              "kind": "SCALAR",
              "name": "ID",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Update the catalog product id reference.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productModel",
            "description": "Update the product model snapshot.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productEan",
            "description": "Update the EAN snapshot.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productName",
            "description": "Update the display name shown on the receipt.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Update the unit price charged.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "originalPrice",
            "description": "Update the catalog reference price.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tax",
            "description": "Update the tax rate.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "quantity",
            "description": "Update the quantity ordered.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stockVariants",
            "description": "Update the variant stock-id snapshot.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lineType",
            "description": "Update the line type.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment",
            "description": "Update the line comment.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customOptions",
            "description": "Update the custom-options payload.",
            "type": {
              "kind": "SCALAR",
              "name": "JSON",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderTotal",
        "description": "A single line on the order's totals breakdown — the rendered \"totals\nblock\" at the bottom of an invoice or order detail (Subtotal, Tax,\nShipping, Coupon discount, Grand total). Each row represents one\ncontribution to the final order amount, sorted by sortOrder, and\ncarries the formatted display text the storefront / receipt renders\nverbatim.\n\nMutations don't write to OrderTotal directly: totals are recomputed\nby the order pipeline whenever the underlying lines or coupons change.\nUse this type for read-only reporting and rendering.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the totals entry (orders_total_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this totals row belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Display label shown next to the value (e.g. 'Subtotal', 'Tax 24%', 'Shipping').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "text",
            "description": "Pre-formatted display value rendered next to the title (e.g. '€ 49.90', 'Free'). Includes currency symbol and locale formatting.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "value",
            "description": "Numeric amount in the order's currency. Sum of all rows of class 'Total' equals the order's final amount.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "valueUnreturned",
            "description": "Numeric amount excluding any returned/refunded portion. Equals value when the order has not been partially returned.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "taxRate",
            "description": "Tax rate (percentage) applied to compute taxAmount, when this row represents a taxed total. Null for tax-free totals (e.g. shipping discounts).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "taxAmount",
            "description": "Tax portion of value, in the order's currency. Null when the row is itself a tax line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "class",
            "description": "Total category. Example values seen in production:\n- 'Total': grand total of the order\n- 'Subtotal': line-items subtotal before fees and taxes\n- 'Tax': aggregated tax line (or one row per VAT rate)\n- 'Shipping': shipping cost line\n- 'DiscountCoupon': coupon-applied discount\n- 'Cod': cash-on-delivery surcharge\n- 'ot_klarna_fee', 'ot_collector_invoice_fee', 'ot_kreditor_fin_payment_chg':\n   payment-provider fees\n- 'ot_3for2': 3-for-2 promotional discount\n- 'ot_custom', 'ot_custom_2': tenant-defined custom totals\n\nTenants may extend with additional 'ot_*' modules.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order. Lower values render first; the totals block typically goes Subtotal → Tax → Shipping → Discount → Total.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ServiceDescription",
        "description": "Localized text and SEO metadata for one Service page, in one\nlanguage. Each Service has one ServiceDescription per (service,\nlanguageId) pair — the storefront picks the row matching the active\nlanguage at render time. Carries the visible name, slug-style URL,\nthe rich-text body rendered on the page, and the meta-tags emitted\ninto the page head.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized service / page name shown in navigation and the page header.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Slug-style URL fragment for the page (e.g. 'shipping-and-returns').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "html",
            "description": "Long-form rich-text body rendered on the page. Typically HTML; tenants who run a separate CMS may keep this empty and render from the CMS instead.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaTitle",
            "description": "Localized <title> tag for the page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaDescription",
            "description": "Localized <meta name='description'> for the page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Service",
        "description": "A static-content page in the storefront's CMS layer — typically About\nUs, Shipping & Returns, FAQ, Terms, Contact, or any tenant-defined\ninformational page. Each page lives under one ServiceCategory\n(categoryId) and carries per-page visual / behaviour fields plus a\nServiceDescription per language for the localized copy.\n\nPer-page custom CSS (css) and external script / stylesheet hooks\n(externalJs / externalCss) let tenants customize individual page\nlayouts without touching the storefront theme — useful for marketing\nlanding pages with bespoke visual treatments. The googleFeed flag\ncontrols whether the page surfaces in the Google Merchant feed; the\ndisplayFooter flag controls whether it appears in the storefront's\nfooter link block.\n\nDistinct from the catalog product / category surfaces — services\nhold static content (information pages, policies), not buyable\ngoods. For category-tree navigation see serviceCategories.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the service / page.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categoryId",
            "description": "Id of the parent ServiceCategory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the page hero / illustration image, served from the tenant's service-image directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order within the parent category. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "displayFooter",
            "description": "Whether the page appears in the storefront footer link block. 1 = visible in footer, 0 = not in footer.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "googleFeed",
            "description": "Whether the page is included in the Google Merchant feed. 1 = include, 0 = exclude.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "css",
            "description": "Per-page custom CSS injected into the rendered page. Used to tweak layout for one page without changing the global theme.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "externalJs",
            "description": "External JavaScript URL to load on this page (e.g. a third-party widget script).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "externalCss",
            "description": "External stylesheet URL to load on this page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "svgIcon",
            "description": "Inline SVG markup for the page icon. Stored as SVG source — the storefront drops it directly into the page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptions",
            "description": "Localized name / URL / body / meta rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ServiceDescription",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "category",
            "description": "Resolved parent ServiceCategory, hydrated alongside the service in the same response.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "ServiceCategory",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ServiceCategoryDescription",
        "description": "Localized text and SEO metadata for one ServiceCategory, in one\nlanguage. Each category has one ServiceCategoryDescription per\n(category, languageId) pair — the storefront picks the row matching\nthe active language at render time.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized category name shown in navigation, breadcrumbs, and the page header.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Slug-style URL fragment for the category landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "html",
            "description": "Long-form rich-text body rendered on the category landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ServiceCategory",
        "description": "A grouping of static-content service pages — the top level of the\nstorefront's CMS layer. Holds About-us / Help / Terms / Contact-style\npages organized into a navigation tree (parentId nests categories\nunder each other), with display flags for inclusion in the storefront\nfooter and per-language description rows for the localized copy.\n\nDistinct from category (the product-catalog category tree) — service\ncategories are CMS pages, while categories group products. For the\nindividual service / page records living under each category, see\nthe services query.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the service category.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "parentId",
            "description": "Id of the parent category, or 0 for top-level categories.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order within the parent category. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "displayFooter",
            "description": "Whether the category appears in the storefront footer navigation. 1 = visible in the footer, 0 = navigation-only (not in footer).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "svgIcon",
            "description": "Inline SVG markup for the category icon. Stored as the SVG source rather than a filename — the storefront drops it directly into the page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptions",
            "description": "Localized name / URL / body rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ServiceCategoryDescription",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "children",
            "description": "Child categories nested under this one. Empty for leaf categories.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ServiceCategory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ReviewDetail",
        "description": "Localized text for one Review, in one language. A review can have\nmultiple ReviewDetail rows (one per language) when the storefront\nsupports translated review bodies; carries the localized title, the\nbody text, and the optional vendor reply.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query). Null on tenants that don't localize reviews.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Review headline shown above the body.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "detail",
            "description": "Long-form review body (rich or plain text depending on the tenant's input field).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "answer",
            "description": "Vendor reply published below the customer's body. Null when the vendor hasn't responded.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ReviewDates",
        "description": "Date metadata for a Review. Captured at submission, optionally at\nvendor-reply time, and a snapshot of the order date when the review\nis tied to a verified purchase. Returned as a nested object so the\nthree timestamps can be hydrated together without flattening into\nthe parent Review type.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "createdAt",
            "description": "Timestamp the review was submitted.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderDate",
            "description": "Order date the review references when the reviewer is a verified buyer. Null for non-verified reviews.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "answerDate",
            "description": "Timestamp the vendor reply was posted. Null when there's no reply yet.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Review",
        "description": "A customer review of a product, with optional vendor reply via\nReviewDetail.answer. Reviews progress through a moderation lifecycle\n(statusId / statusCode) before they're published — typical states\nare pending → approved (visible) or rejected (hidden). Verified-buyer\nflagging is automatic: the platform sets verifiedBuyer = true when\nthe reviewer's customer id is found on a previous order for the same\nproduct.\n\nUsed to render product detail page review widgets, the per-product\nreview carousels in product cards, and the admin moderation queue.\nAggregate scores (count of approved reviews + average rating) are\nexposed via reviewSummaries.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the review.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product the review is about.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Reviewer's customer id. Null for guest / unauthenticated reviews.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "nickname",
            "description": "Public display name shown alongside the review (the reviewer's chosen handle).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "country",
            "description": "Reviewer's country at submission time (typically a 2-letter ISO code). Used for region-aware moderation and aggregate filtering.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isRecommended",
            "description": "Whether the reviewer would recommend the product to others. Optional star-recommendation flag captured alongside the rating.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "verifiedBuyer",
            "description": "Whether the reviewer is a verified purchaser. Auto-set when the reviewer's customer id is found on a previous order for the product.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "count",
            "description": "Tenant-defined counter on the review row. Semantics vary across tenants — most commonly 'helpful votes' in production, but treated as opaque by core code.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusId",
            "description": "Numeric moderation status. Resolve to a stable string code via statusCode; the platform's canonical lifecycle is pending → approved → rejected.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "statusCode",
            "description": "Stable internal moderation status code (e.g. 'pending', 'approved', 'rejected'). Use this for routing rules rather than statusId, which may collide across tenants.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dates",
            "description": "Submission / vendor-reply / order-date timestamps.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "ReviewDates",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "details",
            "description": "Localized title / body / answer rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "ReviewDetail",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ReviewSummary",
        "description": "Aggregate review metrics for one product. Recomputed by the review\npipeline whenever a review's moderation state flips into / out of\n'approved' so the storefront can render review counts and average\nstar ratings without scanning all reviews on every page render.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "productId",
            "description": "Product the metrics aggregate over.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reviewsCount",
            "description": "Total count of approved reviews for this product.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ratingSummary",
            "description": "Aggregate star rating on a 1–5 scale. Stored as int; the storefront formats fractional stars from this aggregate as needed.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "BannerHistory",
        "description": "Lifetime impression / click totals for one banner. Aggregated across all\nhistory rows for the banner. For a per-day breakdown (e.g. to render a\nperformance chart) see Banner.historyByDate, which buckets the same\nunderlying banners_history rows by day.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "impressions",
            "description": "Total impressions across the banner's full history.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "clicks",
            "description": "Total clicks across the banner's full history.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Banner",
        "description": "A storefront banner — a clickable promotional image rendered in a\nbanner zone (homepage hero, sidebar, category banner, etc.). Each banner\nbelongs to one group, links to a landing URL, and tracks impressions\nand clicks for performance reporting.\n\nUse the banners query to enumerate every banner the tenant has defined,\nbannersByGroup to fetch only the banners in one zone, and the\nBanner.historyByDate field for daily click / impression series.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the banner (banners_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "title",
            "description": "Display title used as the banner's accessible label and admin-side identifier.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Destination URL the banner links to when clicked.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "group",
            "description": "Free-form group code identifying which storefront zone the banner belongs to (e.g. 'home', 'sidebar', 'category-1'). Tenants define their own groups.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Visibility flag stored as int. 1 = active (rendered on the storefront); 0 = inactive (hidden but kept for history).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the banner image, served from the tenant's banner-image directory. Null when the banner is text-only.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "history",
            "description": "Lifetime impression and click totals for this banner.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "BannerHistory",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "historyByDate",
            "description": "Per-day impression and click history for this banner, newest day\nfirst. Pass startDate / endDate to bracket the chart window — the\nunderlying query truncates banners_history_date to a date and groups\nrows by day, so partial days at the edge of the window count\ncorrectly.",
            "args": [
              {
                "name": "startDate",
                "description": "Inclusive lower bound on the banner-history date. ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "endDate",
                "description": "Inclusive upper bound on the banner-history date. ISO-8601 date.",
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "limit",
                "description": "Maximum number of day-buckets to return.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              },
              {
                "name": "offset",
                "description": "Offset for pagination across day-buckets.",
                "type": {
                  "kind": "SCALAR",
                  "name": "Int",
                  "ofType": null
                },
                "defaultValue": null,
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "BannerHistoryEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "FaqCategoryDescription",
        "description": "Localized text and SEO metadata for one FAQ category, in one language.\nEach FaqCategory has one FaqCategoryDescription per (category,\nlanguageId) pair — the storefront picks the row matching the active\nlanguage at render time. Carries the visible name, the slug-style\nURL fragment, the long category description, and the SEO meta-tags\nemitted into the FAQ landing page head.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Localized category name shown in the FAQ navigation and page header.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Slug-style URL fragment for the category landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Long-form category description shown above the question list.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaTitle",
            "description": "Localized <title> tag for the category landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaDescription",
            "description": "Localized <meta name='description'> for the category landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "FaqQuestionDescription",
        "description": "Localized text and SEO metadata for one FAQ question, in one language.\nEach FaqQuestion has one FaqQuestionDescription per (question,\nlanguageId) pair. Carries the question itself, the long answer, an\noptional shortAnswer used in collapsed / preview surfaces, the\nper-question slug, and SEO meta-tags emitted when the question gets\nits own landing page (gated by FaqQuestion.enableUrl).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "languageId",
            "description": "Language id this row is for.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "question",
            "description": "The question text shown to shoppers.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "answer",
            "description": "Long-form answer body. Typically rich text.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "shortAnswer",
            "description": "Short answer used in collapsed / accordion surfaces and in card previews.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "url",
            "description": "Slug-style URL fragment for the per-question landing page (used when enableUrl = 1). Looked up by the faqQuestion(slug:) query.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaTitle",
            "description": "Localized <title> tag for the per-question landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaDescription",
            "description": "Localized <meta name='description'> for the per-question landing page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "FaqQuestion",
        "description": "One FAQ entry — a question with one or more localized answers. Lives\nunder one or more FaqCategory parents (the categories array makes the\nquestion-to-category relationship many-to-many via the\nfaq_to_category bridge), and can optionally surface as its own SEO\nlanding page (when enableUrl = 1, the question's slug from\nFaqQuestionDescription.url becomes routable).\n\nUsed to render the storefront's help center, accordion-style FAQ\nblocks on product / category pages, and AI-assistant grounding (the\nsame content frequently feeds the chat widget's vector store, see\nDomain.openaiVectorStoreId).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the question.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Optional illustration filename, served from the tenant's FAQ-image directory.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order within each parent category. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "visibility",
            "description": "Visibility flag. 1 = visible on the storefront; 0 = hidden (kept for editing without going live).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "googleIndex",
            "description": "Search-engine indexability flag for the per-question landing page. 1 = indexable, 0 = noindex.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "enableUrl",
            "description": "Whether the question gets its own SEO landing page at the slug captured in FaqQuestionDescription.url. 1 = enabled, 0 = the question only renders inside category pages.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categories",
            "description": "Parent category ids — many-to-many. One question can live under multiple FAQ categories.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptions",
            "description": "Localized question / answer rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "FaqQuestionDescription",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "FaqCategory",
        "description": "A grouping of FAQ questions — the top level of the help-center tree.\nEach FaqCategory carries display assets (icon, image), visibility /\nSEO flags, sort order, and a localized FaqCategoryDescription per\nlanguage. The questions field is hydrated when the parent\nfaqCategories query is called with the appropriate filters\n(visibleOnly / includeHiddenQuestions / sortByOrder shape what it\ncontains).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the category.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "icon",
            "description": "Filename of the category icon (small inline glyph).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "image",
            "description": "Filename of the category hero image.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "visibility",
            "description": "Visibility flag. 1 = visible on the storefront; 0 = hidden.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "googleIndex",
            "description": "Search-engine indexability flag for the category landing page. 1 = indexable, 0 = noindex.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display sort order. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "descriptions",
            "description": "Localized name / URL / description / SEO rows, one per language.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "FaqCategoryDescription",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "questions",
            "description": "Questions belonging to this category, hydrated from the faq_to_category bridge. Ordered by question sortOrder when sortByOrder is true on the query, otherwise by id.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "FaqQuestion",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerGroupDynamicDiscount",
        "description": "One dynamic-discount tier inside a customer group. Dynamic discounts\napply at the basket / catalogue level on top of the group's base\ndiscount, gated by manufacturer / category / date window — letting\ntenants run group-scoped promotions like 'Members get an extra 10 €\noff Brand X this month' without rewriting the group's main discount.\n\nDistinct from CustomerGroupPriceRule — that surface fixes a specific\nproduct's price for the group, while dynamic discounts apply across\nwhole product slices defined by manufacturer / category.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the dynamic-discount entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "groupId",
            "description": "Id of the parent customer group this discount applies to.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "amount",
            "description": "Discount amount, in the tenant's default currency (not a percentage).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateStart",
            "description": "Inclusive lower bound on when the discount is active. Null = no lower bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateEnd",
            "description": "Inclusive upper bound on when the discount is active. Null = no upper bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "manufacturer",
            "description": "Manufacturer code / id this discount is scoped to. Null = applies across all manufacturers.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "category",
            "description": "Category code / id this discount is scoped to. Null = applies across all categories.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sort",
            "description": "Display sort order when the admin UI lists multiple dynamic-discount rows on a group.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerGroupPriceRule",
        "description": "One product-level price override inside a customer group. Replaces the\nproduct's regular price with rule_price for members of the group when\nthe rule is active (validFrom / validTo bracket). Used to run wholesale\n/ contract pricing where individual products carry hand-set prices for\na group, not a percentage off the regular price.\n\nFor variant-level overrides, productStockId points at one variant in\nproducts_stock; null means the override applies to the product as a\nwhole. For percentage / formula-based group discounts see\nCustomerGroup.discountAmount + discountType; for cross-group lookup\nsee customerGroupPriceList.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the price rule.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "groupId",
            "description": "Id of the parent customer group this rule applies to.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product the rule overrides the price of.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productStockId",
            "description": "Variant (products_stock_id) the rule scopes to. Null = applies to the product as a whole, regardless of variant.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": "Replacement price for the product / variant, in the tenant's default currency. Replaces the product's regular price for members of the group.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "validFrom",
            "description": "Inclusive lower bound on when the rule is active. Null = no lower bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "validTo",
            "description": "Inclusive upper bound on when the rule is active. Null = no upper bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerGroup",
            "description": "Resolved parent customer group, fetched on demand when the field is selected. Lets one round-trip pull a price-rule plus the group it belongs to (description, discount type, validity window).",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "CustomerGroup",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "product",
            "description": "Resolved product the rule applies to, fetched on demand when the field is selected. Returns the product's name / model / image / base price for surface display alongside the rule.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "Product",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerGroup",
        "description": "A pricing / discount scheme applied to a slice of customers — a B2B\ntier, a wholesale partner channel, a loyalty group, etc. Customers\nbelong to zero or more groups (via Customer.group, JSON-array of group\nids), and the storefront / pricing engine layers the group's discount,\nper-product price-list rules, and dynamic-discount tiers on top of\neach shopper's regular price.\n\nCarries the headline-level configuration (discount amount + type, B2B\n/ consumer gating via customerType, validity window) plus the two\nsub-collections that hang off it: priceList (per-product overrides)\nand dynamicDiscounts (manufacturer / category-scoped extras).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the customer group (groups_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": "Display description of the group, shown to admins (e.g. 'Wholesale tier 1', 'Loyalty members').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountAmount",
            "description": "Discount amount, interpreted via discountType (currency or percent depending on type).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountType",
            "description": "How discountAmount is applied. Example values:\n- 'fixed' — currency amount off the product price\n- 'percent' — percentage off the product price\n- 'shipping' — applies as a shipping subsidy / free-shipping flag",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateStart",
            "description": "Inclusive lower bound on when the group's discount is active. Null = no lower bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateEnd",
            "description": "Inclusive upper bound on when the group's discount is active. Null = no upper bound.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "minOrder",
            "description": "Minimum order value the basket must reach before the group's discount applies. 0 = no threshold.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "minOrderType",
            "description": "How minOrder is interpreted. Example values:\n- 'price' — basket value in the tenant's default currency\n- 'quantity' — total item count in the basket",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerType",
            "description": "Customer-type gate. The customerGroups resolver also reads the\nrequest's X-Customer-Type header and only returns groups whose\ncustomerType matches 'all' or the header value. Example values:\n- 'all' — applies to every customer\n- 'vatid' — B2B / VAT-id-bearing customers only\n- 'regular' — consumer accounts (no VAT id) only",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountedProducts",
            "description": "Count of products that have a CustomerGroupPriceRule against this group. A precomputed convenience for the admin's group editor — no need to count rule rows separately.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "groupsType",
            "description": "Group-shape classifier — how the group's discount is structured.\nExample values:\n- 'fixed' — single discountAmount applied across the group\n- 'dynamic' — discount comes from CustomerGroupDynamicDiscount tiers\n- 'matrix' — manufacturer × category matrix of discounts\n- 'list' — per-product CustomerGroupPriceRule overrides",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dynamicDiscounts",
            "description": "Dynamic-discount tiers attached to the group. Empty when the group doesn't run dynamic discounts.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomerGroupDynamicDiscount",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "priceList",
            "description": "Per-product price overrides for the group. Empty when the group doesn't run a price list.",
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "CustomerGroupPriceRule",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerHistoryEntry",
        "description": "An audit-log entry recording one field-level change to a customer\nrecord (or to one of its address-book / customer-info side-tables).\nThe customers_history table is generic enough to capture edits across\nmultiple source tables — sourceTable identifies which table the row\noriginated from, fieldName / oldValue / newValue capture the diff,\nand the userId / userName columns attribute the edit to the admin\nwho made it.\n\nUsed by the admin's customer detail view's history tab, by GDPR /\ndata-subject-access reports, and by any after-the-fact investigation\n('who changed this customer's email last week?'). For the broader\ncross-module audit log see actionRecorderEntries; for product-level\nedits see adminTrackingCreate; this surface is the\ncustomer-record-specific change log.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the history entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer the change was made on.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressBookId",
            "description": "Address-book row id when the change was on an address row. Null when the change was on the customer record itself or on a non-address side-table.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userId",
            "description": "Id of the admin who made the change.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Username of the admin, captured at write time so the row stays readable if the admin is later deleted.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sourceTable",
            "description": "Source table the changed row belongs to. Example values seen in code:\n- 'customers' — top-level customer record\n- 'address_book' — one of the customer's saved addresses\n- 'customers_info' — activity-stats sidecar (login counters, etc.)\nTenants may extend; treat as free-form code rather than a fixed enum.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "fieldName",
            "description": "Column name within sourceTable that changed (e.g. 'customers_email_address', 'entry_postcode').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "oldValue",
            "description": "Value before the change. Null when the field was previously empty.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "newValue",
            "description": "Value after the change. Null when the field was cleared.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "page",
            "description": "Admin-page path that made the change (e.g. '/admin/customers/edit'). Useful for tracing which UI flow caused the edit.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the change was recorded.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomersApiCustomer",
        "description": "An ERP-mirrored snapshot of one customer record. The customers_api\ntable caches the customer master data the tenant's ERP owns —\nNetvisor / Lemonsoft / Tehden / SAP / Tisma depending on the tenant —\nso the storefront and admin can reference contract-side identifiers,\npayment terms, credit limits, sales codes, and discount-group\nassignments without round-tripping to the ERP for every read.\n\nThe Finnish-language column names (asiakaskoodi = customer code,\nalennusryhma = discount group, ytunnus = business id) reflect the\nFinnish-ERP origin of the schema; the table is read-only from the\nGraphQL surface — the writer is an async ERP-side sync job that\npushes updates into this cache as the source-of-truth ERP changes.\n\nFor the platform-side customer record (logins, addresses, orders,\ngroup membership), see Customer / customers. customersApi is the\nERP-shaped counterpart, joined on the asiakaskoodi key.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "asiakaskoodi",
            "description": "ERP-side primary customer code (Finnish 'asiakaskoodi'). The stable join key into the platform-side Customer.apiId.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": "Primary recipient name as stored in the ERP.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "secondaryName",
            "description": "Secondary name line — typically a contact person, department, or 'attention to' line in the ERP.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressLine1",
            "description": "First street-address line (ERP shipping/main address).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressLine2",
            "description": "Second street-address line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressLine3",
            "description": "Third street-address line — typically postcode + city in the ERP convention.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryName1",
            "description": "First delivery-address line — separate from the main address when ERP tracks ship-to and bill-to as different parties.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryName2",
            "description": "Second delivery-address line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryName3",
            "description": "Third delivery-address line.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCustomerId",
            "description": "ERP id of the billing customer when this record is a delivery sub-account that bills to a parent customer.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentTerm",
            "description": "ERP-defined payment-term code (e.g. 'NET14', 'NET30'). Drives invoice due-date calculation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerGroup",
            "description": "ERP customer-group code (e.g. wholesale tier, regional segment). Used by the storefront pricing engine when mirrored into platform-side customer groups.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "chain",
            "description": "ERP chain / parent-group code when the customer belongs to a chain account.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "salesCode",
            "description": "ERP-side sales-code / sales-rep id (the salesperson responsible for the account).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "creditLimit",
            "description": "Credit limit set in the ERP, in the customer's currency. Stored as a string because the ERP may format it (e.g. '10000.00').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryBlock",
            "description": "ERP delivery-block code. When set, the ERP has flagged this customer as not-to-be-delivered (e.g. for outstanding invoices).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "email",
            "description": "ERP-side primary email.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "website",
            "description": "ERP-side website / URL.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "phone",
            "description": "ERP-side phone number.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "fax",
            "description": "ERP-side fax number (legacy field; rarely populated on modern accounts).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deliveryMethod",
            "description": "ERP delivery-method code (e.g. 'pickup', 'parcel', 'truck'). Maps to a shipping module on the storefront.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountGroup",
            "description": "ERP discount-group code ('alennusryhma'). The pricing engine looks up the discount percentage by this code.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountPercent",
            "description": "Discount percentage from the ERP for this customer (the customer-level baseline, before group / contract overrides).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "secondaryDiscountPercent",
            "description": "Secondary discount percentage. ERPs commonly use this for stacking a category-level or campaign-level discount on top of the primary discount.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageCode",
            "description": "ERP-side language code (e.g. 'fi', 'sv', 'en'). Used to localize ERP-generated documents (invoices, packing slips).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment1",
            "description": "First free-form ERP comment field. Tenant-defined notes.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comment2",
            "description": "Second free-form ERP comment field.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "contactPerson",
            "description": "Primary contact-person name on the customer record.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "contactPersonId",
            "description": "Primary contact-person id (ERP-side reference into a contacts table).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastLoginAt",
            "description": "Timestamp of the customer's most recent storefront login, mirrored back into the ERP cache.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatLiability",
            "description": "VAT-liability code from the ERP (e.g. 'standard', 'reverse-charge', 'exempt'). Drives tax behaviour on invoices.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currency",
            "description": "ERP-side default currency code for the customer (ISO 4217).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "modifiedAt",
            "description": "Timestamp of the most recent ERP-side edit to the record.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "businessId",
            "description": "Business id (Finnish 'ytunnus' / VAT number). Used for B2B invoicing and EU VAT validation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingAddress",
            "description": "Default invoice address line stored on the ERP record.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "intermediaryService",
            "description": "E-invoice intermediary / operator code ('valityspalvelu' in Finnish e-invoicing). Names the operator routing the customer's e-invoices.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "netvisorKey",
            "description": "Netvisor-side customer key (Finnish ERP integration). Used to look up the customer in Netvisor's API; 0 / null for customers not mirrored from Netvisor.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "BrowseHistory",
        "description": "One page-view captured by the storefront's browse-history tracker.\nEvery product, category, manufacturer, and search-result page rendered\nby the storefront writes a row here with the visiting session's key\n(so anonymous and logged-in journeys can both be reconstructed), the\nentity that was viewed, page-load timing, geo-IP country, and any\nvariant filters that were active.\n\nUsed to power 'Recently viewed' on the storefront, internal-search\nanalytics, conversion-funnel reporting, and the homepage's top-picks\ncuration. Distinct from actionRecorderEntries — this surface tracks\nvisitor browsing for product / merchandising analytics, while the\naction recorder tracks admin and auth events for security audit.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the page-view entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer id when the visitor was logged in. Null for anonymous visitors — the sessionKey still threads their journey across pages.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionKey",
            "description": "Storefront session key that ties together page views from one browser session, even before login.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "loadTimeMsec",
            "description": "Server-side page-load time in milliseconds, captured at write time. Used for performance regression tracking.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "categoryId",
            "description": "Category id when the page-view was a category listing. Null when the visitor wasn't on a category page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product id when the page-view was a product detail page. Null when the visitor wasn't on a product page.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "manufacturerId",
            "description": "Manufacturer id when the page-view was filtered by a manufacturer. Null when no manufacturer filter was active.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "color",
            "description": "Color filter active on the page (option-value id from products_options_values). 0 / null when no color filter was applied.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "size",
            "description": "Size filter active on the page (option-value id from products_options_values). 0 / null when no size filter was applied.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "geoipCountry",
            "description": "Two-letter geo-IP country code resolved at request time (e.g. 'FI', 'US'). Useful for regional behaviour analytics.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ipAddress",
            "description": "Visitor IP address at the time of the page view. Captured for fraud / abuse forensics.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "date",
            "description": "Server timestamp of the page view.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "timestamp",
            "description": "Unix timestamp of the page view (seconds since epoch). Mirrors the date field in epoch form for time-series analysis.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "topPicks",
            "description": "Whether this page view was rendered from the storefront's curated 'top picks' surface (homepage hero / featured area) rather than a regular browse path. Used to attribute conversions back to merchandising decisions.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "keywords",
            "description": "Search-keywords slot on the row. In practice usually empty / null on browse_history rows — internal-search keyword logging lives in the dedicated searched_keywords table. Kept on this surface for legacy-compat callers.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "BillingAddress",
        "description": "A standalone billing-address entry belonging to a customer. Distinct\nfrom AddressBook — that surface holds shipping addresses with optional\nalternate billing fields per row, while BillingAddress is a dedicated\ninvoice-recipient book customers can populate independently of where\nthey ship.\n\nUsed primarily for B2B accounts that need multiple invoice recipients\n(e.g. an organization with several cost centres / departments billed\nseparately) without dragging a shipping address along. The fields\nmirror the billing_* half of AddressBook plus the e-invoice routing\nfields used in Finnish / Nordic invoicing.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the billing-address entry (billing_address_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer this billing address belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "Recipient first name on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Recipient last name on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": "Zone id on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": "VAT / business id printed on the invoice. Required for B2B invoices in EU jurisdictions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "operatorId",
            "description": "E-invoice operator id (Finnish Verkkolasku operator). Used for routing electronic invoices through an operator.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "invoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI). Paired with operatorId for e-invoice delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reference",
            "description": "Free-form reference / PO number to print on the invoice.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "referenceRequired",
            "description": "Whether this billing address requires a non-empty reference at checkout. The storefront enforces the flag before letting the order through.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "SCALAR",
        "name": "JSON",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ApiProcessJob",
        "description": "A job queued for an outbound third-party API call — typically an ERP\n/ PIM / marketplace synchronisation push (Netvisor / Lemonsoft /\nAkeneo / shipping-carrier APIs). The platform writes a row here\nwhenever it needs to dispatch a request to an external system, and\na worker drains the queue and replays each job against its target.\nSuccessful jobs leave error null; failed jobs capture the error for\nretry / inspection.\n\nUse this surface to inspect the queue from admin tooling and oncall\nrunbooks ('what's stuck?'), to reconcile against external system\nstatus, and to filter to specific failure modes via the status\nargument.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the queued job.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "jobId",
            "description": "Worker-side job id when the worker assigns one. Null until the worker picks the row up.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "api",
            "description": "Identifier of the target third-party API (e.g. 'netvisor', 'lemonsoft', 'akeneo', 'tisma').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "endpoint",
            "description": "API endpoint or path the job will invoke (e.g. '/customer.nv', '/products').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "method",
            "description": "HTTP method to use (typically 'POST' or 'PUT'). Null for non-HTTP integrations.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "data",
            "description": "Request payload to send, as JSON. The worker serializes this to the wire format the target API expects.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "JSON",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "createdAt",
            "description": "Timestamp the job was queued.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "error",
            "description": "Error text from the most recent attempt; null while the job has not failed.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Computed status derived from the error column:\n- 'queued': job has not failed (error is null) — pending or successfully processed\n- 'failed': last attempt produced an error",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "AddressBook",
        "description": "An address-book entry belonging to a customer. Holds the shipping address\nin the entry_* columns plus an optional alternate billing address in the\nbilling_* columns of the same row — a customer who ships to one address\nbut invoices to another (common for B2B accounts) keeps both halves\ntogether here.\n\nWhen the billing_* fields are null/empty, billing falls back to the\nshipping side. For a customer's standalone list of billing-only\naddresses (multiple invoice recipients without a paired shipping\naddress), see billingAddresses, which reads from a separate\nbilling_address_book table.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the address-book entry (address_book_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer this address belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "gender",
            "description": "Salutation / gender code for the recipient (e.g. 'm', 'f'). Tenant-defined; many tenants leave this null.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name on the shipping side. Set when the address is a business delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "Recipient first name on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Recipient last name on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address line on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": "VAT / business id on the shipping side. Captured for B2B shipping documents.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City on the shipping side.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region on the shipping side. Used in countries that need it (e.g. US, AU).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id on the shipping side. Resolves against the countries query.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": "Zone id on the shipping side. Resolves against the country's zones table.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form delivery instructions captured at address creation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingStreetAddress",
            "description": "Alternate billing-side street address. Null means billing uses the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingFirstname",
            "description": "Alternate billing first name. Null means billing uses the shipping side.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingLastname",
            "description": "Alternate billing last name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingPostcode",
            "description": "Alternate billing postcode.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCity",
            "description": "Alternate billing city.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCountryId",
            "description": "Alternate billing country id (string-typed in this surface, vs. shipping which is int).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingCompany",
            "description": "Alternate billing company name.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingVatid",
            "description": "Alternate billing VAT / business id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingZoneId",
            "description": "Alternate billing zone id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingState",
            "description": "Alternate billing state / region.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingOperatorId",
            "description": "E-invoice operator id (Finnish OVT / Verkkolasku operator). Used when invoices are routed via an e-invoicing operator.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingInvoiceAddress",
            "description": "E-invoice address (Finnish OVT-tunnus / EDI). Used together with billingOperatorId for e-invoice routing.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReference",
            "description": "Free-form reference / PO number to print on the invoice (e.g. 'PO #1234').",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "billingReferenceRequired",
            "description": "Whether the tenant flags this address as requiring a reference at checkout. true = the storefront enforces a non-empty reference before letting the order through.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "Domain",
        "description": "One storefront-domain configuration row. Tenants run multi-domain\nsetups where each domain is bound to a language (e.g. shop.example.fi\nfor Finnish, shop.example.se for Swedish, shop.example.com for\nEnglish) — this surface holds the per-domain wiring that ties one\nhostname to its language id, hreflang, default flag icon, and the\nfull set of marketing-pixel ids the storefront should render in\nthe page head.\n\nCarries:\n- language wiring: languageId, code, hreflang, cctld, flag, sortOrder\n- WordPress companion-blog link: wpDomain\n- per-domain AI assistant config: openaiChatInstructions / openaiVectorStoreId / openaiChatAssistantId\n- marketing-pixel ids: Google / Adwords / Meta / TikTok / Microsoft Ads / Pinterest / MS Clarity / Hotjar\n\nOnly domains with status = 1 are returned by the resolver. The\nmarketing-pixel and AI fields are tenant-configured per domain so\none storefront's analytics / chat assistant can differ between\nlanguage variants.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the domain entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "languageId",
            "description": "Storefront language id this domain serves (resolves against the languages query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "code",
            "description": "Short language code (e.g. 'fi', 'sv', 'en'). Also the value compared by the domains(locale:) query argument.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "hreflang",
            "description": "Hreflang attribute emitted in <link rel='alternate'> tags (e.g. 'fi-FI', 'en-GB'). Used by search engines to map language variants of the same content.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "domain",
            "description": "Full domain name the storefront serves on (e.g. 'shop.example.fi').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "cctld",
            "description": "Country-code top-level domain extracted from the domain (e.g. '.fi', '.se'). Used for storefront-side display and country detection.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "flag",
            "description": "Filename of the flag icon shown in the language switcher (served from the tenant's flag-image directory).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sortOrder",
            "description": "Display order of the domain in the language switcher. Lower values render first.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "googlePixel",
            "description": "Google Analytics measurement id (e.g. 'G-XXXXXXXX'). Rendered into the storefront's analytics tag.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "googleApiSecret",
            "description": "Google Analytics Measurement Protocol API secret. Used for server-side event posting.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adwordsPixel",
            "description": "Google Ads conversion-tracking id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adwordsPhone",
            "description": "Google Ads conversion label for phone-call conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adwordsPurchase",
            "description": "Google Ads conversion label for purchase conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adwordsContact",
            "description": "Google Ads conversion label for contact-form conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "adwordsQuote",
            "description": "Google Ads conversion label for quote-request conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaPixel",
            "description": "Meta (Facebook) Pixel id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "metaApiSecret",
            "description": "Meta Conversions API access token, paired with metaPixel for server-side event posting.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tiktokPixel",
            "description": "TikTok Pixel id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "tiktokApiSecret",
            "description": "TikTok Events API access token.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msAdsPixel",
            "description": "Microsoft Ads (Bing) UET tag id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msAdsPhone",
            "description": "Microsoft Ads goal id for phone-call conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msAdsContact",
            "description": "Microsoft Ads goal id for contact-form conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msAdsPurchase",
            "description": "Microsoft Ads goal id for purchase conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msAdsQuote",
            "description": "Microsoft Ads goal id for quote-request conversions.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "pinterestPixel",
            "description": "Pinterest Tag id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "msClarityPixel",
            "description": "Microsoft Clarity project id (session-replay analytics).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "hotjarPixel",
            "description": "Hotjar site id.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "wpDomain",
            "description": "Hostname of the WordPress companion site bound to this domain (e.g. blog / news subdomain). Null when the domain has no WP companion.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "openaiChatInstructions",
            "description": "System-prompt / instructions for the per-domain OpenAI chat assistant rendered on the storefront. Tenants tune this to set the assistant's tone and storefront-specific context.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "openaiVectorStoreId",
            "description": "OpenAI vector-store id holding the domain-specific knowledge corpus the assistant retrieves from.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "openaiChatAssistantId",
            "description": "OpenAI assistant id bound to this domain (for the storefront chat widget).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "DeliveryAddress",
        "description": "A delivery-address entry belonging to a customer, stored in the modern\ndelivery_address_book table. Used by tenants who've migrated to the\nnewer split-address schema where shipping (delivery) and billing live\nin separate dedicated tables — distinct from AddressBook, which holds\nshipping with optional alternate-billing fields in one row, and from\nBillingAddress, which holds standalone invoice recipients.\n\nRows can carry a legacyAddressBookId pointing back to the original\naddress_book row this delivery entry was migrated from; pass\nincludeLegacy=true on the query to side-load the original AddressBook\n(with its billing fields) alongside the modern delivery row in the\nsame response — useful while the migration is in flight.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the delivery-address entry (delivery_address_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer this delivery address belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "gender",
            "description": "Salutation / gender code on the recipient.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "company",
            "description": "Company name on the recipient. Set when the address is a business delivery.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "firstname",
            "description": "Recipient first name.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastname",
            "description": "Recipient last name.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "streetAddress",
            "description": "Street address line.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "vatid",
            "description": "VAT / business id captured for B2B shipping documents.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "postcode",
            "description": "Postal code.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "city",
            "description": "City.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "state",
            "description": "State / region. Used in countries that need it (US, AU, etc.).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "countryId",
            "description": "Country id (resolves against the countries query).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "zoneId",
            "description": "Zone id within the country.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "comments",
            "description": "Free-form delivery instructions captured at address creation.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "legacyAddressBookId",
            "description": "Pointer to the legacy address_book row this delivery entry was migrated from. Null when the row was created directly in the modern delivery_address_book.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "legacyAddress",
            "description": "Resolved legacy AddressBook (with billing fields), populated only when the query is called with includeLegacy=true and legacyAddressBookId is set. Useful while the dual-write migration is still in flight.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "AddressBook",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "BannerHistoryEntry",
        "description": "One day's aggregated impression and click counts for a single banner.\nThe banners_history table stores per-event rows that the resolver groups\nby DATE(banners_history_date) and sums into these per-day buckets.\n\nUsed to drive performance charts in the admin banner editor (line / bar\nchart of clicks-per-day) and to power CTR reporting. For lifetime totals\nsee Banner.history; this surface is the day-by-day breakdown.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "bannerId",
            "description": "Banner the day's stats belong to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "date",
            "description": "Date the bucket aggregates (DATE-truncated, no time component).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "impressions",
            "description": "Sum of banners_shown across the day for this banner.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "clicks",
            "description": "Sum of banners_clicked across the day for this banner.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "BankPayment",
        "description": "An incoming bank-transfer settlement matched to one order. Tenants that\naccept payment via invoice / bank wire reconcile their bank statement\nfeed (typically SEPA / Finvoice for Finnish operators) into bank_payments\nrows so the admin's invoice tab and any ERP reconciliation report can\nshow 'this order has been paid, on this date, in this amount'.\n\nDistinct from the gateway-specific payment surfaces (ordersNets,\nordersVivawallet) — those carry the provider-side transaction state for\ncard / mobile-wallet payments. bankPayments is for plain bank-transfer\nreconciliation against incoming statement lines.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Bank transaction id (varchar primary key, captured from the bank statement feed).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this transfer settles.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "invoicePaymentDate",
            "description": "Bank-statement posting date — the date the transfer appeared on the tenant's bank statement.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "invoicePaymentValueDate",
            "description": "Settlement / value date — when the funds are actually available, used for cash-flow reconciliation timing.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "amount",
            "description": "Amount received, in the tenant's default currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderNetsNotification",
        "description": "A payment notification from the Nets payment service for one order.\nCaptured by the storefront's webhook handler (or the admin's manual\nreconcile flow) for every callback Nets sends — authorization\ncallbacks, settlement notifications, refunds, and error events.\n\nThe table is keyed by ordersPaytrailId (a Nets-provided session id\nthat pre-dates the rename from Paytrail to Nets), with notificationId\ndistinguishing successive callbacks for the same session. Use this\ntype for reconciliation against Nets settlement reports and for\ndiagnosing failed payments. Available only on tenants whose payment\nintegration is Nets; other tenants will not have rows for these\nfields.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "ordersPaytrailId",
            "description": "Nets-side session/order id (legacy 'paytrail' name retained for backwards compatibility). Primary key on the orders_nets table.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer the originating order belongs to (denormalised from orders.customers_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "notificationId",
            "description": "Sequence number distinguishing successive notifications for the same ordersPaytrailId (e.g. 1 = authorization, 2 = settlement, 3 = refund).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionId",
            "description": "Browser session id captured at checkout. Useful for correlating with storefront analytics.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "transactionId",
            "description": "Nets transaction id returned by the provider. Used for reconciliation against Nets reports.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stamp",
            "description": "Provider-side stamp/timestamp value captured from the webhook payload.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reference",
            "description": "Provider-side reference token (Nets-supplied) for this notification, used for reconciliation against settlement reports.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "amount",
            "description": "Amount this notification covers, in the smallest currency unit (e.g. cents). May be the full order amount, a partial refund, or zero for status-only callbacks.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "error",
            "description": "Error code or message from the provider when this notification represents a failed event. Null for successful events.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "OrdersNetsNotificationInput",
        "description": "Input shape for upsertOrdersNetsNotification — every field that Nets supplies on a callback can be persisted here.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "ordersPaytrailId",
            "description": "Nets-side session/order id (primary key).",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer the originating order belongs to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "notificationId",
            "description": "Sequence number for successive notifications on the same session.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionId",
            "description": "Browser session id captured at checkout.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "transactionId",
            "description": "Nets transaction id returned by the provider.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "stamp",
            "description": "Provider-side stamp value from the webhook.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reference",
            "description": "Provider-side reference token captured from the Nets webhook payload.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "amount",
            "description": "Amount in the smallest currency unit.",
            "type": {
              "kind": "SCALAR",
              "name": "Float",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "error",
            "description": "Error code/message; pass null on successful events.",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "OrderVivawalletPayment",
        "description": "A payment record from the Viva Wallet (Vivawallet) payment service\nfor one order. Captured when the shopper completes payment through\nany of the Vivawallet-hosted methods (cards, Klarna, PayPal, Apple\nPay, Google Pay) and returned for reconciliation against Vivawallet's\nmerchant reports.\n\nAvailable only on tenants whose payment integration is Vivawallet.\nThe paymentMethod string indicates which Vivawallet sub-method was\nused; transactionUuid is the cross-system identifier for chargeback\nand refund flows.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the payment record.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderId",
            "description": "Order this payment belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer who placed the order (denormalised from orders.customers_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "paymentMethod",
            "description": "Which Vivawallet sub-method was used. Example values seen in\nproduction:\n- 'VivawalletKlarna' / 'vivawallet_klarna': Klarna invoice / pay-later\n- 'VivawalletCreditcard' / 'vivawallet_creditcard': card payment\n- 'VivawalletPaypal' / 'vivawallet_paypal': PayPal\n- 'VivawalletApplepay' / 'vivawallet_applepay': Apple Pay\n- 'VivawalletGooglepay' / 'vivawallet_googlepay': Google Pay\n\nBoth CamelCase and snake_case variants appear in production —\nhistorical drift across module versions. Treat them as equivalent\nwhen matching by sub-method.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "notificationId",
            "description": "Sequence number distinguishing successive notifications for the same order (1 = initial, higher = retries / refunds).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "orderCode",
            "description": "Vivawallet 'orderCode' identifying the payment session at the provider. Used for cross-referencing with Vivawallet's merchant portal.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "transactionUuid",
            "description": "Vivawallet transaction UUID. Stable cross-system identifier — use this for chargeback handling and refund APIs.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "sessionId",
            "description": "Browser session id captured at checkout. Useful for correlating with storefront analytics.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "AddressFormat",
        "description": "A country-specific address-rendering template. Different countries print\npostal addresses in different orders (e.g. 'CITY POSTCODE' vs 'POSTCODE\nCITY', whether the state goes on its own line, where the company name\nsits relative to the recipient name). Each Country.addressFormatId points\nto one of these templates, and the storefront / admin / order documents\nrender addresses by substituting recipient values into the template.\n\nThe template uses placeholders for the address fields (recipient name,\nstreet, postcode, city, state, country); the formatter consumes them\nwhen rendering an AddressBook / BillingAddress / order-shipping snapshot.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the format (address_format_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressFormat",
            "description": "Long-form template used to render multi-line postal addresses (the form printed on shipping labels and order documents).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "addressSummary",
            "description": "Short-form template used to render single-line address summaries (the form shown in lists, order tables, and dropdowns).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ActionRecorderEntry",
        "description": "One audit-trail entry written by the platform's action recorder. The\nrecorder logs sensitive admin and customer events (login attempts, password\nresets, export jobs, anything that needs an after-the-fact paper trail) so\nsecurity and compliance reports can answer 'who did what, when, from\nwhere, and did it succeed?' against the same surface.\n\nRows are append-only. Filter by module to scope to one event source, by\nuserId to follow one principal across modules, and by success to\nreconcile failed-vs-successful attempt rates (e.g. brute-force detection).",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the audit entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "module",
            "description": "Source module that wrote the row — a free-form code identifying which\ncode path emitted the audit entry. Example values seen in production\ncode (aicc-admin/pub/login.php, action_recorder_log.php):\n- 'ar_admin_login' — admin login attempt\n- 'ar_admin_logoff' — admin logout\n- 'ar_admin_force_action' — admin-triggered force operations (e.g. cache resets)\nTenants may add modules; treat as free-form code.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userId",
            "description": "Id of the user the entry is about. Null for anonymous attempts (e.g. failed login with an unknown email).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userName",
            "description": "Username / email of the user the entry is about. Captured at write time so the row stays readable even if the user is later deleted.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "identifier",
            "description": "Free-form context captured by the module — for ar_admin_login / ar_admin_logoff this holds the request IP, for ar_admin_force_action it holds the action description (e.g. 'Force Reset Redis').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "userAgent",
            "description": "User-Agent string of the request, captured for forensics. Null when the module didn't have request headers in scope.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "success",
            "description": "Outcome of the recorded action. true = succeeded, false = failed, null = the module wrote a status-less informational entry.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the entry was written. Append-only — the recorder never updates a row after creation.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ActionRecorderPage",
        "description": "A page of audit entries plus the unfiltered total, so paginated UIs can\nshow 'showing N of M' without a second count round-trip.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "total",
            "description": "Total entries matching the filter (across all pages).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "entries",
            "description": "The current page of entries, newest first.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "ActionRecorderEntry",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerPrice",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "price",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "currency",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "validFrom",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "validTo",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductVolumeAddonPriceTier",
        "description": "One step in a per-product step-pricing ladder. Tenants define thresholds\n('buy 10 → €5.50, buy 50 → €4.90') so the storefront and quoting engine\ncan swap in the lower unit price once the basket reaches the minimum\nquantity. Distinct from ProductVolumeDiscountTier — that surface applies a\npercentage discount keyed off customer group / customer type, while this\nsurface replaces the unit price outright on a per-product basis.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "minimumQuantity",
            "description": "Quantity the basket must reach for this tier's price to apply.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "unitPrice",
            "description": "Replacement unit price once the threshold is met, in the tenant's default currency.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductVolumeDiscountTier",
        "description": "One tier in a group-based volume-discount ladder. The discount is expressed\nas a percentage off the regular price and is gated by customer group,\ncustomer type (B2B vs B2C vs all), or a specific customer id — letting\ntenants run wholesale ladders, contract pricing, and named-customer deals\nthrough the same surface.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "minimumQuantity",
            "description": "Quantity threshold the basket must reach for this discount to apply.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "discountPercentage",
            "description": "Discount percentage applied off the regular price once the threshold is met.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Float",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerGroupId",
            "description": "Customer-group code this tier is restricted to. Null when not group-gated.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer id this tier is restricted to. 0 (or null) means any customer.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerType",
            "description": "Customer-type gate for this tier.\nExample values (from the products_volume_discount_groups.customer_type enum):\n- 'all' — applies to all shoppers (the only value seen in production today)\n- 'b2b' — business shoppers only\n- 'b2c' — consumer shoppers only",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomersBraintreeToken",
        "description": "A saved card kept in Braintree's vault for one customer. The platform\nstores only the Braintree-side payment-method-token plus a few\ndisplay-friendly bits (card type, masked number, expiry) — the actual\nPAN never lives on platform infrastructure. At checkout the storefront\nreferences the token to charge against the saved card without\nre-collecting card details (PCI scope reduction).\n\nOne customer can have multiple saved cards (e.g. corporate + personal,\nor expired + replacement). The 'currently default' card isn't an\nexplicit column on this surface — applications typically pick the\nmost-recent dateAdded as the default, or read the default off\nBraintree's customer record directly.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the token entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer the saved card belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "braintreeToken",
            "description": "Braintree payment-method-token (vault id). Pass this to Braintree at charge time to bill the saved card.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "cardType",
            "description": "Card brand (e.g. 'Visa', 'MasterCard', 'Amex'). Returned by Braintree at vault time and cached here for display.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "numberFiltered",
            "description": "Masked card number for display (e.g. '****-****-****-1234'). The full PAN is never stored locally — only the masked form.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "expiryDate",
            "description": "Card expiry, in the format Braintree returns (typically 'MM/YYYY').",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "dateAdded",
            "description": "Timestamp the card was added to the vault. Used as a tiebreaker when picking a 'most recent' default.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerBlacklistEntry",
        "description": "A blacklist entry pinning one customer to a moderation status —\ntypically 'blocked from purchasing' for chargeback fraud, abusive\nreturns, or unpaid invoices. Multiple rows per customer can stack\nhistory (each new status is a fresh row, the latest wins), and the\nfree-form reason field is kept for audit so operators can explain\nwhy a block was added later.\n\nDistinct from Customer.blockPayments / blockShipments — those are\nper-method bans (this customer can't pay with X / ship via Y) while\nCustomerBlacklist is the binary 'stop this customer from buying at\nall' switch. Distinct from CustomerProductInclusion — that limits\nwhich products a customer can see, while this surface gates whether\nthey can transact in the first place.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the blacklist entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer the entry applies to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "status",
            "description": "Blacklist status code. Tenant-defined; typically 1 = active block, 0 = lifted / inactive. Multiple statuses stack across rows so operators can review history.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "reason",
            "description": "Free-form admin note explaining why the entry was added. Captured for audit.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "lastModified",
            "description": "Timestamp the entry was last edited (the resolver orders newest-first by this column).",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerProductInclusion",
        "description": "An allowlist row binding one product to one customer. When a customer has\nany inclusion rows the catalog flips into 'private' mode for them — they\ncan only see and order the products explicitly listed here, not the rest\nof the tenant's catalog. Used to run B2B private catalogs, named-account\ncontract assortments, and confidential pre-release windows.\n\nEmpty inclusions means the customer sees the standard catalog (no\nrestriction). The check is per-customer, not per-customer-group — for\ngroup-level visibility rules see the customer-group / channel surfaces.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the inclusion entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customerId",
            "description": "Customer the inclusion applies to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product the customer is granted access to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CustomerProductInclusionInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "customerId",
            "description": "Customer to grant or revoke access for.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product to grant or revoke access to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "ProductCustomOption",
        "description": "A product-specific override of a shared ProductOption. Where ProductOption\ndefines the option globally (with its values, sort, and labels),\nProductCustomOption attaches that option to one product and lets the tenant\ntweak per-product behaviour: whether it's required at checkout, the display\nposition relative to other options on this product, and the input rendering\ntype (radio / select / checkbox / textarea / etc.).\n\nThis table is currently empty across production tenants — mutations are\nwired but no rows exist yet. The parent products_options system (rendered\nvia productAttributes) carries the live configuration today; expect this\nsurface to gain rows as tenants migrate to per-product option overrides.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the product-custom-option link (products_custom_options_id).",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productId",
            "description": "Product this option override applies to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsOptionsId",
            "description": "Id of the parent ProductOption (products_options) being overridden.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "required",
            "description": "Whether the shopper must pick a value for this option before adding the product to the basket.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "position",
            "description": "Display position of this option within the product's option list. Lower values render first.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": "Input rendering type for this option on this product. Defaults to 'radio'.\nExample values (from the oscommerce-derived custom-options model used by\naicc-admin/pub/custom_options.php):\n- 'radio' — radio-button group (default)\n- 'select' — dropdown\n- 'checkbox' — multi-select checkboxes\n- 'text' — short free-form input\n- 'textarea' — long free-form input\n- 'date' / 'time' / 'area' — date / time / combined date+time inputs\n- 'file' — file upload",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "CreateProductCustomOptionInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "productId",
            "description": "Product to attach this option override to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsOptionsId",
            "description": "Id of the parent ProductOption being overridden.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "required",
            "description": "Whether the option is required at checkout. Defaults to false.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "position",
            "description": "Display position within the product's option list.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": "Input rendering type (see ProductCustomOption.type for example values).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "UpdateProductCustomOptionInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "productId",
            "description": "Move the override to a different product.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsOptionsId",
            "description": "Point the override at a different ProductOption.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "required",
            "description": "Toggle whether the option is required at checkout.",
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "position",
            "description": "New display position within the product's option list.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": "New input rendering type (see ProductCustomOption.type for example values).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "CustomerFavorite",
        "description": "A favorited product on a customer's wishlist. Backed by the\ncustomers_favorites table — one row per (customer, product) pair.\nPowers the storefront's 'Heart this product' / 'Save for later' /\n'My wishlist' surface, the saved-favorites widget on the customer\naccount page, and the back-in-stock notification audience for\nany restock alerts a tenant runs.\n\nDistinct from customers_basket — favorites are a long-lived\nproduct list ('I want this someday'), while customers_basket is\nthe active cart in flight to checkout.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "id",
            "description": "Database row id of the favorite entry.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "ID",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer the favorite belongs to.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsId",
            "description": "Product the favorite points at.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "AddCustomerFavoriteInput",
        "description": null,
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "customersId",
            "description": "Customer to attach the favorite to.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsId",
            "description": "Product the customer is favoriting.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Int",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "INPUT_OBJECT",
        "name": "RemoveCustomerFavoriteInput",
        "description": "Input for deleteFavorite. At least one of id, customersId, or\nproductsId must be provided — the resolver builds an AND filter\nfrom the supplied fields and deletes the matching rows. Pass id\nto remove one specific favorite; pass (customersId, productsId)\nto remove a customer's favorite of a specific product; pass just\ncustomersId to clear the customer's wishlist; pass just productsId\nto remove every customer's favorite of one product.",
        "specifiedByURL": null,
        "isOneOf": false,
        "fields": null,
        "inputFields": [
          {
            "name": "id",
            "description": "Database row id of the favorite to remove.",
            "type": {
              "kind": "SCALAR",
              "name": "ID",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "customersId",
            "description": "Customer scope for the removal.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "productsId",
            "description": "Product scope for the removal.",
            "type": {
              "kind": "SCALAR",
              "name": "Int",
              "ofType": null
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "interfaces": null,
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__Schema",
        "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "types",
            "description": "A list of all types supported by this server.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__Type",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "queryType",
            "description": "The type that query operations will be rooted at.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "mutationType",
            "description": "If this server supports mutation, the type that mutation operations will be rooted at.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "subscriptionType",
            "description": "If this server support subscription, the type that subscription operations will be rooted at.",
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "directives",
            "description": "A list of all directives supported by this server.",
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__Directive",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__Type",
        "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "kind",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "ENUM",
                "name": "__TypeKind",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "specifiedByURL",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "fields",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "false",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Field",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "interfaces",
            "description": null,
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Type",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "possibleTypes",
            "description": null,
            "args": [],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__Type",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "enumValues",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "false",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__EnumValue",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "inputFields",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "false",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "LIST",
              "name": null,
              "ofType": {
                "kind": "NON_NULL",
                "name": null,
                "ofType": {
                  "kind": "OBJECT",
                  "name": "__InputValue",
                  "ofType": null
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ofType",
            "description": null,
            "args": [],
            "type": {
              "kind": "OBJECT",
              "name": "__Type",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isOneOf",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "Boolean",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "ENUM",
        "name": "__TypeKind",
        "description": "An enum describing what kind of type a given `__Type` is.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": [
          {
            "name": "SCALAR",
            "description": "Indicates this type is a scalar.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "OBJECT",
            "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INTERFACE",
            "description": "Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "UNION",
            "description": "Indicates this type is a union. `possibleTypes` is a valid field.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ENUM",
            "description": "Indicates this type is an enum. `enumValues` is a valid field.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INPUT_OBJECT",
            "description": "Indicates this type is an input object. `inputFields` is a valid field.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "LIST",
            "description": "Indicates this type is a list. `ofType` is a valid field.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "NON_NULL",
            "description": "Indicates this type is a non-null. `ofType` is a valid field.",
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__Field",
        "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "args",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "false",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__InputValue",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isDeprecated",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deprecationReason",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__InputValue",
        "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "type",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "OBJECT",
                "name": "__Type",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "defaultValue",
            "description": "A GraphQL-formatted string representing the default value for this input value.",
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isDeprecated",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deprecationReason",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__EnumValue",
        "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isDeprecated",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "deprecationReason",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "OBJECT",
        "name": "__Directive",
        "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": [
          {
            "name": "name",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "description",
            "description": null,
            "args": [],
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "isRepeatable",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "locations",
            "description": null,
            "args": [],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "ENUM",
                    "name": "__DirectiveLocation",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "args",
            "description": null,
            "args": [
              {
                "name": "includeDeprecated",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "Boolean",
                  "ofType": null
                },
                "defaultValue": "false",
                "isDeprecated": false,
                "deprecationReason": null
              }
            ],
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "LIST",
                "name": null,
                "ofType": {
                  "kind": "NON_NULL",
                  "name": null,
                  "ofType": {
                    "kind": "OBJECT",
                    "name": "__InputValue",
                    "ofType": null
                  }
                }
              }
            },
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "inputFields": null,
        "interfaces": [],
        "enumValues": null,
        "possibleTypes": null
      },
      {
        "kind": "ENUM",
        "name": "__DirectiveLocation",
        "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.",
        "specifiedByURL": null,
        "isOneOf": null,
        "fields": null,
        "inputFields": null,
        "interfaces": null,
        "enumValues": [
          {
            "name": "QUERY",
            "description": "Location adjacent to a query operation.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "MUTATION",
            "description": "Location adjacent to a mutation operation.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "SUBSCRIPTION",
            "description": "Location adjacent to a subscription operation.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "FIELD",
            "description": "Location adjacent to a field.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "FRAGMENT_DEFINITION",
            "description": "Location adjacent to a fragment definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "FRAGMENT_SPREAD",
            "description": "Location adjacent to a fragment spread.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INLINE_FRAGMENT",
            "description": "Location adjacent to an inline fragment.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "VARIABLE_DEFINITION",
            "description": "Location adjacent to a variable definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "SCHEMA",
            "description": "Location adjacent to a schema definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "SCALAR",
            "description": "Location adjacent to a scalar definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "OBJECT",
            "description": "Location adjacent to an object type definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "FIELD_DEFINITION",
            "description": "Location adjacent to a field definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ARGUMENT_DEFINITION",
            "description": "Location adjacent to an argument definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INTERFACE",
            "description": "Location adjacent to an interface definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "UNION",
            "description": "Location adjacent to a union definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ENUM",
            "description": "Location adjacent to an enum definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "ENUM_VALUE",
            "description": "Location adjacent to an enum value definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INPUT_OBJECT",
            "description": "Location adjacent to an input object type definition.",
            "isDeprecated": false,
            "deprecationReason": null
          },
          {
            "name": "INPUT_FIELD_DEFINITION",
            "description": "Location adjacent to an input object field definition.",
            "isDeprecated": false,
            "deprecationReason": null
          }
        ],
        "possibleTypes": null
      }
    ],
    "directives": [
      {
        "name": "include",
        "description": "Directs the executor to include this field or fragment only when the `if` argument is true.",
        "isRepeatable": false,
        "locations": [
          "FIELD",
          "FRAGMENT_SPREAD",
          "INLINE_FRAGMENT"
        ],
        "args": [
          {
            "name": "if",
            "description": "Included when true.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ]
      },
      {
        "name": "skip",
        "description": "Directs the executor to skip this field or fragment when the `if` argument is true.",
        "isRepeatable": false,
        "locations": [
          "FIELD",
          "FRAGMENT_SPREAD",
          "INLINE_FRAGMENT"
        ],
        "args": [
          {
            "name": "if",
            "description": "Skipped when true.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "Boolean",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ]
      },
      {
        "name": "deprecated",
        "description": "Marks an element of a GraphQL schema as no longer supported.",
        "isRepeatable": false,
        "locations": [
          "FIELD_DEFINITION",
          "ARGUMENT_DEFINITION",
          "INPUT_FIELD_DEFINITION",
          "ENUM_VALUE"
        ],
        "args": [
          {
            "name": "reason",
            "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",
            "type": {
              "kind": "SCALAR",
              "name": "String",
              "ofType": null
            },
            "defaultValue": "\"No longer supported\"",
            "isDeprecated": false,
            "deprecationReason": null
          }
        ]
      },
      {
        "name": "specifiedBy",
        "description": "Exposes a URL that specifies the behavior of this scalar.",
        "isRepeatable": false,
        "locations": [
          "SCALAR"
        ],
        "args": [
          {
            "name": "url",
            "description": "The URL that specifies the behavior of this scalar.",
            "type": {
              "kind": "NON_NULL",
              "name": null,
              "ofType": {
                "kind": "SCALAR",
                "name": "String",
                "ofType": null
              }
            },
            "defaultValue": null,
            "isDeprecated": false,
            "deprecationReason": null
          }
        ]
      },
      {
        "name": "oneOf",
        "description": "Indicates exactly one field must be supplied and this field must not be `null`.",
        "isRepeatable": false,
        "locations": [
          "INPUT_OBJECT"
        ],
        "args": []
      }
    ]
  }
}
