{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-developer-portal/system-integration/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown","redocly_category":"Integrations","owner":"MB"},"seo":{"title":"Working with the X-Stormconnect-Header","description":"How to construct and use the X-Stormconnect-Header in Norce Commerce Connect imports. Practical guide with scenario-based examples.","keywords":"technical, storm-connect, guide, system-integration, header, import, product, price, onhand"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"working-with-the-x-stormconnect-header"},"children":["Working with the X-Stormconnect-Header"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every asynchronous import to Norce Commerce Connect requires an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Stormconnect-Header"]}," HTTP header. This header tells Norce exactly which fields your payload contains and should be written — fields you do not declare are ignored and left unchanged in Norce."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This design is what makes it safe to have multiple systems writing to the same product catalog without overwriting each other's data."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-core-concept"},"children":["The core concept"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The header is a JSON object serialized as a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["single-line string"]}," in the HTTP header. You do not send a list of things to overwrite — you declare which fields are present in your payload. Norce treats everything else as \"not my concern.\""]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"X-Stormconnect-Header: {\"AccountId\":12,\"FullFile\":false,\"ProductFieldsThatAreSet\":[0,1,6],...}\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This has two important consequences:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["You only update what you send."]}," If your ERP owns prices and your PIM owns descriptions, neither system will clobber the other's data as long as each declares only its own fields."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Omitting a field is not the same as sending null."]}," A null value in the payload for a field not declared in the header is completely ignored. A null for a field that ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["is"]}," declared will write null."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"required-fields-in-every-header"},"children":["Required fields in every header"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccountId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["integer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ID of the system account making the import. Used for traceability in logs and for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LimitedUpdate"]}," logic."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FullFile"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["boolean"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", records absent from this payload are deactivated. When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},", only records in the payload are touched. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Default to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," if unsure."]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SerializationType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["integer"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]}," for JSON, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]}," for XML. Match this to your request ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content-Type"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FullFile"]}," is a destructive operation."]}," Set it to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," only on scheduled full imports, never on delta updates. See ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/system-integration-patterns"},"children":["System integration patterns"]}," for when to use each."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"field-array-dependencies"},"children":["Field array dependencies"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Some ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*FieldsThatAreSet"]}," arrays only take effect if a parent array enables them. Forgetting the parent is one of the most common mistakes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For product imports:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"ProductFieldsThatAreSet\n  └── [4] Variants          → enables VariantFieldsThatAreSet\n        └── [4] Cultures    → enables VariantCultureFieldsThatAreSet\n        └── [5] Skus        → enables SkuFieldsThatAreSet\n              └── [20] StandardPrice → enables SkuPriceListFieldsThatAreSet\n  └── [5] Cultures          → enables ProductCultureFieldsThatAreSet\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SkuFieldsThatAreSet"]}," but forget ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[5] Skus"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VariantFieldsThatAreSet"]}," (and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[4] Variants"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProductFieldsThatAreSet"]},"), your SKU fields will be silently ignored."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"practical-scenarios"},"children":["Practical scenarios"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-1-erp-product-sync-products--prices--on-hand"},"children":["Scenario 1: ERP product sync (products + prices + on-hand)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The most common full product import from an ERP. The ERP owns status, logistics fields, and the standard price list."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"AccountId\": 12,\n  \"FullFile\": false,\n  \"SerializationType\": 0,\n  \"ProductFieldsThatAreSet\": [0, 1, 4, 5, 6],\n  \"ProductCultureFieldsThatAreSet\": [0],\n  \"VariantFieldsThatAreSet\": [0, 3, 4, 5, 14, 18, 19],\n  \"VariantCultureFieldsThatAreSet\": [],\n  \"SkuFieldsThatAreSet\": [1, 2, 7, 8, 14, 16, 18, 19, 20, 21],\n  \"SkuCultureFieldsThatAreSet\": [0],\n  \"SkuPriceListFieldsThatAreSet\": [3, 5, 10],\n  \"IgnoreSkuPriceListFieldsWhenEmpty\": [3]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What this does:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates manufacturer, name, variants, cultures, and categories on the product"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ManufacturerPartNo"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IsDangerousGoods"]},", logistics dimensions (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LogisticWidth"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LogisticHeight"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LogisticDepth"]},"), and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ActualWeight"]}," on variants"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates status, type, logistics, and the standard price list on SKUs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Uses ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IgnoreSkuPriceListFieldsWhenEmpty"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceSale"]}," so SKUs without a price in this import don't get their price zeroed out"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Key fields explained:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[3] IsDangerousGoods"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[14] ActualWeight"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VariantFieldsThatAreSet"]}," — these feed Norce's shipping logic. Import them as part of the product import, not as parametrics."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[22] StatusCreateOnly"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SkuFieldsThatAreSet"]}," — use this instead of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[1] Status"]}," if you only want to set status when the product is first created and let it be managed in Norce after that."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-2-price-only-update"},"children":["Scenario 2: Price-only update"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your pricing system sends price list updates independently from the product catalog, multiple times per day."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/openapi/product/importskupricelists"},"children":["ImportSkuPriceLists"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SkuPriceListHeader"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"AccountId\": 15,\n  \"FullFile\": false,\n  \"SerializationType\": 0,\n  \"SkuPriceListFieldsThatAreSet\": [3, 6, 10],\n  \"IgnoreSkuPriceListFieldsWhenEmpty\": [3]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What this does:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceSale"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceRecommended"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IsActive"]}," on price list entries"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Ignores SKUs where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceSale"]}," is missing in the payload (prevents accidental zeroing)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Does not touch any product fields — this import cannot create or deactivate products"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"FullFile\": true"]}," only on a complete price list replacement (e.g., a campaign going live). For delta price updates, always use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-3-on-hand-only-update"},"children":["Scenario 3: On-hand only update"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your WMS pushes stock levels frequently — potentially several times per hour. This should be an aggregated import in a scheduled manner to Connect."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/openapi/product/importonhands"},"children":["ImportOnHands"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SkuOnhandHeader"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"AccountId\": 18,\n  \"FullFile\": false,\n  \"SerializationType\": 0,\n  \"SkuOnhandFieldsThatAreSet\": [3, 4, 5]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What this does:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OnhandValue"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IncomingValue"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NextDeliveryDate"]}," only"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Never deactivates products or changes any product data"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Setting ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OnhandValue"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]}," is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," the same as deactivating a warehouse location. Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[10] IsActive"]}," to deactivate a product at a warehouse, for example when it is no longer stocked there."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Aggregation is your responsibility."]}," If your WMS emits a stream of individual stock change events, your integration must collect and aggregate them over a time window — typically 15 to 60 minutes — and send the net result as a single batch. Do not forward each WMS event directly to Norce as it arrives. Norce has a significant processing overhead per import job, so a high volume of small imports will cause the queue to grow faster than it can be processed, increasing lead times for all imports — including products and prices."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-4-content-enrichment-from-a-separate-pim-or-dam"},"children":["Scenario 4: Content enrichment from a separate PIM or DAM"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A content system owns product descriptions, images, and SEO fields. It must not overwrite the ERP's manufacturer or logistics data."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"AccountId\": 20,\n  \"FullFile\": false,\n  \"SerializationType\": 0,\n  \"ProductFieldsThatAreSet\": [5, 7, 8],\n  \"ProductCultureFieldsThatAreSet\": [0, 2, 3, 4, 5, 8, 9, 10, 11, 13]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["What this does:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updates product cultures (name, descriptions, SEO fields) and images"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Does not touch manufacturer, categories, variants, SKUs, or prices"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Because ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccountId"]}," is different from the ERP account, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NameLimitedUpdate"]}," (code ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["12"]},") can be used on the ERP side to prevent the content system's name from being overwritten by ERP imports"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"scenario-5-create-only-fields"},"children":["Scenario 5: Create-only fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A common pattern when multiple systems write to the same entity: set a field only on creation, then let it be managed manually in Norce."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For example, set status to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Coming"]}," when a product is first imported, but don't update it on subsequent imports:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"\"SkuFieldsThatAreSet\": [22]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[22] StatusCreateOnly"]}," writes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Status"]}," only if the SKU does not yet exist. On updates, it is ignored. The same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CreateOnly"]}," pattern exists for names, descriptions, and other fields across all header types."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"multi-source-imports"},"children":["Multi-source imports"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When different systems write to the same product, use a different ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccountId"]}," for each. This enables:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Traceability"]}," — the Admin UI shows which account last modified each import job"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LimitedUpdate"]}," fields"]}," — some fields (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[12] NameLimitedUpdate"]}," in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProductCultureFieldsThatAreSet"]},") only apply an update if this account was the last to write that field, preventing systems from overwriting each other"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Keep one system account per integration service and do not share account IDs between unrelated imports."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-mistakes"},"children":["Common mistakes"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Mistake"},"children":["Mistake"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Consequence"},"children":["Consequence"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Fix"},"children":["Fix"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Forgetting parent array (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Variants"]},") when declaring child fields (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SkuFieldsThatAreSet"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Child fields silently ignored"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Follow the dependency chain — see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#field-array-dependencies"},"children":["Field array dependencies"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FullFile: true"]}," on a delta import"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Products absent from payload get deactivated"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Only use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FullFile: true"]}," on scheduled full imports"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Declaring a field in the header but sending ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," in the payload"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Writes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},", overwriting existing data"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IgnoreSkuPriceListFieldsWhenEmpty"]}," for price fields, or omit the field from the header if you don't want to write it"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Putting logistics fields (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ActualWeight"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IsDangerousGoods"]},", dimensions) in parametrics instead of the header"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Shipping logic does not use them"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Map these to the dedicated SKU/Variant fields in the header"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sharing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AccountId"]}," across unrelated systems"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LimitedUpdate"]}," logic breaks, traceability lost"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One account ID per integration service"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Forwarding WMS stock events to Norce in real time, one per change"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Import queue grows faster than Norce can process it, causing increasing lead times across all import types"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Aggregate all stock changes over a time window (15–60 min) and send as one batch"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"further-reading"},"children":["Further reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Header specifications by import type:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/x-stormconnect-header-product"},"children":["ProductHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/x-stormconnect-header-skuprices"},"children":["SkuPriceListHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/x-stormconnect-header-skuonhand"},"children":["SkuOnhandHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/supplierservice/x-stormconnect-header"},"children":["SupplierProductHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/customerservice/x-stormconnect-header"},"children":["CustomerHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/x-stormconnect-header-pricelists"},"children":["PriceListHeader"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/productservice/x-stormconnect-header-relations"},"children":["RelationHeader"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/calling-norce-commerce-connect"},"children":["Calling Norce Commerce Connect"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/system-integration-patterns"},"children":["System integration patterns"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/products-and-pricing-integrations"},"children":["Products and pricing integrations"]}]}]}]},"headings":[{"value":"Working with the X-Stormconnect-Header","id":"working-with-the-x-stormconnect-header","depth":1},{"value":"The core concept","id":"the-core-concept","depth":2},{"value":"Required fields in every header","id":"required-fields-in-every-header","depth":2},{"value":"Field array dependencies","id":"field-array-dependencies","depth":2},{"value":"Practical scenarios","id":"practical-scenarios","depth":2},{"value":"Scenario 1: ERP product sync (products + prices + on-hand)","id":"scenario-1-erp-product-sync-products--prices--on-hand","depth":3},{"value":"Scenario 2: Price-only update","id":"scenario-2-price-only-update","depth":3},{"value":"Scenario 3: On-hand only update","id":"scenario-3-on-hand-only-update","depth":3},{"value":"Scenario 4: Content enrichment from a separate PIM or DAM","id":"scenario-4-content-enrichment-from-a-separate-pim-or-dam","depth":3},{"value":"Scenario 5: Create-only fields","id":"scenario-5-create-only-fields","depth":3},{"value":"Multi-source imports","id":"multi-source-imports","depth":2},{"value":"Common mistakes","id":"common-mistakes","depth":2},{"value":"Further reading","id":"further-reading","depth":2}],"frontmatter":{"seo":{"title":"Working with the X-Stormconnect-Header","description":"How to construct and use the X-Stormconnect-Header in Norce Commerce Connect imports. Practical guide with scenario-based examples.","keywords":"technical, storm-connect, guide, system-integration, header, import, product, price, onhand"},"metadata":{"redocly_category":"Integrations","owner":"MB"}},"lastModified":"2026-07-10T06:04:35.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/developer-portal/system-integration/working-with-the-stormconnect-header","userData":{"isAuthenticated":false,"teams":["anonymous"]}}